Форум «Всё о Паскале» _ Задачи _ Помогите найти ошибку
Автор: Chimera-Syber 21.05.2009 11:07
Задача такова: дан набор строк (вводятся с клавиатуры). Строка формируется следующим образом: фамилия спортсмена (10 символов) и 6 результатов (каждый результат по 3 символа). Составить программу, определяющую спортсмена, занявшего первое место в соревнованиях.
У меня находит результат самый высокий, но почему-то фамилию не выводит. Помогите найти ошибку:
Код
Program exe2; var str,res,fam,famfin:string; j,n,max,maxfin,i,zif,code:integer; begin {вводим количество строк} writeln ('vvedite kol-vo strok'); readln (n); {обнуляем нужные переменные} i:=1; fam:=''; max:=0; maxfin:=0; famfin:=''; for j:= 1 to n do begin {вводим строку} writeln ('vvedite stroky'); readln (str); repeat fam:=fam+str[i]; i:=i+1; until str[i]<>' '; str:=str+' '; i:=i+1; res:=''; while i<=length(str) do begin if str[i]<>' ' then res:=res+str[i] else begin {преобразуем переменную в число} val(res,zif,code); {сравниваем с текущим максимом в строке} if zif>max then max:=zif; res:=''; end; i:=i+1; end; {сравниваем с максимумом во всем тексте} if max>maxfin then begin maxfin:=max; famfin:=copy(fam,1,length(fam)); end; fam:=''; max:=0; i:=1; end; {выводим результат} writeln ('first place', famfin); writeln ('rezyltat', maxfin); end.
Автор: Lapp 21.05.2009 13:46
Цитата(Chimera-Syber @ 21.05.2009 8:07)
почему-то фамилию не выводит.
Условие в цикле until замени на обратное:
until str[i]=' ';
А вообще, такие вещи делаются иначе. Например, вот так:
i:=Pos(' ',str); if i>10 then i:=10; fam:=Copy(str,1,i);
Заметь, тут исправлена ошибка, которая будет у тебя, если между фамилией и первым результатом нет пробела. Аналогично можешь поступить и с результатами.
Автор: Гость 21.05.2009 15:28
А так будет еще правильнее:
i:=Pos(' ',str); if (i>10)or(i=0) then i:=10; fam:=Copy(str,1,i);