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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2014, 19:57   #1
You-Lol
Пользователь
 
Регистрация: 11.11.2014
Сообщений: 13
По умолчанию Использование подпрограмм в массивах

Добрый вечер, прошу помочь с использованием подпрограмм.

Нужно код переделать так чтобы : ввод данных, вычисление и вывод были отдельными подпрограммами. Не пойму как это сделать.

Зарание спасибо!
Изображения
Тип файла: jpg ZMKO78gSRss.jpg (47.5 Кб, 62 просмотров)
You-Lol вне форума Ответить с цитированием
Старый 22.11.2014, 11:58   #2
You-Lol
Пользователь
 
Регистрация: 11.11.2014
Сообщений: 13
По умолчанию

вот код
Код HTML:
var
  a: array [1..99, 1..99] of integer;
  i, j, k, n, l: integer;

begin
  writeln('Vvtdite Kolichestvo elementov massiva');
  read(n);
  k := 1;l := 1;
  writeln('Vvedite matrix A', n, 'x', n);
  for i := 1 to n do 
  begin
    for j := 1 to n do 
    begin
      readln(a[i, j]);
    end;
  end;
  writeln('Basha Marix');
  for i := 1 to n do 
  begin
    for j := 1 to n do 
    begin
      write(a[i, j]:6);
      if a[i, j] > a[k, l] then begin
        k := i;l := j; 
      end;
    end;
    writeln;
  end;
  writeln('Max Element A', n, 'x', n, ' [', k, ',', l, ']=', a[k, l]);
  writeln('Novaya Matrix');
  for i := 1 to n do 
  begin
    for j := 1 to n do 
    begin
      write((a[i, j] / a[k, l]):2);
    end;
    writeln;
  end;
end.
You-Lol вне форума Ответить с цитированием
Старый 22.11.2014, 14:39   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Нужно код переделать так чтобы : ввод данных, вычисление и вывод были отдельными подпрограммами. Не пойму как это сделать.
Надо не переделывать код. Код надо всегда так писать, изначально!!
У меня есть несколько примеров с матрицами, где ввод, вывод матриц и действия с ними сделаны функциями. Подарить тебе?

Вот один из примеров:
Код:
program p3582;

{$APPTYPE CONSOLE}

const
  m = 7; // Кол-во строк матрицы
  n = 9; // Кол-во столбцов матрицы

type
  TVector = array[0..n - 1] of Integer;
  TMatrix = array[0..m - 1, 0..n - 1] of Integer;

// Заполнение одномерного массива случайными числами в диапазоне 0...Range - 1
procedure RandomVector(var V: TVector; const Range: Integer);
var
  Index: Integer;
begin
  for Index:= 0 to n - 1 do
    V[Index]:= Random(Range);
end;

// Заполнение двумерного массива случайными числами в диапазоне 0...Range - 1
procedure RandomMatrix(var X: TMatrix; const Range: Integer);
var
  i, j: Integer;
begin
  for i:= 0 to m - 1 do
    for j:= 0 to n - 1 do
      X[i, j]:= Random(Range);
end;

// Вывод одномерного Size первых элементов массива на экран
procedure PrintVector(const V: TVector; const Size: Integer);
var
  Index: Integer;
