Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для lenaustkz84

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


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

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


CyberDaemon, lxa85, спасибо Вам за советы
Вот заново написала код.
Опять не слишком им довольна
Но думаю, уже лучше, чем было.
Не нравиться этот i:=2;
Без этого условия приходиться вводить на одно значение больше.
Как, по Вашему мнению, уже лучше?
Или тоже сплошной монстр

Код: Выделить весь код
{Программа для определения максимального  и минимального
значения из N введенных чисел} 
program max_i_min_iz_N;
    uses crt;
    var N,min,max,a,i,m:integer;

    BEGIN
      clrscr;

        repeat

              i:=2;

              write('Введите любую цифру: '); readln(N); writeln();
              write('Введите ',N,' чисел(-а) через пробел: ');

                read(a);

                max:=a;
                min:=a;

             repeat
                read(a);
                if(a>max)then max:=a else max:=max;
                if(a<min)then min:=a else min:=min;
                i:=i+1;
             until(i>N);

         writeln();
         writeln('max=',max);
         writeln('min=',min);
         writeln();
        
      writeln('Для продолжения программы нажмите цифру 1');
      writeln('Для завершения программы нажмите цифру 2'); writeln();
      readln(m);
      writeln();
   until(m=2);
END.
Радует только то, что получилось убрать две лишние переменные b и c, и то, что убрала case.
И то, что программа работает во всех случаях... кроме одного...

Если здесь
Код: Выделить весь код
write('Введите ',N,' чисел(-а) через пробел: '); read(a);
ввести значение 1, то программа все равно ждет ввода еще одного значения.

Наверное, потому, что у меня считывание переменной a все таки прописано в программе два раза?

При этом я пробовала оставлять только одно считывание переменной двумя вариантами.

Вариант 1

Код: Выделить весь код
write('Введите любую цифру: '); readln(N); writeln();
                write('Введите ',N,' чисел(-а) через пробел: ');

                    i:=1;

                    max:=a;
                    min:=a;

                 repeat

                  read(a);

                  if(a>max)then max:=a else max:=max;
                  if(a<min)then min:=a else min:=min;

                  i:=i+1;

               until(i>N);
Вариант 1: Переменной i тогда присваиваю 1 и дополнительного значения вводить не надо, в этом плане цикл работает правильно. Но находит из введенных значений правильно только максимальное число. Минимальному присваивает 0. Интересно то, что, если программу не закрыть, а продолжить дальше, то тогда программа начинает находить минимальное и максимальное число правильно. Но не из только что введенных значений, а из всех значений, которые были введены. Наверное, не понятно объясняю. Лучше картинку покажу



Вариант 2

Код: Выделить весь код
write('Введите любую цифру: '); readln(N); writeln();
                write('Введите ',N,' чисел(-а) через пробел: ');

                i:=1;
                read(a);

                    max:=a;
                    min:=a;

                 repeat

                  if(a>max)then max:=a else max:=max;
                  if(a<min)then min:=a else min:=min;

                  i:=i+1;

               until(i>N);
Вариант 2: здесь программа присваивает первое значение и max, и min, и следующие значения не сравнивает. При этом цикл на повторение программы не срабатывает. Программа просто закрывается и все. В приниципе, понятно, почему не сравнивает значения, ведь в следующем цикле учавствует только одно и то же значение переменной а, которое было введено первым. А вот почему тогда программа закрывается сама, не считывая переменную m?

В общем так вот...

Последний раз редактировалось lenaustkz84, 03-12-2011 в 10:29.


Отправлено: 10:20, 03-12-2011 | #15