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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2008, 14:17   #1
1234
Заблокирован
 
Регистрация: 09.11.2007
Сообщений: 97
Вопрос Нахождение минимума и максимума в трехмерном массиве

Здравствуйте.
Помогите, пожалуйста, доделать программу:
Что надо сделать:

Написать подпрограмму определения в трехмерном массиве максимального и минимального (по модулю) элементов, а также результата деления найденного максимального элемента на минимальный
Используя подпрограмму, найти такое частное для заданных массивов A(N,M,K) и B(L,P,Q).
Элементы массивов - целые числа
Обмен данных с программой только через параметры
Исходные массивы хранятся в отдельных файлах

Что есть:
(Очень интересует кусок, связанный с вводом массива)
Программа переделывалась (работала, но неверно считывался массив; поэтому могут присутствовать ненужные куски кода)


Код:
program mass3d;
uses
crt;
const
u=10;
type
M1=Array[1..u,1..u,1..u] of integer;
VAR
A:M1;
B:M1;

err:integer;


procedure InpMas (var mas:m1; n,m,k:integer);
var
G:Text;
kk,nn,mm:integer;

  begin
  assign(G, 'C:\KAV\G.txt');
  readln(G, n,m,k);
   For kk:=1 to K do begin
    For nn:=1 to N do begin
     For mm:=1 to M do begin
      read(G, mas[kk,nn,mm]);
      end;
      readln(g);
      end;
      readln(g);
      end;




procedure minMAX(var N,M,K,L,P,Q:Integer);
var kk,nn,mm,MIN_ZN,MAX_ZN:integer;
ch,ch_b:real;
  begin
  if err=1 then
  writeln('error a')
  else
  max_zn:= abs(mas[1,1,1]);
  min_zn:= abs(mas[1,1,1]);
  For kk:=1 to k do
  For nn:=1 to n do
  For mm:=1 to m do

  IF abs(mas[kk,nn,mm])>MAX_ZN then BEGIN
  max_zn:=abs(mas[kk,nn,mm]);

  IF abs(mas[kk,nn,mm])<min_ZN then BEGIN
  min_zn:=abs(mas[kk,nn,mm]);

   end;
   end;

  IF ERR=0 THEN BEGIN
  ch:=max_zn/min_zn;
  END;
  if err=1 then write('')
  else
  writeln('Maximum =  ',max_zn);

  if err=2 then write('')
  else
  writeln('Minimum =  ',min_zn);
  if err=0 then writeln('Chastnoe =  ',Ch:6:3);
  if err=12 then
  writeln('Minimum ',min_zn,'    Maximum ',max_zn,'    Chastnoe ',Ch:6:3,'');
 readln;
  END;


  begin
  CLRSCR;
  TAB_IN;
  IF err=1 then
  writeln('Error in A')
  ELSE
  begin
  Tab_MAS_A(n,m,k);
 end;
  IF err=2 then
  writeln('Error in B')
  else
  begin
  Tab_MAS_B(l,p,q);
   end;
  minMAX(N,M,K,L,P,Q);

END.
1234 вне форума Ответить с цитированием
Старый 25.05.2008, 14:42   #2
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Вот писал когдато заполнение массива из файла.
Структура файла:
1
2
3
4
...... и т.д.

Код:
Var x, y : Integer;
      mass : array [1..10, 1..10] of Integer;
      F : TextFile;
    
Begin
AssignFile(F, 'In.txt');
Reset(F);

For x := 1 To 10 Do
  For y := 1 To 10 Do
    Read(F, mass[x,y]);

CloseFile(F);

Writeln;

For x := 1 To 10 Do
  Begin
    For y := 1 To 10 Do
      Write(mass[x,y], ' ');
    Writeln;
  End;

Readln;
End.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 25.05.2008, 14:53   #3
1234
Заблокирован
 
Регистрация: 09.11.2007
Сообщений: 97
По умолчанию

Мне кажется, что для трехмерного массива так не прокатит
Там надо еще readln'ы расставить правильно, чтобы ,например, массив размерности 3 2 3 где 3-число строк 2-столбцов 3-слоев
считывался таким образом:

11
22 1й слой!!
33

44
55 2й слой
66

77
88 3й слой
99



