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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2020, 10:28   #1
Heorhii
Пользователь
 
Регистрация: 15.05.2020
Сообщений: 10
Сообщение Упростить код (СРОЧНО)PASCAL

Здравствуйте, не могли бы вы упростить код, предподаватель не принимает такой, сказал убрать и сделать по типу как в школах по теме "Массивы" потому что по другому я не умею...
Осталось 2 часа до здачи


4.10

Код:
program Hello;
const
N = 5;
M = 7;
var
matrix: array[1..N, 1..M] of integer;
i, j, prevValue, sum, rowIdx: integer;
begin
randomize;
prevValue := 0;
rowIdx := 1;

for i := 1 to N do begin
sum := 0;
for j := 1 to M do begin
matrix[i, j] := -50 + random(100);
Write(matrix[i,j], ' ');
sum := sum + sqr(matrix[i,j]);
end;
if sum > prevValue then begin
rowIdx := i;
end;
prevValue := sum;
Writeln;
end;

Writeln;
Writeln('Row index: ', rowIdx);
Writeln('Sum: ', sum);

end.
3.10
Код:
program Hello;
const
N = 5;
M = 7;
var
matrix: array[1..N, 1..M] of integer;
i, j, temp, rowIdx, minElem: integer;
begin
randomize;
minElem := 100;
rowIdx := 1;

for i := 1 to N do begin
for j := 1 to M do begin
matrix[i, j] := random(100);
if matrix[i, j] < minElem then begin
minElem := matrix[i, j];
rowIdx := i;
end;
Write(matrix[i,j], ' ');
end;
Writeln;
end;

Writeln;
Writeln('Min element: ', minElem);
Writeln('Min element"s row: ', rowIdx);
Writeln;

for i := 1 to M do begin
temp := matrix[1, i];
matrix[1, i] := matrix[rowIdx, i];
matrix[rowIdx, i] := temp;
end;

for i := 1 to N do begin
for j := 1 to M do begin
Write(matrix[i,j], ' ');
end;
Writeln;
end;
end

Последний раз редактировалось BDA; 15.05.2020 в 11:58.
Heorhii вне форума Ответить с цитированием
Старый 15.05.2020, 15:31   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Чтобы что-то упростить, надо знать: а что этот код должен делать. Бывает, что это - и то, что написано - две большие разницы.
Впрочем, время окончилось, флажок упал. Хана. Амба. "Пара".

Последний раз редактировалось digitalis; 15.05.2020 в 15:34.
digitalis вне форума Ответить с цитированием
Старый 15.05.2020, 23:46   #3
Heorhii
Пользователь
 
Регистрация: 15.05.2020
Сообщений: 10
По умолчанию

3.10 Найти минимальный элемент и строку, где он находится поменять с первой строкой матрицы.(ОРИГИНАЛ --> Знайти мінімальний елемент і рядок, де він знаходиться поміняти з першим рядком матриці.)
4.10 Дан массив А [1..n, 1..m]. Составить программу поиска строки, сумма квадратов элементов которого максимальна.(ОРИГИНАЛ --> Дано масив А[1..n, 1..m]. Скласти програму пошуку рядка, сума квадратів елементів якого максимальна.)
И да мне повезло и сегодня позвонили за 10 мин до здачи и перенесли потому что в препода отрубило свет... :D

Последний раз редактировалось BDA; 16.05.2020 в 16:39.
Heorhii вне форума Ответить с цитированием
Старый 16.05.2020, 00:07   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

По поводу 4.10: менять значение prevValue нужно внутри условного блока, проверяющего текущую сумму на максимальность. Упрощать тут нечего, код и так лаконичен. Может быть преподаватель более развернуто предъявлял свои требования к решению?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.05.2020, 09:05   #5
Heorhii
Пользователь
 
Регистрация: 15.05.2020
Сообщений: 10
Восклицание

Сказал сделать приближеное к такому коду:

Код:
var a: array [1..18 ,1..18] of integer;
    i,j, n,m, min,k,l : integer;
begin
  writeln( 'n,m');
  readln(n,m);
  k:=0; 
  for I:=1 to n do begin
    for j:=1 to m do begin
      A[i,j]:= random(90);
      write( A[i,j]:4);
    end;
    writeln;
        
  end;
  

   for I:=1 to n do 
    for j:=1 to m do 
    a[i,j]:= abs(a[i,j]);
  
  
  
  
  K:=0;
  l:=0;
   for I:=1 to n do 
    for j:=1 to m do 
     if( a[i,j]<min) then begin
       min:= a[i,j];
       k:=i;
       l:=j;
         
       
       
     end; 
   writeln ( min);
   writeln( 'Індекс рядка = ' , k);
   writeln ( 'Індекс стовпця = ' , l );
   end.

