Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2009, 18:07   #11
ЕвгениуS
студент
Пользователь
 
Аватар для ЕвгениуS
 
Регистрация: 02.03.2008
Сообщений: 81
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
В цикле в конце программы пройдись по массиву. Найди минимум
Это будет первый результат
Далее еще цикл с нахождением минимального без учета первого
это будет второй
Далее еще цикл с нахождением минимального без учета второго

Но я бы на твоем месте уже при вводе проверял на какое место поставить результат.
опытным путем выяснил, что программа не правильно считает минимум на каждом этапе...Не могли бы вы помочь?
ЕвгениуS вне форума Ответить с цитированием
Старый 11.09.2009, 18:15   #12
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Код:
for i:= 1 to n do
begin
if y[i].time<min then
min:=y[i].time;
first2:=y[i].name;
end;
это у вас а должно быть
Код:
for i:= 1 to n do
if y[i].time<min then
begin
min:=y[i].time;
first2:=y[i].name;
end;
и так на всех 3 этапах
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 11.09.2009, 18:32   #13
ЕвгениуS
студент
Пользователь
 
Аватар для ЕвгениуS
 
Регистрация: 02.03.2008
Сообщений: 81
По умолчанию

Цитата:
Сообщение от ОДИНОЧЕСТВО В СЕТИ Посмотреть сообщение
Код:
for i:= 1 to n do
begin
if y[i].time<min then
min:=y[i].time;
first2:=y[i].name;
end;
это у вас а должно быть
Код:
for i:= 1 to n do
if y[i].time<min then
begin
min:=y[i].time;
first2:=y[i].name;
end;
и так на всех 3 этапах
спасибо!

нашел еще один огрех( программа выводит первого на каждом этапе..
А как мне сделать чтобы она выводила кто будет первым в сумме по трем этапам?
ЕвгениуS вне форума Ответить с цитированием
Старый 11.09.2009, 20:29   #14
ЕвгениуS
студент
Пользователь
 
Аватар для ЕвгениуS
 
Регистрация: 02.03.2008
Сообщений: 81
По умолчанию

Код:
Program tr;
uses Crt;
type
   TEtap=record
      		name:string;
          speed, time: real;
          end;

Var
   x: array [1..25] of TEtap;
   y: array [1..25] of TEtap;
   z: array [1..25] of TEtap;
      first1,  first2,  first3 : string;
      i, n: integer;
      min, d1, d2, d3 : real;

function Rus(mes: string):string;
var
  i: integer;   // номер обрабатываемого элемента
begin
  for i:= 1 to length(mes) do
    case mes[i] of
      'А'..'п': mes[i]:= Chr(Ord(mes[i]) - 64);
      'р'..'я': mes[i]:= Chr(Ord(mes[i]) - 16);
    end;
  Rus:= mes;
end;
label 1;
label 2;
label 3;
label 4;
label 5;
label 6;

begin clrscr;
writeln(Rus('perviy etap - Beg'));
1:write(Rus('vvedite distanciyu 1-go etapa (matters): d1= '));
read(d1);

if d1<0 then begin
     writeln('error: vvedite chislo ot 0 do 10000');goto 1;
             end;
if d1>10000 then begin
     writeln('error: vvedite chislo ot 0 do 10000');goto 1;
     end;
     
2:write(Rus('vvedite kolichestvo sportsmenov :  n= '));
read(n);

        if n<0 then begin
        writeln('error: vvedite chislo ot 2 do 25');goto 2;
        end;
        if n>25 then begin
        writeln('error: vvedite chislo ot 2 do 25');goto 2;
        end;

for i:=1 to n do
Begin
write(Rus('vvedite imya '),i,Rus('-go sportsmena : '));
read(x[i].name);

y[i].name:=x[i].name;
z[i].name:=x[i].name;

4:write(Rus('vvedite skorost'' sportsmena : '));
read(x[i].speed);
        if x[i].speed<0 then begin
        writeln('error: skorost'' ne moget byt'' otrecatel''noy');goto 4;
        end;
x[i].time:=d1/x[i].speed;
end;
i:=1;
min:=x[i].time;
for i:= 1 to n do
if x[i].time<min then
begin

min:=x[i].time;
first1:=x[i].name;
end;
writeln ('na 1-m etape pobedil  ',first1,' !!!   ');

{------------------------------------------------------------}
writeln(Rus('vtoroy etap - zapliv'));
3:write(Rus('vvedite distanciyu 2-go etapa (matters): d2= '));
read(d2);
         if d2<0 then begin
         writeln('error: vvedite chislo ot 0 do 10000');goto 3;
         end;
         if d2>10000 then begin
         writeln('error: vvedite chislo ot 0 do 10000');goto 3;
         end;

for i:=1 to n do
Begin
write ('vvedite scorost ',i,' sportsmena : ',y[i].name,' - ');
5:readln (y[i].speed);
         if y[i].speed<0 then begin
         writeln('error: skorost'' ne moget byt'' otrecatel''noy');goto 5;
         end;
y[i].time:=d1/y[i].speed;
end;
i:=1;
min:=y[i].time;
for i:= 1 to n do
if y[i].time<min then
begin
min:=y[i].time;
first2:=y[i].name;
end;
writeln ('na 2-m etape pobedil  ',first2,' !!!   ');
{------------------------------------------------------------}
writeln(Rus('tretiy etap - velogonka'));
6:write(Rus('vvedite distanciyu 3-go etapa (matters): d3= '));
read(d3);

if d3<0 then begin
     writeln('error: vvedite chislo ot 0 do 100000');goto 6;
             end;
if d3>10000 then begin
     writeln('error: vvedite chislo ot 0 do 100000');goto 6;
     end;

for i:=1 to n do
Begin
write ('vvedite scorost'' ',i,' sportsmena : ',z[i].name,' - ');
readln (z[i].speed);
z[i].time:=d3/z[i].speed;
end;
i:=1;
min:=z[i].time;
for i:= 1 to n do
if z[i].time<min then
begin
min:=z[i].time;
first3:=z[i].name;
end;
writeln ('na 1-m etape pobedil  ',first1,' !!!   ');
writeln ('na 2-m etape pobedil  ',first2,' !!!   ');
writeln ('na 3-m etape pobedil  ',first3,' !!!   ');
readln;
end.
подскажите плиз- почему программа показывает пустоту вместо имени если побеждает первый участник? как это исправить?
ЕвгениуS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Триатлон на паскале..помогите найти аглоритм решения задачи? ЕвгениуS Помощь студентам 4 05.04.2009 12:22