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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2011, 20:55   #1
Sheffdmb2010
 
Регистрация: 18.10.2011
Сообщений: 9
По умолчанию В целочисленной матрице NxM в каждой строке определить числа, которых нет в следующей строке (Паскаль)

Код:
uses crt;
const n=5; m=7;
type mas1=array[1..m*n] of integer;mas=array[1..n] of mas1;
var i,j,v:integer; b:mas; b1:mas1;
procedure SOZD(var z:mas;k,l:integer);
var i,j:integer;
begin for i:=1 to k do
      for j:=1 to l do
      z[i,j]:=30-random(45)
end;
procedure VIVOD(var z:mas;k,l:integer;p:string);
var i,j:integer;
begin    writeln(p);
         for i:=1 to k do
         begin for j:= 1to l do
               write(z[i,j]:3,' ');
               writeln
         end
end;
procedure VIVOD2(var x:mas1;k:integer;p:string);
var i:integer;
begin    writeln(p);
         for i:=1 to k do
         begin  write(x[i]:3,' ');
                writeln
         end
end;
procedure OTBOR(var z:mas; x:mas1; k,l,c:integer);
var i,j,p,q:integer;
begin c:=0;
      for i:=1 to k do
      if i<>k then

                      for j:=1 to l do
                                    begin p:=z[i,j];
                                            for q:=1 to l do
                                             if p<>z[i+1,q] then
                                              begin c:=c+1;
                                                      x[c]:=p;
                                                        break;
                                              end;

                                     end;
end;
begin clrscr; randomize;
      sozd(b,n,m);vivod(b,n,m,'massiv B');
      otbor(b,b1,n,m,v);vivod2(b1,v,'4isla ne vste4ayushiesa v sled stroke');
      readkey;
end.
Всем привет. В очередной раз обращаюсь с глупым вопросом )))
данная прога должна:
Создать матрицу B[1..N,1..M] из целых чисел. Из каждой строки матрицы
определить числа, которых нет в следующей строке и записать их в
одномерный массив.
но что-то не выходит


_________
Убедительнейшая просьба - давать название темы так,
чтобы название адекватно отражало суть решаемой задачи/проблемы.
эту тему я исправил.
Но в будущем неукоснительно соблюдайте это правило!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 20.10.2011 в 09:47.
Sheffdmb2010 вне форума Ответить с цитированием
Старый 20.10.2011, 15:56   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

1) Вы не совсем корректно задаёте размерность массива MAS
он у Вас получается = array[1..n] of mas1 = array[1..n] of array[1..m*n] of integer
т.е. размер массива MAS получаетс 1.. n*M*N]
не проще ли написать
Код:
type MAS = array[1..N,1..M] of integer;
????

2) что делать с числами, которые расположены в последней строке исходного массива (ведь для неё нет следующей строки) ? Игнорировать? Или наоборот, считать что все числа из последней строки попадают под условие отбора и должны быть перенесены в результирующий массив?


3) запомните, если Вы что-то изменяете в процедуре\функции, то изменяемый параметре должен передаваться по ссылке.
(это ключевое слово VAR перед именем параметра
поэтому как минимум нужно:
Код:
procedure OTBOR(var z:mas; var x:mas1; k,l : integer; var c:integer);

Добавлено

ну и процедура отбора, имхо, написано у Вас неверно.
я бы предложил такой вариант:
Код:
procedure OTBOR(z: mas; var x: mas1; k, l: integer; var c: integer);
var i, j, p, q: integer;
  isExist: boolean;
begin
  c := 0;
  for i := 1 to k - 1 do
    for j := 1 to l do
    begin
      p := z[i, j];
      isExist := false;
      for q := 1 to l do
        if p = z[i + 1, q] then
        begin
          isExist := true;
          break;
        end;
      if not isExist then begin
        c := c + 1;
        x[c] := p;
      end;
    end;
end;
p.s. работоспособность кода я НЕ ПРОВЕРЯЛ!

p.p.s. в данном алгоритме числа из последней строки отбрасываются совсем (ну, так же, как и вы пытались в своём коде написать)

Последний раз редактировалось Serge_Bliznykov; 20.10.2011 в 16:10.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.10.2011, 18:56   #3
Sheffdmb2010
 
Регистрация: 18.10.2011
Сообщений: 9
По умолчанию Спасибо Большое!!!

Спасибо большое Serge_Bliznykov!!!
Мой алгоритм решения оказался верным, но спасибо что предложил свой вариант.
Вся загвоздка оказалась в описании процедуры, а именно в операторе var.
Расставил все как ты показал и сразу заработало.



Насчет правил обязуюсь впредь не нарушать
Sheffdmb2010 вне форума Ответить с цитированием
Старый 21.10.2011, 08:33   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Мой алгоритм решения оказался верным, но спасибо что предложил свой вариант.
так. стопэ.

у нас принципиально разные задачи решаются!
задайте (ручками) N=2 M=5 (для простоты)
и заполните такую матрицу
Код:
  1   2   3   4   5
  6   5   4   3   2
это можно сделать так:
Код:
const n = 2; m = 5;
type mas1 = array[1..m * n] of integer; mas = array[1..n] of mas1;
var i, j, v: integer; b: mas; b1: mas1;
procedure SOZD(var z: mas; k, l: integer);
var i, j: integer;
begin for i := 1 to k do
    for j := 1 to l do
       if odd(i) then z[i, j] := j
       else z[i, j] := l+2-j;
end;
и посмотрите, что выдаст Ваш код..
Цитата:
Код:
massiv B
  1   2   3   4   5
  6   5   4   3   2
4isla ne vste4ayushiesa v sled stroke
  1
  2
  3
  4
  5
я же рассматривал задачу определения чисел - перебором ВСЕХ чисел в следующей строке.

в моём примере кода для данного примера будет выдан ответ только 1(единица),
т.к. она не встречается в следующей строке


Успехов в учёбе.

Последний раз редактировалось Serge_Bliznykov; 21.10.2011 в 08:36.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В целочисленной квадратной матрице наибольший элемент каждой строки поменять местами с элементом главной диагонали DesignGenius C# (си шарп) 0 18.10.2011 20:22
В действительной матрице А(n,n).определить в каждой строке число локальных максимумов (Delphi) (=Настя=) Помощь студентам 7 14.09.2011 22:16
В матрице в каждой строке найти сумму N Элементов расположенных после максимального элемента этой строки lexflax Паскаль, Turbo Pascal, PascalABC.NET 0 20.04.2011 14:41
Найти наибольший и наименьший элемент в каждой строке матрицы. Отсортировать... (Паскаль) Tifa Помощь студентам 0 27.01.2011 23:07
Подсчитать в матрице количество элементов в строке, больше заданной величины (Турбо Паскаль) Дмитрий1992 Паскаль, Turbo Pascal, PascalABC.NET 4 21.12.2010 15:37