Трабл по паскалю

Мир цифровых технологий
(На-ни-на)
Сообщения: 333
Зарегистрирован: 07-04-2005

Трабл по паскалю

Сообщение Анти][акеР » 17-01-2007

Люди, помогите хто чем может:
Вот задача:

Даны натуральные числа n, a1,...,an(n>=4). Числа а1, ...,ан-это измеренные в сотых долях секунды результаты спортсменов в беге на 100 метров. Составить команду из 4 лучших бегунов для участия в эстафете 4по100.

Вот код решения:

Program noname;
Uses crt;
var kol_s,i,j:integer;
mas: array [1..100] of integer;
num, time: array [1..4] of integer;
k:char;
begin
    write ('vvedite kol-vo sportsmenov: ');
     read (kol_s);
    if kol_s<4 then
   writeln('vvedite drugoe chislo!')
   else
   begin
     clrscr;
     for i:= 1 to kol_s do
     begin
          write ('vvedite rezultat ',i:0,'-go sportsmena ');
          read (mas[i]);
     end;
     clrscr;
     Writeln('The best was:');
     for j:= 1 to 4 do
     begin
   time[j]:=9999;
   for i:= 1 to kol_s do
   begin
        if time[j] > mas[i] then
        begin
    time[j] := mas[i];
    num[j] := i;
        end;
   end;
   mas[num[j]]:=9999;
   writeln(num[j]:0,'-j sportsmen, s rezultatom ',time[j]:0,' msek);
     end;
readkey;
end;
until readkey=char(#27);
end.

Проблема в том, что не устаивает число 9999. Тут оно идет мах возможным времянем. Если ввести больше идут глюки. Как решить
эту проблему?:wacko:

Site Admin
Аватара пользователя
Сообщения: 10082
Зарегистрирован: 26-04-2004

RE: Трабл по паскалю

Сообщение KriG » 17-01-2007

а не проще вместо константных начальных значений брать значения первого элемента массива и остальные уже сравнивать с ним

Госу Флудер
Сообщения: 1762
Зарегистрирован: 19-06-2006

RE: Трабл по паскалю

Сообщение Blud_cat » 18-01-2007

не вкурил в чём именно проблема. Ели тебе нужно, чтобы переменная time[j] могла быть больше 9999 - пропиши её, как longint вместо integer. Но если я правильно понял смысл задачи, то time[j] константой тебе в принципе никуда не упёрлась. Тупо используй метод пузырька и ни колбась москъ :crazy:
Собственно пример:
Writeln('The best was:');
for j:=1 to kol_s do
  begin
  for i:=1 to kol_s do if mas[i]>mas[i+1] then
    begin
    c:=mas[i];
    mas[i]:=mas[i+1];
    mas[i+1]:=c;
    end;
  end;
for i:=1 to kol_s do writeln( i ,'-j sportsmen, s rezultatom ',mas[i],' msek).
Нахрена для целочисленных переменных указывать количество знаков перед запятой - тоже не вкурил... на всякий пожарный поясню: с - просто ниочёмная переменная вводимая в прогу для буфера значений.
В принципе сказал всё то же самое, что и Криг, только в более развёрнутом варианте.

P.S. прошу всех собравшихся считать, что это не я забыл перелогиниться, а моя жена такая умная =)

Spam Bot
Сообщения: 3029
Зарегистрирован: 15-04-2004

RE: Трабл по паскалю

Сообщение rjo » 18-01-2007

как-то чел попросил ему дать прогу на паскале, которая делает опрос для приема на работу

вот что получилось

begin
writeln('С глубоким сожалением вынуждены Вам сообщить, что Вы нам не подходите.');
end.

(На-ни-на)
Сообщения: 333
Зарегистрирован: 07-04-2005

RE: Трабл по паскалю

Сообщение Анти][акеР » 18-01-2007

Всем большое спасибо)

Госу Флудер
Аватара пользователя
Сообщения: 2052
Зарегистрирован: 26-04-2005

RE: Трабл по паскалю

Сообщение LiMoN » 19-01-2007

спасибо падрачил)))

(Заматеревший Свежак)
Аватара пользователя
Сообщения: 198
Зарегистрирован: 25-11-2005

RE: Трабл по паскалю

Сообщение primitive » 19-01-2007

[quote=LiMoN]
спасибо падрачил)))
[/quote]
Смотри-ка,уже и сисег не надо:nose:

(На-ни-на)
Сообщения: 333
Зарегистрирован: 07-04-2005

RE: Трабл по паскалю

Сообщение Анти][акеР » 19-01-2007

[quote=Свободная Куртизанка]
не вкурил в чём именно проблема. Ели тебе нужно, чтобы переменная time[j] могла быть больше 9999 - пропиши её, как longint вместо integer. Но если я правильно понял смысл задачи, то time[j] константой тебе в принципе никуда не упёрлась. Тупо используй метод пузырька и ни колбась москъ :crazy:
Собственно пример:
Writeln('The best was:');
for j:=1 to kol_s do
  begin
  for i:=1 to kol_s do if mas[i]>mas[i+1] then
    begin
    c:=mas[i];
    mas[i]:=mas[i+1];
    mas[i+1]:=c;
    end;
  end;
for i:=1 to kol_s do writeln( i ,'-j sportsmen, s rezultatom ',mas[i],' msek).
Нахрена для целочисленных переменных указывать количество знаков перед запятой - тоже не вкурил... на всякий пожарный поясню: с - просто ниочёмная переменная вводимая в прогу для буфера значений.
В принципе сказал всё то же самое, что и Криг, только в более развёрнутом варианте.

P.S. прошу всех собравшихся считать, что это не я забыл перелогиниться, а моя жена такая умная =)
[/quote]

Мда, немножко не то: спортсмены не сортируються по результату, а выводятся в том порядке, в котором есть в массиве.

Госу Флудер
Сообщения: 1762
Зарегистрирован: 19-06-2006

RE: Трабл по паскалю

Сообщение Blud_cat » 19-01-2007

Может быть это потому, что в результате выполнения приведнной проги место спортсменов в массиве меняется в зависимости от их результата? или тебе надо, чтобы место спортсмена в массиве оставалсь неизменным? Или нет? Или что?
Короче, я так понял, что топикстартер весьма смутно представляет себе, что я тут несу, поэтому дабы не разводить бессмысленный флуд поясняю: берётся исходный массив, путём лихих манипуляций элементы массива с наименьшим значением всплывают наверх по индексу, в результате весь массив выстраивается ровнячком по значениям: элемент с индексом 1 - самый маленький по значению, 2 - больше чем первый, но меньше либо равен всем остальным, 3 - больше чем второй, но меньше либо равен всем остальным и так до упора. Это делается, чтобы без гемора сразу вывести и призовое место спортсмена и его результат. Что не понятно?

Местный
Сообщения: 645
Зарегистрирован: 16-05-2004

RE: Трабл по паскалю

Сообщение lorien » 24-01-2007

Да просто венду надо переставить, имхо в этом трабла.

След.

Вернуться в Hi-Tech

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4