Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Помогите найти ошибку

Автор: 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);

))

Автор: Chimera-Syber 22.05.2009 3:03

Спасибо, помогли