begin
  WriteLn;

  for Index:= 0 to Size - 1 do
    Write(V[Index]: 4);

  WriteLn(#13#10);
end;

// Вывод двумерного массива на экран
procedure PrintMatrix(const X: TMatrix);
var
  i, j: Integer;
begin
  WriteLn;

  for i:= 0 to m - 1 do
    begin
      for j:= 0 to n - 1 do
        Write(X[i, j]: 4);

      WriteLn;
    end;
end;

// Подсчёт кол-ва строк матрицы X, в которых встречается число Value
function ElementInLinesCount(const X: TMatrix; const Value: Integer): Integer;
var
  i, j, Count: Integer;
begin
  Count:= 0;

  for i:= 0 to m - 1 do
    for j:= 0 to n - 1 do
      if X[i, j] = Value
        then begin
               Inc(Count);
               Break; // выход во внешний цикл (переход на след. строку)
             end;

  ElementInLinesCount:= Count;
end;

// Удаление нулей из одномерного массива со сдвигом элементов.
// Возвращает количество оставшихся элементов.
function DeleteZeroNumbers(var V: TVector): Integer;
var
  Count, Index, j: Integer;
begin
  Count:= n;
  Index:= 0;

  repeat
    if V[Index] = 0
      then begin
             for j:= Index + 1 to n - 1 do // Сдвиг
               V[j - 1]:= V[j];

             Dec(Count);
           end
      else Inc(Index);
  until Index = n - 1;

  DeleteZeroNumbers:= Count;
end;


var
  B: TVector;
  A: TMatrix;
  Index, Count: Integer;
  Prefix: string;

const
  Range = 10; // Диапазон случайных чисел

begin
  //Randomize;

  { 1) Найти все числа из массива B(n), встречающиеся более чем в одной строке
       матрицы A(m, n).  }

  WriteLn('========================== Part 1 ===========================');

  RandomVector(B, Range);
  WriteLn('  Source vector B[', n, ']: ');
  PrintVector(B, n);
  RandomMatrix(A, Range);
  WriteLn('  Source matrix A[', m, 'x', n, ']: ');
  PrintMatrix(A);

  // Подсчёт и вывод
  WriteLn(#13#10'  Results: '#13#10);
  for Index:= 0 to n - 1 do
    begin
      Count:= ElementInLinesCount(A, B[Index]);

      if Count > 1
        then Prefix:= ' ----> '
        else Prefix:= '       ';

      WriteLn(Prefix, '  B[', Index + 1, '] = ', B[Index]: 3, ' in ', Count, ' lines of matrix A');
    end;

  { 2) Удалить из массива А (n) нулевые элементы, передвинув на их место
       следующие элементы без нарушения порядка их следования. В результате
       должен получиться массив меньшего размера, не содержащий нулей. }

  Write(#13#10'  Press "ENTER" to continue...');
  ReadLn;
  WriteLn(#13#10'========================== Part 2 ===========================');

  //RandomVector(B, Range);
  WriteLn('  Source vector A[', n, ']: ');
  PrintVector(B, n);
  Count:= DeleteZeroNumbers(B);
  WriteLn('  After delete zeroes: ');
  PrintVector(B, Count);


  Write(#13#10'  Press "ENTER" to exit...');
  ReadLn;
end.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 22.11.2014 в 14:48.
min@y™ вне форума Ответить с цитированием
Старый 22.11.2014, 19:10   #4
You-Lol
Пользователь
 
Регистрация: 11.11.2014
Сообщений: 13
По умолчанию

Спасибо) 6 часов и справился сам)

сейчас работал над похожей матрицей : Найти больший элемент в каждой строке матрицы.
Есть небольшая проблема - если вводить сначала большую строку (98
43)
то программа выдает ответ : Большие элементы - 9 и 9

а если наоборот то ответ правильный - 4 и 9

можете помочь исправить этот недостаток.

PHP код:
type mas=array[1..991..99]of integer;
 var
 
ijinteger;
  
nbyte;
  
Amas;
  
procedure inmart(var amasninteger);
var
  
ijinteger;
begin
  writeln
('Vvedite matrix A'n'x'n);
  for 
:= 1 to n do 
  
begin
writeln
('Введите строку №',i);
    for 
:= 1 to n do 
    
begin
      readln
(a[ij]);
    
end;
  
end;
  
writeln('Basha Marix');
  for 
:= 1 to n do 
  
begin
    
for := 1 to n do 
    
begin
      write
(a[ij]:5);
    
end;
    
writeln;
  
end;
end;
function 
max(amasninteger): integer;
var 
b:array[1..99of integer;
i,j,E:integer;
begin
writeln
('Большие элементы матрицы:');
  for 
:= 1 to n do 
  
begin
    E 
:= a[11];
    for 
:= 1 to n do
      if 
a[ij] > E then E := a[ij];
    
b[i] := E;
    
writeln(b[i]);
    
end;
  
end;
begin
writeln
('Введите количество элементов матрицы:');
  
read(n);
  
inmart(a,n);
  
max(a,n);
  
end
You-Lol вне форума Ответить с цитированием
Старый 22.11.2014, 19:20   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

отформатируй исходник по-человечски, читать же невозможно!
и убери все глобалные переменные с глаз долой!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование подпрограмм Shyrick Паскаль, Turbo Pascal, PascalABC.NET 7 10.06.2014 15:32
Использование подпрограмм specnazkin Помощь студентам 0 12.05.2011 15:43
использование подпрограмм ANutaStar Паскаль, Turbo Pascal, PascalABC.NET 0 12.12.2010 12:59
Использование подпрограмм бургер Паскаль, Turbo Pascal, PascalABC.NET 5 29.04.2010 04:21
Использование подпрограмм inferno fm Общие вопросы Delphi 2 19.09.2009 18:37