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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2012, 17:19   #1
lvl
Пользователь
 
Регистрация: 07.11.2012
Сообщений: 18
По умолчанию Turbo Pascal Двумерные массивы

1) Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик (оформиить в виде процедуры).
2)Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент (оформить в виде функции).

P.S.: это одна задача, помогите, пожалуйста, решить её))
Сам алгоритм есть, но нужно оформить в виде функции и в виде процедур
Код:
program zadanie5;
uses crt;
var a:array[1..20, 1..20] of integer;
m, n, i, j, k:byte;
s, x:integer;
begin
clrscr;
randomize;
repeat
write('введите количество строк m=');
readln(m);
until m in [1..20];
repeat
write('введите количество столбцов n=');
readln(n);
until n in [1..20];
for i:=1 to m do
for j:=1 to n do
a[i, j]:=random(20)-5;
for j:=1 to n do
begin
s:=0;
for i:=1 to m do
if (a[i,j]<0) and odd(a[i,j]) then s:=s+abs(a[i,j]);
a[i,j]:=s;
end;
writeln('Исходная матрица*:');
for i:=1 to m do
begin
write;
for j:=1 to n do
write(a[i,j], ' ');
writeln;
end;
for j:=1 to n do
write(a[i,j], ' ');
writeln;
for j:=1 to n-1 do
for k:=j+1 to n do
if a[i,j]>a[i,k] then
for i:=1 to m do
begin
x:=a[i,j];
a[i,j]:=a[i,k];
a[i,k]:=x;
end;
writeln('столбцы упорядочены');
for i:=1 to m do
begin
write('');
for j:=1 to n do
write(a[i,j], ' ');
writeln;
end;
for j:=1 to n do
write(a[i,j], ' ');
writeln;
writeln('суммы в столбцах, где есть отрицательные числа:');
for j:=1 to n do
begin
x:=0;
for i:=1 to m do
if a[i,j]<0 then x:=1;
if x=1 then
begin
s:=0;
for i:=1 to m do
s:=s+a[i,j];
writeln('сумма в столбце',j,'=',s);
end;
end;
readln;
end.

Последний раз редактировалось Stilet; 07.11.2012 в 17:31.
lvl вне форума Ответить с цитированием
Старый 07.11.2012, 17:39   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
program zadanie5;
uses crt;
var a:array[1..20, 1..20] of integer;
m, n, i, j, k:byte;
s, x:integer;

procedure _in(); var i,j:integer;
begin
for i:=1 to m do for j:=1 to n do a[i, j]:=random(20)-5;
end;

procedure _uno;var i,j:integer;
begin
for j:=1 to n do begin s:=0;
 for i:=1 to m do
  if (a[i,j]<0) and odd(a[i,j]) then s:=s+abs(a[i,j]);
 a[i,j]:=s;
end;
end;

procedure _out;var i,j:integer;
begin
writeln('Исходная матрица*:');
for i:=1 to m do begin
 for j:=1 to n do  write(a[i,j], ' ');
 writeln;
end;
end;

procedure _sort;var i,j:integer;
begin
for j:=1 to n-1 do
 for k:=j+1 to n do
  if a[i,j]>a[i,k] then
   for i:=1 to m do begin
     x:=a[i,j];
     a[i,j]:=a[i,k];
     a[i,k]:=x;
   end;
writeln('столбцы упорядочены');
end;

function sum(j:integer); var s,i:integer;
begin
 s:=0;
 for i:=1 to m do s:=s+a[i,j];
 sum:=s;
end;

begin
clrscr;
randomize;
repeat write('введите количество строк m='); readln(m);until m in [1..20];
repeat write('введите количество столбцов n=');readln(n);until n in [1..20];

_in;_uno;_out;_sort;_out;

writeln('суммы в столбцах, где есть отрицательные числа:');
for j:=1 to n do begin x:=0;
 for i:=1 to m do if a[i,j]<0 then x:=1;
 if x=1 then    writeln('сумма в столбце',j,'=',sum(j));
end;

readln;
end.
Подходит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.11.2012, 17:51   #3
lvl
Пользователь
 
Регистрация: 07.11.2012
Сообщений: 18
По умолчанию

function sum(j:integer); var s,i:integer;
вот в этой строчке выводит ошибку: "Предполагается идентификатор типа"
не могу понять что не так
lvl вне форума Ответить с цитированием
Старый 07.11.2012, 17:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Забыл там тип функции указать. Почитай как описываются функции и где у них типы и допиши
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.11.2012, 18:00   #5
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
function sum(j:integer):integer; 
var s,i:integer;
begin
 s:=0;
 for i:=1 to m do s:=s+a[i,j];
 sum:=s;
end;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 08.11.2012, 08:26   #6
lvl
Пользователь
 
Регистрация: 07.11.2012
Сообщений: 18
Смущение

всё работает, спасибо большое!!!)))
lvl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
двумерные массивы.(pascal) Диляра - новичок Помощь студентам 2 19.11.2010 22:59
Turbo Pascal 7.0 (Двумерные массивы) @vror@ Помощь студентам 4 27.05.2010 14:33
Двумерные массивы (Pascal) qwerty777 Помощь студентам 5 05.04.2010 15:13
Двумерные массивы в Pascal AnL Помощь студентам 6 14.12.2009 17:45