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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2012, 14:37   #1
alexandrovna
Новичок
Джуниор
 
Регистрация: 16.09.2012
Сообщений: 7
По умолчанию Задача с матрицей.ОЧЕНЬ НАДО!

С помощью функции Random сформировать двумерный массив размером n*m вещественных чисел с элементами от -30 до 30. Определить количество положительных элементов в каждом столбце матрицы. Сформировать два новых массива из 20-ти первых элементов исходного массива, деленных на max, и из 20-ти последних, деленных на max. Вывести все три массива.
alexandrovna вне форума Ответить с цитированием
Старый 17.09.2012, 14:46   #2
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

Смотрите правила раздела
astecenko вне форума Ответить с цитированием
Старый 17.09.2012, 19:12   #3
domovou
Пользователь
 
Аватар для domovou
 
Регистрация: 01.09.2012
Сообщений: 88
По умолчанию

Код:
uses wincrt;
 type
    mat = array [0..10,0..10] of integer;
   mat1 = array [0..10,0..10] of real;
Var   n,l:integer;
 m: mat;
    m1,m2  :mat1;

procedure MxR (var m : mat);
 Var    i,j : integer;
begin
randomize;
writeln ('Введите количество строк (столбцев) в матрице')  ;
readln  (n,l);
for i:=1 to n do
begin
     for j:=1 to l do
     m[i,j]:=random(60)-30;
end;
writeln;
end;

procedure Mx2 (var m : mat);
 Var    i,j : integer;
begin
for i:=1 to n do
begin
     for j:=1 to l do
     write (m[i,j]:3);
writeln;
end;

end;

procedure polshisla (var m : mat);
var   i,j,z : integer;
begin
z:=0;
for j:=1 to n do
    begin
         for i:=1 to l  do
             if m[i,j]>0
                then inc(z);
         writeln('pol shesel v ',j,'stolbce = ',z) ;
         z:=0;
    end;
end;

procedure soz2(var   m:mat;    m1,m2  :mat1);
var   i,j,z,max,i1,i2 : integer;
begin
max:=0;
for i:=1 to n do
    for j:=1 to l  do
          if m[i,j]>max
             then max:=m[i,j];
z:=0;

   for i:=1 to n do begin
       if z=20 then break;
       for j:=1 to l  do   begin
             m1[i,j]:=m[i,j] / max ;
             inc(z);

                        end;

                    end;



z:=0;
for i:=1 to n do         begin
 if z=20 then break;
 for j:=1 to l  do begin
 write (m1[i,j]:5:2);
 inc(z);
                         end;
 writeln;
                   end;

writeln;


 z:=0;

for i:=n downto 1 do begin
    if z=20 then break;
    for j:=l downto 1  do begin
             m2[i,j]:=m[i,j] / max ;
              inc(z);

                        end;

                      end;
z:=0;
for i:=n downto 1 do   begin
     if z=20 then break;
     for j:=l downto 1  do   begin
         write (m2[i,j]:5:2);
         inc(z);
                                end;
    writeln;
                         end;

end;

begin
MxR(m);
Mx2(m);
readln;
polshisla(m);
soz2(m , m1,m2    );
end.
Программист - это не тот, кто пишет программы, а тот, чьи программы работают.
domovou вне форума Ответить с цитированием
Старый 18.09.2012, 02:32   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Похоже, Александровна и домовой нашли друг друга. Одна ставит задачу абы как, что требуется сотня уточнений, а другой ее решает абы как, чтоб типа рядом лежало.. Совет вам да любовь! ))
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 18.09.2012, 10:10   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от TinMan
, а другой ее решает абы как, чтоб типа рядом лежало..
угу. согласен.
Ещё вчера хотел написать об этом же!
Тут много к чему можно придраться, начиная с использования целочисленного массива вместо вещественного, отсутствия контроля за величинами N и L, путаницы с количеством строк и столбов (см. циклы в polshisla) и заканчивая тем, что формула random(60)-30 даст числа от -30 до 29).
Но потом подумал, что автор темы сама разберётся.
А, возможно, даже и так сдаст!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.09.2012, 17:43   #6
domovou
Пользователь
 
Аватар для domovou
 
