Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 276

/ вопрос решён /

Здравствуйте, эксперты!
рррр!! эти строки!!!
вот задача такая, вроде легкая, но ошибку кидает(((
известен проходной балл в универ
дана строка в которой ФИО и прох. балл отделены одним пробелом. вывести поступил ли он иль нет. помогите пожалуйста!

Приложение:
  1. program Project2;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6. SysUtils;
  7. var s,num,str,l:string; n,k,i,b,c,cpp:integer;
  8. begin
  9. writeln('control post point'); readln(cpp);
  10. writeln('insert data'); readln(s);
  11. while pos(' ',s)>0 do
  12. begin
  13. b:=0;
  14.  
  15. for i:=1 to pos(' ',s) do begin
  16. inc(n); end;
  17. delete(s,1,k);
  18.  
  19. end;
  20. if l<cpp then
  21. write(s+' '++' don`t proshol') else
  22. write(s+' '+l+' proshol');
  23. readln;
  24. end.
  25.  


I{ () T Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: I{ () T (статус: Посетитель)
Вопрос отправлен: 12 октября 2009, 21:00
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Паровоз

Здравствуйте, I{ () T!
В строке
l:=length(s)
переменная l должна иметь целочисленный тип, а не строковый.

Ответ отправил: Паровоз (статус: 10-ый класс)
Время отправки: 12 октября 2009, 21:34
Оценка за ответ: 5

Комментарий к оценке: спасибо)

Ответ #2. Отвечает эксперт: min@y™

Найди 10 отличий:

program p3276;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
// Функция извлечения из строки завершающего числа
function ExtractLastNumber(const S: string): Integer;
var
  Number: string; // Кусок строки, содержащий число
  Index: Integer; // Параметр цикла
begin
  Number:= '';    // Инициализация переменной
 
  // Проход по строке от конца к началу - извлечение числа.
  for Index:= Length(S) downto 1 do
    if S[Index] in ['0'..'9'] // если текущий символ - цифра,
      then Number:= S[Index] + Number // то добавляю её к куску  строки, содержащему число,
      else Break; // иначе - выхожу из цикла (число получено).
 
  // Преобразование куска строки, содержащего число, в 32-битное целое (Integer):
  // функция TryStrToInt() возвращает True, если первый параметр (Number)
  // действительно удалось преобразовать в 32-битное целое.
  if not TryStrToInt(Number, Result)
    then Result:= -1; // <--- если преобразование не удалось.
end;
 
var
  Data: string; // Вводимая строка (ФИО и балл)
  Cpp: Integer; // Вводимый проходной балл.
  L: Integer;   // Извлекаемый набранный балл из строки Data
 
begin // начало проги :)
  Write(' Enter the control post point: ');
  ReadLn(Cpp); // Ввод проходного балла
 
  Write(' Enter the data: ');
  ReadLn(Data); // Ввод ФИО и балла
 
  L:= ExtractLastNumber(Data); // Извлечение балла из введённой строки
 
  if L <> -1 // Если извлечение успешно,
    then if L < Cpp // то: если балл меньше проходного,
           then write(' don`t proshol') // то вывод "не прошёл"
           else write(' proshol')       // иначе - "прошёл"
    else WriteLn(' Data is incorrect.'); // иначе - вывод "неверно введённые данные" (в конце строки - нечисло)
 
  ReadLn; // Ожидание нажатия Enter
end. // конец проги :)

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 13 октября 2009, 08:52
Оценка за ответ: 5

Комментарий к оценке: ОБАЛДЕТЬ!!!!! все понятно(иначе и быть не может)

Мини-форум вопроса

Всего сообщений: 25; последнее сообщение — 14 октября 2009, 22:15; участников в обсуждении: 5.

Страницы: [1] [2] [Следующая »]

Паровоз

Паровоз (статус: 10-ый класс), 13 октября 2009, 11:19 [#1]:

Цитата:

Найди 10 отличий


Проще найти 10 совпадений:
1) program
2) {$APPTYPE CONSOLE}
3) uses SysUtils;
4) :=
5) begin
6) for
7) do
8) end
9) write
10) readln
I{ () T

I{ () T (статус: Посетитель), 13 октября 2009, 16:19 [#2]:

2 min@y)))) не в обиду, но вы как всегда на высоком полете ее написали))) я ай эм школьник пока) но все равно спасибо=)
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
I{ () T

I{ () T (статус: Посетитель), 13 октября 2009, 16:26 [#3]:

write(s+' '+l+' don`t proshol') else
write(s+' '+l+' proshol');........не совместимы данные
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
min@y™

min@y™ (статус: Доктор наук), 13 октября 2009, 16:35 [#4]:

Цитата (I{ () T):


не в обиду, но вы как всегда на высоком полете ее написали))) я ай эм школьник пока) но все равно спасибо=)

