Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2018, 21:10   #1
GRON08
Новичок
Джуниор
 
Регистрация: 24.12.2018
Сообщений: 1
По умолчанию МЕНЮ ИЗ 3-Х ПРОГРАММ

ЯЗЫК ПАСКАЛЬ!!!!!!!!!!!!!

Проблема необычная , открывая меню программы в пункте 2.Просмотреть таблицу таблица показывается только после ДВУХ нажатий ЕНТЕР, а нужно всего одно!

Код:
program MENUSHE4ka;

uses
crt;

type
  table = array [1..666, 1..666] of real;

var
  n, m: integer;
  i, j: integer;
  k, l: integer;
  paragraph: integer;
  subparagraph: integer;
  max: integer;
  min: integer;
  N_ROWS: integer;
  N_COLS: integer;
  matrix: table;
  SUMmax: real;
  SUM_of_ROWS: real;
  flag: boolean;

procedure Find_the_maximum_sum_of_line_items(mas: table; n1, m1: integer; var SUMmax: real);

var
  i, j: integer;
  SUM_of_ROWS: real;
  flag: boolean;
begin
  SUMmax := 0;
  for j := 1 to m1 do
  begin
    SUMmax := matrix[1, j] + SUMmax;
  end;
  begin
    for i := 2 to n1 do
    begin
      SUM_of_ROWS := 0;
      for j := 1 to m1 do
      begin
        SUM_of_ROWS := SUM_of_ROWS + matrix[i, j];
        if SUM_of_ROWS > SUMmax then
          SUMmax := SUM_of_ROWS;
      end;
    end;
  end;
end;


procedure first_N_ROWS_with_max(mas: table; col_str, col_stlb: integer; var FNStr: integer);

var
  k, l: integer;
  sum_otr_str, SUMmax: real;
  flag: boolean;
begin
  SUMmax := 0;
  for k := 1 to col_str do
  begin
    sum_otr_str := 0;
    flag := false;
    for l := 1 to col_stlb do
    begin
      if matrix[k, l] < 0 then
      begin
        sum_otr_str := sum_otr_str + matrix[k, l];
      end;
      if matrix[k, l] = 0 then
        flag := true;
    end;
    if (flag = true) then
    begin
      sum_otr_str := abs(sum_otr_str);
      if (SUMmax < sum_otr_str) then
      begin
        SUMmax := sum_otr_str;
        N_ROWS := k;
      end;
    end;
  end;
  FNStr := N_ROWS;
end;

procedure num_last_stlb_with_max_pol(mas: table; col_str, col_stlb: integer; var NLStlb: integer);

var
  
  flag: boolean;
  kol_pol, max_kol_pol: integer;
  N_COLS: integer;
  i, j: integer;
begin
  max_kol_pol := 0;
  flag := false;
  for j := 1 to col_stlb do
  begin
    flag := false;
    kol_pol := 0;
    if matrix[1, j] < 0 then
    begin
      flag := true;
      for i := 2 to col_str do
      begin
        if matrix[i, j] > 0 then
          kol_pol := kol_pol + 1;
      end;
    end;
    if (flag = true) and (kol_pol >= max_kol_pol) then
    begin
      N_COLS := j;
      max_kol_pol := kol_pol;
    end;
    NLStlb := N_COLS;
  end;
end;