Последний раз редактировалось BDA; 16.05.2020 в 15:23.
Heorhii вне форума Ответить с цитированием
Старый 16.05.2020, 15:28   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Ну вот и сделайте. Откажитесь от константных n и m: задайте какие-то границы массивов и запросите ввод n и m. Разделите действия на несколько проходов: сначала делайте заполнение и печать, затем уже поиск по условию. Больше различий не вижу. Ну не считая выравнивания кода - к этому тоже могут придираться. Возможно, преподаватель просто хочет убедиться, что вы сами написали решение.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.05.2020, 22:11   #7
Heorhii
Пользователь
 
Регистрация: 15.05.2020
Сообщений: 10
По умолчанию

Я так не умею, поэтому и обратился на форум.
Heorhii вне форума Ответить с цитированием
Старый 17.05.2020, 19:55   #8
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Цитата:
Сказал сделать приближеное к такому коду:
Код:
var a: array [1..18 ,1..18] of integer;
    i,j, n,m, min,k,l : integer;
begin
  writeln( 'n,m');
  readln(n,m);
А что будет, если пользователь введёт, например, 20 и 35?
Т.е. следует писать с проверкой вводимых значений, типа:
Код:
while True do
begin
   writeln('n, m');
   readln(n, m);
   if n <= 18 and m <= 18 then
      break;
end;
Можно и через repeat ... until <условие>, но это, в свете Python, не кошерно
Пример препода не совсем корректен
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 18.05.2020, 11:20   #9
Heorhii
Пользователь
 
Регистрация: 15.05.2020
Сообщений: 10
По умолчанию

BDA, я вас очень сильно прошу помогите с этим кодом, я просто физически с ним не успеваю, на завтра сдача а я уже 3 дня пишу 2 отчета, + еще надо сидеть на парах писать, умоляю сделайте, я сплю по 5-6 часов, давно не ел уже нормально еще осталось 2 недели до сессии, а уже надо делать много всякого говна которое не нужно в дальнейшем, чтоб выйти на стипендию. (не судите за то если я где-то допустил ошыбку, так как я не из России)
Heorhii вне форума Ответить с цитированием
Старый 18.05.2020, 19:57   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Ну вот исправленный код. Только толку от него не будет никакого. Преподаватель при приемке попросит что-нибудь еще поправить и завалит.

3.10
Код:
program Hello;

var
  matrix: array[1..18, 1..18] of integer;
  i, j, temp, rowIdx, minElem, n, m: integer;

begin
  writeln('n, m');
  readln(n, m);

  randomize;
  minElem := 100;
  rowIdx := 1;

  for i := 1 to N do 
  begin
    for j := 1 to M do 
    begin
      matrix[i, j] := random(100);
      Write(matrix[i, j], ' ');
    end;
    Writeln;
  end;

  for i := 1 to N do 
    for j := 1 to M do 
      if matrix[i, j] < minElem then begin
        minElem := matrix[i, j];
        rowIdx := i;
      end;

  Writeln;
  Writeln('Min element: ', minElem);
  Writeln('Min element"s row: ', rowIdx);
  Writeln;

  for i := 1 to M do 
  begin
    temp := matrix[1, i];
    matrix[1, i] := matrix[rowIdx, i];
    matrix[rowIdx, i] := temp;
  end;

  for i := 1 to N do 
  begin
    for j := 1 to M do 
      Write(matrix[i, j], ' ');
    Writeln;
  end;
end.
4.10
Код:
program Hello;

var
  matrix: array[1..18, 1..18] of integer;
  i, j, prevValue, sum, rowIdx, n, m: integer;

begin
  writeln('n, m');
  readln(n, m);

  randomize;
  prevValue := 0;
  rowIdx := 1;

  for i := 1 to N do 
  begin
    for j := 1 to M do 
    begin
      matrix[i, j] := -50 + random(100);
      Write(matrix[i, j], ' ');
    end;
    Writeln;
  end;

  for i := 1 to N do 
  begin
    sum := 0;
    for j := 1 to M do 
      sum := sum + sqr(matrix[i, j]);
    if sum > prevValue then begin
      rowIdx := i;
      prevValue := sum;
    end;
  end;

  Writeln;
  Writeln('Row index: ', rowIdx);
  Writeln('Sum: ', prevValue);
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 18.05.2020 в 20:00.
BDA вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Срочно Pascal текст vissells Паскаль, Turbo Pascal, PascalABC.NET 1 10.10.2017 07:55
Упростить решение Pascal: После каждого ингридента написано его количество, которое нужно добавлять в определенный момент времени, время для каждой части приготовления nobody_nohead Помощь студентам 7 14.12.2016 09:23
2 задачи на Pascal. Срочно! Cayce Фриланс 2 18.12.2009 03:23