Паскаль: обсуждение вариантов решения задач
Задача:
Для массива Х [1..40] вывести первый отрицательный элемент и его порядковый номер. Вот мой вариант: 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; For i:=1 to 40 do begin if a[i]<0 then begin k:=i; Writeln(a[i],k); goto met1; end; end; met1:Readkey; End. |
Цитата:
Цитата:
Цитата:
P.S. Мне кажется, рановато Вы такой ник выбрали. Учитесь! P.P.S. А если Вы не знаете, как без меток выйти из цикла - подскажу. Для этого в Паскале предусмотрен оператор Break. С его помощью блок выбора первого отрицательного числа можно преобразовать, например, так: Код:
For i:=1 to 40 do |
:tehnari_ru_657:
Uses Crt; Var a:array[1..40] of longint; i,k:integer; Begin randomize; {я могу ошибиться} For i:=1 to 40 do a[i]:=random(10000)-10000; For i:=1 to 40 do begin if a[i]<0 then begin Writeln(a[i],' ',i); break; end; end; Readkey; End. |
Уже лучше, но вот эта строка:
Цитата:
Операция Random(N) возвращает случайно выбранное целое число в диапазоне 0..(N-1); соответственно Random(N)-N возвращает число в диапазоне -N..-1, т.е. опять ВСЕ БЕЗ ИСКЛЮЧЕНИЯ элементы массива оказываются отрицательными и задача полностью теряет смысл. P.S. Чтобы не путать заказчицу, перенесу обсуждение Вашей программы в отдельную тему. |
Уважаемый Vladimir S [SPOILER]Не подумайте что я ноль в Паскале я его довольно хорошо знаю просто я ещё учусь в школе 9 класс и всех тонкостей не знаю[/SPOILER]
Расскажите как сделать так как надо по задаче. |
Цитата:
http://www.tehnari.ru/f41/t46278/#post452337 Посмотрите внимательно. P.S. К сожалению, тег "Spoiler" на этом форуме не задействован. P.P.S. И еще пара замечаний. Во-первых, если Вы видите, что кто-то из программистов уже выложил решение задачи, то не следует выкладывать своё (по принципу "А вот мой вариант!"), если только Вы не уверены, что Вам удалось найти существенно лучшее решение или что выложенное содержит принципиальные ошибки - это просто невежливо по отношению к коллеге. Кроме того, даже если на Ваш взгляд программа совсем простая, нужно обязательно провести ее тестирование: оттранслировать, запустить и т.д., а не просто "написал-выложил". |
полностью согласен с Vladimir_S. ну и что что ты в 9-м учишься? я допустим учусь в 11м и паскаль также проходил только в 9-м классе. В любом случае если ты помогаешь решать кому-то, то сам сначала реши. причем не на литске бумаги, а в самом паскале. Протестируй на предельные значения и прочее. Со всем уважением. Успехов в изучении паскаля.
|
Сделаем немного эффективнее
Uses Crt; var A,B,D: array[1..10] of integer; m,i:integer; begin clrscr; write('введите число элементов массивов <=10 - '); readln(m); writeln('введите элементы массива A и B'); for i:=1 to m do begin write ('A[',i,']= '); readln (A[i]); Writeln; write ('B[',i,']= '); readln (B[i]); D[i]:=A[i]-B[i]; end; writeln; writeln('вывод массивов'); for i:=1 to m do write (A[i]:5); writeln; write (B[i]:5); writeln; write (D[i]:5); writeln; readkey; end; Я тоже не проверял, но думаю заработает |
Mr.Програмист Приставки з в русском языке нет!
В чем заключается эффективность вашего варианта? В неправильной организации вывода массивов? К тому же, в вашей программе при заполнении исходных массивов легко запутаться в выборе нужного значения для ввода. Программа на языке Pascal согласно синтаксису должна заканчиваться точкой, а не точкой с запятой. Просьба к вам - используйте тег [ code ] для оформления листинга |
Вот моя задача чтобы раскачать тему. Разбирайте.
Код:
Program bankomat; |
Часовой пояс GMT +4, время: 08:12. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.