А чо, не работает, что ли?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
I{ () T

I{ () T (статус: Посетитель), 13 октября 2009, 16:37 [#5]:

работает. железно работает. но у училки шары будут отсего кода......и мноооого вопросов))
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
min@y™

min@y™ (статус: Доктор наук), 13 октября 2009, 16:51 [#6]:

Цитата (I{ () T):

но у училки шары будут отсего кода......и мноооого вопросов))


Да ладно! Быть этого не может! Программка-то примитивнейшая. Ну какие могут быть по ней вопросы, а? Что тебе в ней непонятно?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
I{ () T

I{ () T (статус: Посетитель), 13 октября 2009, 17:42 [#7]:

then Number:= S[Index] + Number
if L <> -1
for example...
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
Вадим К

Вадим К (статус: Академик), 13 октября 2009, 18:07 [#8]:

В целом, многие преподаватели ставят плохую оценку, если программа правильная, но студент не понимает её. И могут поставить хорошую, если даже программа неверная, но студент может объяснить её и что у него не так. Я в свое время точно так же делал.
P.S. Я считаю это нормальным поведением. Хотя иногда девочкам за красивые глазки можно ставить позитивную оценку, если конечно они улыбаются , а не скалятся.
Галочка "подтверждения прочтения" - вселенское зло.
I{ () T

I{ () T (статус: Посетитель), 13 октября 2009, 18:32 [#9]:

ну я вот могу объяснить прогу, но почему он ошибку выдает тут??? write(s+' '+l+' don`t proshol') else
write(s+' '+l+' proshol');........не совместимы данные
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
Вадим К

Вадим К (статус: Академик), 13 октября 2009, 18:44 [#10]:

ну вот. и на самом простом завалились и не сдали. пытаетесь сложить строку и число.
наиболее просто написать эту строку так
s := s + ' ';
//....
write(s,l,' don''t proshol') else
write(s,l,' proshol');

P.S. а min@y™ не знает как кавычку вставить одиночную...не думал.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 13 октября 2009, 18:51 [#11]:

Цитата (Вадим К):


P.S. а min@y™ не знает как кавычку вставить одиночную...не думал.


Утверждение неверно. Я занимаюсь программированием на паскале/delphi с 1990 года. Но в своём примере я и не хотел эту кавычку куда-либо вставлять.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 13 октября 2009, 19:04 [#12]:

я же по доброму:)
но на делфи програмировать с 1990 года... это сильно сказано. Ну то что было 12 лет отроду - ну мало чего. А то что делфи в 90 году ещё не было.... хотя...
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 13 октября 2009, 19:12 [#13]:

Я ответ подкорректировал комментариями. Теперь что-то ещё непонятно или как?

Цитата (Вадим К):


но на делфи програмировать с 1990 года... это сильно сказано. Ну то что было 12 лет отроду - ну мало чего. А то что делфи в 90 году ещё не было.... хотя...


Издеваешься? По губам читай:

Цитата (min@y™):

Я занимаюсь программированием на паскале/delphi с 1990 года.


Мне папаша (Ц.Е.Н.) притаранил мой первый комп ещё при совке - в 90-м году, за что я ему охрененно благодарен. Да, это был 286-й, но на моё счастье там был борланд паскаль. Благодаря этому компу и наличию на нём паскаля я щас работаю программистом.

З.Ы. Не надо голословных утверждений.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
I{ () T

I{ () T (статус: Посетитель), 13 октября 2009, 20:12 [#14]:

2 min@y
// Преобразование куска строки, содержащего число, в 32-битное целое (Integer):
// функция TryStrToInt() возвращает True, если первый параметр (Number)
// действительно удалось преобразовать в 32-битное целое.
if not TryStrToInt(Number, Result)
then Result:= -1; // <--- если преобразование не удалось.
end;
а это более упрощенно нельзя перевести?
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
min@y™

min@y™ (статус: Доктор наук), 13 октября 2009, 20:34 [#15]:

Цитата (I{ () T):

а это более упрощенно нельзя перевести?


Не понял, поясни. Неужели ещё что-то непонятно?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
I{ () T

I{ () T (статус: Посетитель), 13 октября 2009, 21:05 [#16]:

-1 непонятно..... обычно 0 или 1
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
min@y™

min@y™ (статус: Доктор наук), 13 октября 2009, 21:16 [#17]:

-1 я выдаю из функции в случае ошибки преобразования, чтобы потом выдать соответствующее сообщение. Вот и всё.

  L:= ExtractLastNumber(Data); // Извлечение балла из введённой строки
 
  if L <> -1 // Если извлечение успешно,
    then if L < Cpp // то: если балл меньше проходного,
           then write(' don`t proshol') // то вывод "не прошёл"
           else write(' proshol')       // иначе - "прошёл"
    else WriteLn(' Data is incorrect.'); // иначе - вывод "неверно введённые данные" (в конце строки - нечисло)

-1 я возвращаю только ради ветвления if L <> -1. И не важно, -1 это или -2364526, главное, что такое значение нельзя выдать за набранный абитуриентом проходной балл, число-то отрицательное. Чуешь логику?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
I{ () T

I{ () T (статус: Посетитель), 13 октября 2009, 21:30 [#18]:

чую=)))
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
I{ () T

I{ () T (статус: Посетитель), 14 октября 2009, 14:34 [#19]:

во...function ExtractLastNumber эту функцию же можно проще записать? через val?
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
min@y™

min@y™ (статус: Доктор наук), 14 октября 2009, 15:33 [#20]:

Цитата (I{ () T):

function ExtractLastNumber эту функцию же можно проще записать? через val?


Что значит проще? Чтоб в ней было меньше кода или тебе имя функции не нравится? Можно сделать и через процедуру Val(), блин, НО ЗАЧЕМ?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:26
Выполнено за 0.03 сек.