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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2011, 01:26   #1
Fromki
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 60
По умолчанию использование процедур и функций Paskal

Помогите решить в паскале плиз...нужно для красного использовать процедуру и функцию, там без разницы для чего функцию и процедуру главное чтобы была процедура и функция:
Вводится матрица MT (n,m) с цифровой информацией. Составить программу нахождения в столбцах матрицы отрицательных элементов, подсчета их количества и сумм. Получить новую матрицу, в которой элементы будут представлены числами, полученными от умножения суммы отрицательных элементов по столбцу на значение конкретного элемента. Исходные, промежуточные и результатные данные вывести на дисплей.
Есть код без использования процедур и функций:

Код:
program lab4;
uses  crt;
Label
   L1,L2;
var
A : array [1..10,1..10] of integer;
j : array [1..10,1..10] of integer;
B:array[1..10,1..10] of  real;
ch:char;
x, y, q, error:integer;
begin
clrscr;
   window(3,4,70,14);
    writeln('Вашему вниманию представляется программа');
    writeln('которая находит в столбцах матрицы отрицательные <0 элементы,');
    writeln('подсчета их количества и сумм.);
    writeln('Затем получает новую матрицу, в которой элементы’);
    writeln('будут представлены числами, полученные от умножения ');
    writeln('отрицательных элементов по столбцу на значение конкретного элемента.');
    writeln('Требования:');
    writeln('Элементы матрицы должны быть целыми числами!');
    writeln('Размерность матрицы должна быть не меньше двух,');
    writeln('но и не более ста элементов');
    window(42,15,75,23);
    writeln(‘Программу составил студент’);
    writeln('**********.');
    window(1,1,75,25);
    gotoxy(20,24);
    writeln('для продолжении нажмите любую клавишу ');
    Ch:=readkey;
    L1:Clrscr;
repeat
    write('Введите размерность матрицы: ');
    {$I-}
    readln(q);
    error:=IOResult;
    {$I+}
    If(error<>0) or (q>100) or (q<2) then
    writeln('Ошибка ввода размерности’);
    until(error=0) and (q<=100) and (q>=2);
    writeln('Введите матрицу:',q,' столбца(ов) и ',q,' строк(и)');

for y:=1 to q do
begin
for x:=1 to q do
 begin
{$I-}
repeat
 read (A[y,x]);
         error:=ioresult;
         {$I+}
         If ( A[y,x] > 99) or (A[y,x] < -99) or (Error <> 0)  then
          writeln('ошибка ввода элемента матрицы’);
      until ( A[y,x] <=99) and ((A[y,x] >=-99) and (Error = 0));
     Readln;
     end;
     end;
     clrscr;
   writeln(‘Исходная матрица’);
     y:=0;
   while y < q do
    begin
       x:=1;
       j[y+1,1]:=0;
       j[y+1,2]:=0;
      repeat
     if A[y+1,x]<0 then
        begin
     j[y+1,1]:=j[y+1,1]+ A[y+1,x];
     j[Y+1,2]:=  j[Y+1,2]+1;
        end;
      inc(x);
      until x>q;
     y:=y+1;
    end;
    writeln('');
   y:=1;
   repeat
     for x:=1 to q do
       begin
   if  (y=1)  then
        write('_____')
       else
   if  (y>q+1)  then
        write('-----')
         else
        begin
           if A[x,y-1] > -1 then
                write(' ');
        write(A[x,y-1]);
        write(' | ');
         end;
        end;
       writeln;
       inc(y,1);
    until (q+2<y);

    for x:=1 to q do
      begin
      write(' ');
 write(j[x,1]:1:0);
        write(' | ');
      end;
 writeln(' сумма элементов <0');
     for x:=1 to q do
      begin
   write(' ');
 write(j[x,2]:1:0);
        write(' | ');
      end;
 writeln(' количество элементов <0');

for x:=1 to q do
for y:=1 to q do
if A[x,y]<>0 then
B[x,y]:= j[x,1] * A[x,y];
 writeln;

   writeln(‘Полученная матрица’);
   x:=0;
   repeat
     inc(x,1);
     for y:=1 to q do
     begin
       if  (x=1)  then
         write('_____')
         else
   if  (x>q+1)  then
        write('-----')
         else
        begin
     if B[y,x-1] > -1 then
                write(' ');
     write(B[y,x-1]:1:1);
     write(' | ');
        end;
     end;
     writeln;
   until q<(x-1);
begin
  writeln;
  writeln('Хотите повторить? <Y/N)');
       L2:
           Case Readkey of
           #89: Goto L1;
           #121: Goto L1;
           #78: Exit;
           #110: Exit;
       End;
       Goto L2;
readln;
readln;
end;
end.

Последний раз редактировалось Fromki; 04.04.2011 в 01:31.
Fromki вне форума Ответить с цитированием
Старый 04.04.2011, 17:40   #2
Fromki
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 60
По умолчанию

напишите, пожалуйста, хоть что-нибудь
Fromki вне форума Ответить с цитированием
Старый 04.04.2011, 17:46   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Замени
Цитата:
: array [1..10,1..10] of integer;
на
Код:
matr
где
Код:
type matr= array [1..10,1..10] of integer;
Тогда можно описать процедуру
Код:
procedure otrizatelnye(m:matr);
var i,j,cnt,summ:integer;
begin cnt:=0;summ:=0;
 for i:=1 to 10 do begin
  for j:=1 to 10 do begin
    if m[i,j]<0 then begin inc(cnt);summ:=summ+m[i,j];end;
  end;
 end;
 write(cnt:10,summ:10);
end;
Ну и вызывать эту процедуру
Код:
 otrizatelnye(a);
 otrizatelnye(j);
И так для B только с типом real.
Уловил мысль?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.04.2011, 13:46   #4
Fromki
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 60
По умолчанию

Да. спасибо
Fromki вне форума Ответить с цитированием
Старый 11.04.2011, 11:12   #5
Fromki
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 60
По умолчанию

что-то я не заметил,а про функцию?
Fromki вне форума Ответить с цитированием
Старый 11.04.2011, 14:04   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

укажи, для чего её использовать ? для того , что у тебя выделено красным, использовать функцию нецелесообразно, только процедуру
phomm вне форума Ответить с цитированием
Старый 12.04.2011, 13:38   #7
Fromki
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 60
По умолчанию

Ну если для красного не целесообразно, то для черного чего-нибудь, мне без разницы для чего хоть для первого хоть для второго...главное чтобы была функция
Fromki вне форума Ответить с цитированием
Старый 12.04.2011, 15:51   #8
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Как уже было здесь сказано, целесообразно использовать процедуры, НО раз надо функцию, будем использовать её. На мой взгляд, самой простой здесь будет функция умножения суммы отрицательных элементов по столбцу на значение конкретного элемента. Её и опишем:
Код:
 
Function Umnog(ElMatr,ElVekt:Integer):Integer;
Begin
  Umnog:=ElMatr*ElVekt
End;
Где ElMatr - элемент матрицы, а ElVekt - элемент вектора, в котором хранится сумма отрицательных элементов для каждого столбца.
Вызвать функцию нужно так:
Код:
For j:=1 to 5 do
  Begin
    For i:=1 to 5 do
    Begin
      Matr[i,j]:=Umnog(Matr[i,j],Vekt[j]);
      Write(Matr[j,i]:5)
    End;
    Writeln
  End;
Где Matr - исходная матрица, Vekt -вектор для хранения суммы, о которой уже было сказано выше.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 13.04.2011, 00:02   #9
Fromki
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 60
По умолчанию

огромное спасибо!!!
Fromki вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование процедур и функций nelly.nelly Помощь студентам 1 23.02.2011 15:54
Использование процедур и функций Сергей Игоревич Помощь студентам 3 16.02.2011 09:29
Задача с использование процедур и функций gessi Паскаль, Turbo Pascal, PascalABC.NET 4 20.10.2009 17:10
использование процедур и функций! ...Оленька... Паскаль, Turbo Pascal, PascalABC.NET 0 24.12.2008 15:33