begin
  repeat
    begin
      writeln('Выберите пункт меню:');
      writeln('1.Создать таблицу');
      writeln('2.Просмотреть таблицу');
      writeln('3.Обработать таблицу ');
      writeln('4.Выход');
      
      readln(paragraph);
      
      case paragraph of
        1:
          begin
            ClrScr;
            
            begin
              writeln('Выберите пункт подменю:');
              writeln('1.1.Задать с клавиатуры');
              writeln('1.3.Назад');
              read(subparagraph);
              
              case subparagraph of
                1:
                  begin
                    clrscr;
                    writeln('Задайте размер таблицы');
                    write('Строк: ');
                    readln(n);
                    write('Столбцов: ');
                    readln(m);
                    
                    clrscr;
                    writeln('Введите числа через пробел:');
                    for i := 1 to n do //с клавы
                      for j := 1 to m do
                        read(matrix[i, j]);
                    readln();
                    readln();
                    clrscr;
                    writeln('Выберите пункт меню:');
                    writeln('1.Создать таблицу');
                    writeln('2.Просмотреть таблицу');
                    writeln('3.Обработать таблицу');
                    writeln('4.Выход');
                    
                    read(paragraph);
                  end;
                3:
                  begin
                    clrscr;
                  end;
              else writeln( 'Error');
              end;
            end;
            
          end;
        2:
          begin
            clrscr; //Просмотреть таблицу
            for i := 1 to n do
            begin
              for j := 1 to m do
                write(matrix[i, j], ' ');
              writeln;
              
            end;
            writeln;
            writeln('Назад (Enter)');
            readln();
            clrscr;
          end;
        
        3:
          begin//Обработать таблицу
            clrscr;
            
            writeln('Выберите действие:');
            writeln('3.1.Найти максимальную сумму элементов строки');
            writeln('3.2.Среди строк, содержащих нули, найти номер первой строки, в которой сумма модулей отрицательных элементов максимальна');
            writeln('3.3.Среди тех столбцов,в которых первый элемент отрицателен, найти номер последнего столбца, в котором наибольшее количество положительных чисел');
            writeln('3.4.Назад');
            readln(subparagraph);
            clrscr;
            case subparagraph of
              1:
                begin
                  clrscr;
                  writeln('3.1.Find the maximum sum of line items');
                  Find_the_maximum_sum_of_line_items(matrix, n, m, SUM_of_ROWS);
                  writeln;
                  writeln('Ответ: максимальная сумма строки = ', SUM_of_ROWS);
                  writeln;
                end;
              2:
                begin
                  clrscr;
                  writeln('3.2.Среди строк, содержащих нули, найти номер первой строки, в которой сумма модулей отрицательных элементов максимальна');
                  first_N_ROWS_with_max(matrix, n, m, N_ROWS);
                  writeln;
                  writeln('Ответ: номер строки = ', N_ROWS);
                  writeln;
                end;
              3:
                begin
                  clrscr;
                  writeln('3.3.Среди тех столбцов,в которых первый элемент отрицателен, найти номер последнего столбца, в котором наибольшее количество положительных чисел');
                  num_last_stlb_with_max_pol(matrix, n, m, N_COLS);
                  writeln;
                  writeln('Ответ: Номер столбца = ', N_COLS);
                  writeln;
                end;
              4:
                begin
                  clrscr;
                  subparagraph := 4;
                end;
            else writeln( 'Error');
            end;
          end;
        4:
          begin
            clrscr;
            paragraph := 4; //Выход
          end;
      else writeln( 'Error');
      end;
    end;
  until paragraph = 4;
end.
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 24.12.2018 в 22:07.
GRON08 вне форума Ответить с цитированием
Старый 25.12.2018, 00:42   #2
jillitil
Форумчанин
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Сообщений: 184
По умолчанию

Цитата:
ЯЗЫК ПАСКАЛЬ!!!!!!!!!!!!!
ТОчнО, УверенЫ?

Цитата:
Сообщение от GRON08 Посмотреть сообщение
...показывается только после ДВУХ нажатий ЕНТЕР, а нужно всего одно!
Логиика намекает обратить внимание сюда
Код:
...
readln();
readln();
clrscr;
...
Цитата:
Проблема необычная
Прямо полтерге́йст какой-то.

Код:
begin
  repeat
    begin
      writeln('Выберите пункт меню:');
      writeln('1.Создать таблицу');
      writeln('2.Просмотреть таблицу');
      writeln('3.Обработать таблицу ');
      writeln('4.Выход');
      readln(paragraph);
      case paragraph of
        1:
          begin
...
              case subparagraph of
                1:
                  begin
...
                    clrscr;
                    writeln('Выберите пункт меню:');
                    writeln('1.Создать таблицу');
                    writeln('2.Просмотреть таблицу');
                    writeln('3.Обработать таблицу');
                    writeln('4.Выход');
                    read(paragraph);
                  end;
Чувствуется рука мастера – особый тип фуа-гра... или кунг-фу, как там правильно?
jillitil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Меню работает не корректно. При выборе пункта меню Пропадает фон, смещается название пункта меню. NikMaster WordPress и другие CMS 1 12.07.2017 21:57
Есть три программы. Их нужно объеденить в одну, тоесть чтоб при запуске программы были пункты меню для каждой из программ afirat Помощь студентам 9 28.04.2012 12:39
Вставка текста в поля ввода программ из меню - как не терять фокус? ViH Общие вопросы C/C++ 0 04.12.2011 09:06
eX-Tools v3.4.1 Набор программ для контекстного меню Blourid Софт 0 16.08.2010 15:26
Меню настроек в стиле Тотал Командер и др. программ Polotenchik Общие вопросы Delphi 4 26.07.2009 18:54