Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Pascal от новичка (ошибку не вижу)

Ответить
Настройки темы
Разное - [решено] Pascal от новичка (ошибку не вижу)

Аватара для lenaustkz84

Новый участник


Сообщения: 26
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: lenaustkz84
Дата: 02-12-2011
Описание: исправление ошибки
Здравствуйте!

Я только начала изучать 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

 

Аватара для CyberDaemon

DOOMer


Сообщения: 3254
Благодарности: 438

Профиль | Отправить PM | Цитировать


Цитата lenaustkz84:
Максимальное значение определяет безошибочно. »
А если ввести
-1 -2 -3 -4 -5?
Ошибка тут:
Код: Выделить весь код
max:=0; min:=0;
С чего бы вдруг максимуму и минимуму быть равным нулю?

-------
"640 K ought to be enough for anybody" Bill Gates, 1981

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:42, 02-12-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Hector

Misanthrope


Сообщения: 474
Благодарности: 38

Профиль | Отправить PM | Цитировать


lenaustkz84, ошибка в изначальном присвоении min:=0. у тебя выходит 0 всегда меньше положительного числа, т. е. условие a<min при положительном а никогда не выполнится.

и для решения этой задачи лучше использовать массивы

-------
Information must be free!
Нет границ, есть только препятствия


Отправлено: 13:49, 02-12-2011 | #3


Аватара для CyberDaemon

DOOMer


Сообщения: 3254
Благодарности: 438

Профиль | Отправить PM | Цитировать


Цитата Hector:
и для решения этой задачи лучше использовать массивы »
Почему?

-------
"640 K ought to be enough for anybody" Bill Gates, 1981


Отправлено: 14:01, 02-12-2011 | #4


Аватара для lenaustkz84

Новый участник


Сообщения: 26
Благодарности: 0

Профиль | Отправить PM | Цитировать


Убрала из кода
Цитата lenaustkz84:
max:=0; min:=0 »
все равно программа работает так же не верно.

Цитата CyberDaemon:
А если ввести
-1 -2 -3 -4 -5? »
CyberDaemon, после того, как убарала из кода
max:=0; min:=0;
ввела числа -1 -2 -3 -4 -5.

Тогда получается так:
max=0
min=-5

Последний раз редактировалось lenaustkz84, 02-12-2011 в 14:07. Причина: добавила


Отправлено: 14:01, 02-12-2011 | #5


Аватара для CyberDaemon

DOOMer


Сообщения: 3254
Благодарности: 438

Профиль | Отправить PM | Цитировать


Все верно, простым убиранием обнуления преременных задачу не решить.
Думай, думай!
1) -1 -2 -3 -4
2) 1 2 3 4
3) 1 1 2 2
спойлер-подсказка

3) 1 1 1 1
4) -1 -1 -1 -1
если уж совсем туго, то

максимуму и минимуму сначала нужно присвоить значение первого введенного числа.
А потом уже сравнивать все последующие числа.

-------
"640 K ought to be enough for anybody" Bill Gates, 1981


Отправлено: 14:11, 02-12-2011 | #6


Аватара для Hector

Misanthrope


Сообщения: 474
Благодарности: 38

Профиль | Отправить PM | Цитировать


CyberDaemon, imho удобней

-------
Information must be free!
Нет границ, есть только препятствия


Отправлено: 14:15, 02-12-2011 | #7


Аватара для lenaustkz84

Новый участник


Сообщения: 26
Благодарности: 0

Профиль | Отправить 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


Аватара для CyberDaemon

DOOMer


Сообщения: 3254
Благодарности: 438

Профиль | Отправить PM | Цитировать


Hector, это если с введенными числами ещё что-то надо делать, то да. А если задача просто найти максиминимум - тогда самое простое - это обрабатывать введённое число сразу после ввода и больше его не хранить. А то вдруг с размерностью массива не угадаешь

lenaustkz84, маньячно
И как отработает прога, если в ответ на
"write('Введите любую цифру: '); readln(N); writeln();"
ввести "1"?

-------
"640 K ought to be enough for anybody" Bill Gates, 1981


Отправлено: 14:26, 02-12-2011 | #9


Аватара для lenaustkz84

Новый участник


Сообщения: 26
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ммм... ёлки-палки... только обрадовалась...
Если ввести 1, то... приходиться ввоить 3 значения, из которых программа без ошибки выбирает min и max.
То есть работает не с одним значением, как это нужно, а с тремя.
Это, наверное, потому что я задала i:=3;
Или нет. Наверное, потому что у меня изначально должно сравниваться 3 переменных, иначе программа не работает.

Кстати, для двойки такая же проблема.
Наверное, я сейчас добавлю отдельные операторы именно для значения 1 и 2.
Только, даже если будет работать, вообще муть какая-то получиться, наверное...

Последний раз редактировалось lenaustkz84, 02-12-2011 в 14:59.


Отправлено: 14:46, 02-12-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Pascal от новичка (ошибку не вижу)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Всё о 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




 
Переход