IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Помогите найти ошибку
Chimera-Syber
сообщение 21.05.2009 7:07
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Мужской
Реальное имя: Martti

Репутация: -  0  +


Задача такова: дан набор строк (вводятся с клавиатуры). Строка формируется следующим образом: фамилия спортсмена (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.


Сообщение отредактировано: Chimera-Syber - 21.05.2009 7:10
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 3)
Lapp
сообщение 21.05.2009 9:46
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(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);

Заметь, тут исправлена ошибка, которая будет у тебя, если между фамилией и первым результатом нет пробела.
Аналогично можешь поступить и с результатами.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 21.05.2009 11:28
Сообщение #3


Гость






А так будет еще правильнее:
i:=Pos(' ',str);
if (i>10)or(i=0) then i:=10;
fam:=Copy(str,1,i);

))
 К началу страницы 
+ Ответить 
Chimera-Syber
сообщение 21.05.2009 23:03
Сообщение #4





Группа: Пользователи
Сообщений: 2
Пол: Мужской
Реальное имя: Martti

Репутация: -  0  +


Спасибо, помогли
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 14:13
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"