25.01.2011, 09:35 | #1 (permalink) |
Banned
Регистрация: 25.01.2011
Сообщений: 27
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Паскаль: обсуждение вариантов решения задач
Для массива Х [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. |
25.01.2011, 09:35 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Не проходите мимо похожих тем, они помогут вам в решении проблемы Помогите выбрать ноутбук из двух вариантов Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл Проверить правильность решения – Паскаль. Обсуждение пиратских ОС |
25.01.2011, 09:56 | #2 (permalink) | ||
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Между прочим - куча ошибок. Не говоря уже о том, что использование меток и переходов по меткам - вообще дурной стиль.
Цитата:
Цитата:
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; |
||
25.01.2011, 12:08 | #3 (permalink) |
Banned
Регистрация: 25.01.2011
Сообщений: 27
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
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. |
25.01.2011, 12:40 | #4 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Уже лучше, но вот эта строка:
Цитата:
Операция Random(N) возвращает случайно выбранное целое число в диапазоне 0..(N-1); соответственно Random(N)-N возвращает число в диапазоне -N..-1, т.е. опять ВСЕ БЕЗ ИСКЛЮЧЕНИЯ элементы массива оказываются отрицательными и задача полностью теряет смысл. P.S. Чтобы не путать заказчицу, перенесу обсуждение Вашей программы в отдельную тему. |
|
25.01.2011, 15:17 | #5 (permalink) |
Banned
Регистрация: 25.01.2011
Сообщений: 27
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Уважаемый Vladimir S [SPOILER]Не подумайте что я ноль в Паскале я его довольно хорошо знаю просто я ещё учусь в школе 9 класс и всех тонкостей не знаю[/SPOILER]
Расскажите как сделать так как надо по задаче. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
25.01.2011, 16:02 | #6 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Паскаль массивы Посмотрите внимательно. P.S. К сожалению, тег "Spoiler" на этом форуме не задействован. P.P.S. И еще пара замечаний. Во-первых, если Вы видите, что кто-то из программистов уже выложил решение задачи, то не следует выкладывать своё (по принципу "А вот мой вариант!"), если только Вы не уверены, что Вам удалось найти существенно лучшее решение или что выложенное содержит принципиальные ошибки - это просто невежливо по отношению к коллеге. Кроме того, даже если на Ваш взгляд программа совсем простая, нужно обязательно провести ее тестирование: оттранслировать, запустить и т.д., а не просто "написал-выложил". |
|
25.01.2011, 18:46 | #7 (permalink) |
404
Регистрация: 10.01.2010
Сообщений: 1,749
Записей в дневнике: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3868
|
полностью согласен с Vladimir_S. ну и что что ты в 9-м учишься? я допустим учусь в 11м и паскаль также проходил только в 9-м классе. В любом случае если ты помогаешь решать кому-то, то сам сначала реши. причем не на литске бумаги, а в самом паскале. Протестируй на предельные значения и прочее. Со всем уважением. Успехов в изучении паскаля.
|
26.01.2011, 14:29 | #8 (permalink) |
Banned
Регистрация: 25.01.2011
Сообщений: 27
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Сделаем немного эффективнее
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; Я тоже не проверял, но думаю заработает |
26.01.2011, 18:24 | #9 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Mr.Програмист Приставки з в русском языке нет!
В чем заключается эффективность вашего варианта? В неправильной организации вывода массивов? К тому же, в вашей программе при заполнении исходных массивов легко запутаться в выборе нужного значения для ввода. Программа на языке Pascal согласно синтаксису должна заканчиваться точкой, а не точкой с запятой. Просьба к вам - используйте тег [ code ] для оформления листинга
__________________
Убить всех человеков! |
13.02.2011, 04:23 | #10 (permalink) |
Banned
Регистрация: 25.01.2011
Сообщений: 27
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Вот моя задача чтобы раскачать тему. Разбирайте.
Код:
Program bankomat; Uses Crt; Label met1,met2,met3,met4,met5,met6,met7,met8; Var a,c,b,d,i,n,k5000,k1000,k500,k100,k50:integer; Begin k5000:=10000; k1000:=10000; k500:=10000; k100:=10000; k50:=10000; met3: i:=1; n:=5; Repeat Begin Writeln('Введите пинкод'); Readln(a); If a=1973 Then begin Writeln('Пин код веден верно'); goto met1; end Else Writeln('Вы ошиблись'); If i=4 Then begin Writeln('Карточка заблокирована'); goto met2; end; i:=i+1; end; Until i>n; met1: Writeln('Введите какую сумму вы хотите получить'); Readln(b); c:=b div 5000; d:=b mod 5000; If k5000<c then begin k1000:=k1000+(c-k5000); goto met4; end Else For i:=1 to c do begin Writeln('5000 руб;'); k5000:=k5000-1; end; met4:c:=d div 1000; d:=d mod 1000; If k1000<c then begin k500:=k500+(c-k1000); goto met5; end Else For i:=1 to c do begin Writeln('1000 руб'); k1000:=k1000-1; end; met5:c:=d div 500; d:=d mod 500; If k500<c then begin k500:=k500+(c-k1000); goto met6; end Else For i:=1 to c do begin Writeln('500 руб'); k500:=k500-1; end; met6:c:=d div 100; d:=d mod 100; If k100<c then begin k100:=k100+(c-k500); goto met7; end Else For i:=1 to c do begin Writeln('100 руб'); k100:=k100-1; end; met7:c:=d div 50; d:=d mod 50; If k5000<c then goto met8; For i:=1 to c do begin Writeln('50 руб'); k50:=k50-1; end; met8:Writeln(d,'удержано'); Writeln('Введите 1 чтобы повторить, 2 чтобы выйти'); Readln(d); If d=1 Then goto met3 Else readkey; met2:end. Последний раз редактировалось Mr.Програмист; 13.02.2011 в 04:28 |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|