|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Pascal от новичка (ошибку не вижу) |
|
|
Разное - [решено] Pascal от новичка (ошибку не вижу)
|
![]() Новый участник Сообщения: 26 |
Здравствуйте!
Я только начала изучать Pascal. Дело очень интересное ![]() Но вот моя задача: Мне нужно составить простую программу на нахождение максимального и минимального значения из N введенных чисел. Вроде бы все сделала правильно. И ошибок компилятор не выдает. Но работает программа не совсем верно. Максимальное значение определяет безошибочно. Но минимальное значение находит верно лишь в том случае, если число отрицательное. Допустим из 5 введенных чисел: 1 2 -3 7 5 Программа правильно выдает: max=7 min=-3 Если ввести числа так: 1 2 3 4 5 То программа работает не правильно: max=5 min=0 Кстати, условие такое, что нужно использовать конструкцию repeat...until. Посмотрите, пожалуйста, мой код, наверное, что-то нужно добавить? {Программа для определения максимального и минимального значения из N введенных чисел} program max_i_min_iz_N; uses crt; var N,min,max,a,i,m:integer; BEGIN clrscr; repeat write('Введите любую цифру: '); readln(N); writeln(); write('Введите ',N,' чисел(-а) через пробел: '); i:=1; max:=0; min:=0; a:=0; m:=0; repeat read(a); if (a>max) then max:=a else max:=max; if (a<min) then min:=a else min:=min; i:=i+1; a:=0; until(i>N); writeln(); writeln('max=',max); writeln('min=',min); writeln(); writeln('Для продолжения программы нажмите цифру 1'); writeln('Для завершения программы нажмите цифру 2'); writeln(); readln(m); writeln(); until(m=2); END. |
|
Отправлено: 13:13, 02-12-2011 |
DOOMer Сообщения: 3254
|
Профиль | Отправить PM | Цитировать Цитата lenaustkz84:
-1 -2 -3 -4 -5? ![]() Ошибка тут: С чего бы вдруг максимуму и минимуму быть равным нулю? |
|
------- Отправлено: 13:42, 02-12-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Misanthrope Сообщения: 474
|
Профиль | Отправить PM | Цитировать lenaustkz84, ошибка в изначальном присвоении min:=0. у тебя выходит 0 всегда меньше положительного числа, т. е. условие a<min при положительном а никогда не выполнится.
и для решения этой задачи лучше использовать массивы |
------- Отправлено: 13:49, 02-12-2011 | #3 |
DOOMer Сообщения: 3254
|
Профиль | Отправить PM | Цитировать Цитата Hector:
|
|
------- Отправлено: 14:01, 02-12-2011 | #4 |
![]() Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать |
|
Последний раз редактировалось lenaustkz84, 02-12-2011 в 14:07. Причина: добавила Отправлено: 14:01, 02-12-2011 | #5 |
DOOMer Сообщения: 3254
|
Профиль | Отправить PM | Цитировать Все верно, простым убиранием обнуления преременных задачу не решить.
Думай, думай! 1) -1 -2 -3 -4 2) 1 2 3 4 3) 1 1 2 2 |
------- Отправлено: 14:11, 02-12-2011 | #6 |
Misanthrope Сообщения: 474
|
Профиль | Отправить PM | Цитировать CyberDaemon, imho удобней
|
------- Отправлено: 14:15, 02-12-2011 | #7 |
![]() Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать CyberDaemon, ну вот я так и сделала уже.
Добавила еще две переменных. Но мне код не совсем нравиться. Хотелось как-то в одной ячейке записывать и значения сравнивать с max и min. Не хотелось еще задействовать две штуки дополнительно. Хотя может и нормальный код... Я еще мало в этом разбираюсь ![]() {Программа для определения максимального и минимального значения из N введенных чисел} program max_i_min_iz_N; uses crt; var N,min,max,a,b,c,i,m:integer; BEGIN clrscr; repeat write('Введите любую цифру: '); readln(N); writeln(); write('Введите ',N,' чисел(-а) через пробел: '); read(a,b); if (a>b) then begin max:=a; min:=b; end else begin max:=b; min:=a; end; i:=3; repeat read(c); if(c>max) then max:=c else max:=max; if(c<min) then min:=c else min:=min; i:=i+1; c:=0; until(i>N); writeln(); writeln('max=',max); writeln('min=',min); writeln(); writeln('Для продолжения программы нажмите цифру 1'); writeln('Для завершения программы нажмите цифру 2'); writeln(); readln(m); writeln(); until(m=2); END. С вводом любых значений, и положительных, и отрицательных. |
Отправлено: 14:20, 02-12-2011 | #8 |
DOOMer Сообщения: 3254
|
Профиль | Отправить PM | Цитировать Hector, это если с введенными числами ещё что-то надо делать, то да. А если задача просто найти максиминимум - тогда самое простое - это обрабатывать введённое число сразу после ввода и больше его не хранить. А то вдруг с размерностью массива не угадаешь
![]() lenaustkz84, маньячно ![]() И как отработает прога, если в ответ на "write('Введите любую цифру: '); readln(N); writeln();" ввести "1"? |
------- Отправлено: 14:26, 02-12-2011 | #9 |
![]() Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать Ммм... ёлки-палки... только обрадовалась...
Если ввести 1, то... приходиться ввоить 3 значения, из которых программа без ошибки выбирает min и max. То есть работает не с одним значением, как это нужно, а с тремя. Это, наверное, потому что я задала i:=3; Или нет. Наверное, потому что у меня изначально должно сравниваться 3 переменных, иначе программа не работает. Кстати, для двойки такая же проблема. Наверное, я сейчас добавлю отдельные операторы именно для значения 1 и 2. Только, даже если будет работать, вообще муть какая-то получиться, наверное... ![]() |
Последний раз редактировалось lenaustkz84, 02-12-2011 в 14:59. Отправлено: 14:46, 02-12-2011 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Всё о TURBO PASCAL (обсуждение, помощь в написание программ, ошибки, Pascal ABC) | Loading | Программирование и базы данных | 41 | 20-05-2015 15:28 | |
C/C++ - F1 для новичка | SS3 | Программирование и базы данных | 5 | 24-01-2009 17:39 | |
О проблемах новичка | Direktor Finskogo Zaliva | Программное обеспечение Linux и FreeBSD | 2 | 29-03-2007 07:21 | |
не вижу сервера, но вижу соседнии компьютеры | DKolpakov | Сетевые технологии | 3 | 06-05-2005 14:43 | |
Обучите новичка | Micro | Железо в Linux | 45 | 15-04-2004 21:23 |
|