А вы привели к примеру обычную матрицу
1234 вне форума Ответить с цитированием
Старый 25.05.2008, 15:03   #4
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Невижу никаких различий в заполнение многомерного массива за исключением ещё одного цикла.
Структура файла таже. Заполняем многомерный (3 слоя) массив из файла и выводим все три слоя на экран.

Код:
Var x, y, z : Integer;
      mass : array [1..3, 1..3, 1..3] of Integer;
      F : TextFile;

Begin
AssignFile(F, 'In.txt');
Reset(F);

For x := 1 To 3 Do
  For y := 1 To 3 Do
    For z := 1 To 3 Do
      Read(F, mass[x,y,z]);

CloseFile(F);

Writeln;
For x := 1 To 3 Do
  Begin
    Writeln;
      For y := 1 To 3 Do
        Begin
          For z := 1 To 3 Do
            Write(mass[x,y,z], ' ');
          Writeln;
        End;
  End;


Readln;
End.
Или у Вас есть определёная структура файла?
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 25.05.2008, 15:19   #5
1234
Заблокирован
 
Регистрация: 09.11.2007
Сообщений: 97
По умолчанию

Спасибо, так тоже все работает.
только Вы пишете assignFILE и closeFILE, а это уже из дельфи))

Последний раз редактировалось 1234; 25.05.2008 в 15:22.
1234 вне форума Ответить с цитированием
Старый 25.05.2008, 15:24   #6
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Цитата:
Сообщение от 1234 Посмотреть сообщение
Спасибо, так тоже все работает.
только Вы пишете assignFILE и closeFILE, а это уже из дельфи))
Дык это консолка Ну Вы и так поняли как надо писать.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 25.05.2008, 21:24   #7
1234
Заблокирован
 
Регистрация: 09.11.2007
Сообщений: 97
По умолчанию

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

1 1
2 2
3 3

4 4
5 5 ----------------------- Второй массив
6 6

7 7
8 8
9 9

Да и первый неплохо немного сдвинуть
Эксперименты с расстановкой writeln'ов ни к чему не привели..

Последний раз редактировалось 1234; 25.05.2008 в 21:47.
1234 вне форума Ответить с цитированием
Старый 25.05.2008, 22:10   #8
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Цитата:
Сообщение от 1234 Посмотреть сообщение
Да и первый неплохо немного сдвинуть
Эксперименты с расстановкой writeln'ов ни к чему не привели..
Циклы, Врителн и голова сотворят чудеса

Тоесть нужно вывести слои массива рядом друг с другом?
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 25.05.2008, 22:17   #9
1234
Заблокирован
 
Регистрация: 09.11.2007
Сообщений: 97
По умолчанию

Нет, нужно вывести второй массив (они одинаковой размерности)
сбоку от первого так:
11----11
22----22
33----33
То есть, чтобы между ними быд промежуток, но выводились бы они на одном уровне, а не друг за другом (массива два)

сейчас у меня так:
MASS 1
11
22
33

MASS B
11
22
33
1234 вне форума Ответить с цитированием
Старый 25.05.2008, 22:43   #10
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

тогда импровизируем....
Код:
Var M, N : array [1..3, 1..3] of Integer;
      x, y : Integer;

Begin
For x := 1 To 3 Do
  For y := 1 To 3 Do
    Begin
      M[x,y] := y;
      N[x,y] := y + 10;
    End;

For x := 1 To 3 Do
  Begin
    For y := 1 To 6 Do
      Begin
        If y = 4 Then Write('     ');
        if y < 4 Then Write(M[x,y], ' ') Else Write(N[x,y - 3], ' ');
      End;
    Writeln;
  End;

Readln;
End.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выделение жирным шрифтом минимума и максимума из диапазона Bazzer Microsoft Office Excel 11 28.06.2008 18:50
нахождение в массиве суммы значений, удовлетворяющих условию azov Microsoft Office Excel 27 26.06.2008 21:24
Нахождение суммы в массиве. PHP Айвенго Помощь студентам 3 28.01.2008 19:46
нахождение суммы четных чисел в массиве Ci_novice Общие вопросы C/C++ 1 23.12.2007 12:11
Нахождение двух одинаковых элементов в массиве Stas))) Помощь студентам 4 01.06.2007 12:23