Регистрация: 01.09.2012
Сообщений: 88
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
путаницы с количеством строк и столбов (см. циклы в polshisla)
А какая там путаница, я не понял
Цитата:
Сообщение от alexandrovna Посмотреть сообщение
Определить количество положительных элементов в каждом столбце матрицы.
Код:
  for j:=1 to n do
    begin
         for i:=1 to l  do
             if m[i,j]>0
                then inc(z);
         writeln('pol shesel v ',j,'stolbce = ',z) ;
         z:=0;
    end;
я перебираю не по строкам(m[1,1];m[1,2];m[1,3]...m[2,1]),
а по столбцам(m[1,1];m[2,1];m[3,1]...m[1,2])

Ну написал не без огрехов
Программист - это не тот, кто пишет программы, а тот, чьи программы работают.
domovou вне форума Ответить с цитированием
Старый 18.09.2012, 22:10   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А какая там путаница, я не понял
поясняю. когда вы заполняете массив, первый индекс (строки) изменяется от 1 до N, а второй индекс (столбцы) — от 1 до L:
Цитата:
Код:
writeln ('Введите количество строк (столбцев) в матрице')  ;
readln  (n,l);
for i:=1 to n do
begin
     for j:=1 to l do
     m[i,j]:=random(60)-30;
end;
а когда ищете положительные элементы, то первый индекс уже изменяется от 1 до L, а второй - от 1 до N:
Цитата:
Код:
for j:=1 to n do
    begin
         for i:=1 to l  do
             if m[i,j]>0
                then inc(z);
         writeln('pol shesel v ',j,'stolbce = ',z) ;
         z:=0;
    end;
это неверно, в этом и есть ваша путаница (ошибка).

да и вообще, я бы так написал эту процедурку:
Код:
procedure PologitelnyeChisla ( m : mat );
var   i, j, z : integer;
begin
  for j:=1 to l do
    begin
         z:=0;
         for i:=1 to n  do
             if m[i,j]>=0   then inc(z);
         writeln('Kolichestvo pologitelnyh chisel v ',j,' stolbce = ',z) ;
    end;
end;

Цитата:
Ну написал не без огрехов
ну да, не без них!


Вы лучше объясните, каким образом Вы трактовали:
Цитата:
Сформировать два новых массива из 20-ти первых элементов исходного массива, деленных на max, и из 20-ти последних
если у меня есть двумерный массив размером N*M - какие элементы в нём ПЕРВЫЕ ?!
1 9 8
2 7 4
3 5 4
4 6 8

выпишите отсюда пять первых элементов, пожалуйста!

Последний раз редактировалось Serge_Bliznykov; 18.09.2012 в 22:15.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.09.2012, 22:39   #8
domovou
Пользователь
 
Аватар для domovou
 
Регистрация: 01.09.2012
Сообщений: 88
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
поясняю. когда вы заполняете массив, первый индекс (строки) изменяется от 1 до N, а второй индекс (столбцы) — от 1 до L:

а когда ищете положительные элементы, то первый индекс уже изменяется от 1 до L, а второй - от 1 до N:

это неверно, в этом и есть ваша путаница (ошибка).
А, все понял.


Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы лучше объясните, каким образом Вы трактовали:

если у меня есть двумерный массив размером N*M - какие элементы в нём ПЕРВЫЕ ?!
1 9 8
2 7 4
3 5 4
4 6 8

выпишите отсюда пять первых элементов, пожалуйста!
1 9 8
2 7
Программист - это не тот, кто пишет программы, а тот, чьи программы работают.
domovou вне форума Ответить с цитированием
Старый 18.09.2012, 23:47   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию


а почему Вы решили, что не по столбцам?
1 2 3 4 9 - это не первые элементы?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.09.2012, 17:36   #10
domovou
Пользователь
 
Аватар для domovou
 
Регистрация: 01.09.2012
Сообщений: 88
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение

а почему Вы решили, что не по столбцам?
Так если "обычно" массив обрабатываем [1,1] [1,2] [1,3] ...
а потом переходим на следующею строку, вот этим я и руководвовался
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1 2 3 4 9 - это не первые элементы?
Нет)
Программист - это не тот, кто пишет программы, а тот, чьи программы работают.
domovou вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на делфи очень надо avtoritetbikov@mai Фриланс 1 03.10.2011 08:17
Задача на паскале, очень надо minatula34 Помощь студентам 1 03.04.2011 00:01
Задача очень надо!!! Evgenii(Евгений) Помощь студентам 2 17.10.2010 19:48