Показать сообщение отдельно
Старый 25.01.2011, 09:56   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Mr.Програмист Посмотреть сообщение
Вот мой вариант:
Между прочим - куча ошибок. Не говоря уже о том, что использование меток и переходов по меткам - вообще дурной стиль.
Цитата:
Uses Crt;
Label met1;
Var a:array[1..40] of Word;
i,k:integer;
Begin
randomize; {я могу ошибиться}
For i:=1 to 40 do
a[i]:=random(1000)-1000;
Итак, вы определили тип массива Word. Но тип Word вообще не допускает отрицательных значений! А вот присваиваете Вы значение элементам массива в диапазоне -1..-1000, что плохо по двум причинам: во-первых, как уже говорилось, явная нестыковка по типам, во-вторых, при такой выборке ВСЕ БЕЗ ИСКЛЮЧЕНИЯ элементы массива будут отрицательными, а потому исходная задача (поиск первого отрицательного элемента) теряет смысл.
Цитата:
k:=i; Writeln(a[i],k);
Непонятно, зачем вообще нужно k? Почему не написать просто Writeln(a[i],i);? Между прочим, и сам вывод сделан безграмотно: без форматов или пробелов оба числа просто сольются в одно целое. Ну очень удобно!
P.S. Мне кажется, рановато Вы такой ник выбрали. Учитесь!
P.P.S. А если Вы не знаете, как без меток выйти из цикла - подскажу. Для этого в Паскале предусмотрен оператор Break. С его помощью блок выбора первого отрицательного числа можно преобразовать, например, так:
Код:
For i:=1 to 40 do
  if a[i]<0 then 
   begin
    Writeln(i,'   ',a[i]); 
    break;
   end;
Readkey;
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070