Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 13.05.2009, 14:18   #1
Proffy69
 
Регистрация: 31.03.2009
Сообщений: 4
По умолчанию Задача на двумерные массивы (Паскаль)

Задача следующая:

Найти произведение Х=Y(5,3)*Z(3,5) и Q=Z(3,5)*X(5,5) и результаты матрицы X и Q записать в файл a3. Матрица Y вводится из файла a2. Матрица Z вводится из файла a1.
Первый столбец матрицы Y, Второй столбец матрицы Z и четвертый столбец матрицы Х1 умножить на Р, где Р=max (произведение Х[i,j]; произведение Y[i,j]; произведение Z[i,j]). Преобразованные матрицы записать в те же файлы.
Найти произведение ненулевых элементов каждой матрицы. Результаты записать в файл a4


Смог сделать только так:

Код:
uses crt;
var y,z,x:matrix; f:text; Pm:real; i,k:integer;

 procedure enter(name:string; k,j:byte; var Q:mas);
    var fa:text; t,h:byte;
    begin
    assign(fa,name);
      reset(fa);
      for t:=1 to k do
      for h:=1 to j do read(fa, q[t,h]);
      close(fa);
    end;
begin
clrscr;
enter('C:\a1',3,5,z);
for i:=1 to 5 do begin writeln;
for j:=1 to 3 do write(y[i,j]:8:2);
                 end;
readln;
end.



  procedure prv(name:string; k,l:byte; var p,o:mas);
    var i,t,h:byte; x,s:real; r:mas; f:text;
    begin
     assign(f,name);
     append(f);
      for i:=1 to k do begin writeln(f);
      for t:=1 to k do begin
                         s:=0;
                         for h:=1 to l do
                         s:=s+p[i,h]*o[h,t];
                         r[i,t]:=s;
                         write(f,r[i,t]:8:2);
                       end;
                       end;
      writeln(f);
      close(f);
    end;

function pro(n,m:byte; var d:mas):real;
    var i,j:byte; s:real;
    begin
          s:=0;
      for i:=1 to n do
      for j:=1 to m do s:=s+d[i,j];
      pro:=s;
    end;


program mod4;
uses crt;
var P,C,b,c:real;
function Pmax(x,y,z:real):real;
    begin
      Pmax:=x;
      if (x<y)and(z<y) then Pmax:=y;
      if (z>x)and(z>y) then Pmax:=z;
    end;

procedure UMN(name:string; p:real; n,m,h:byte; var x:mas);
    var i,j:byte; f:text; y:real;
    begin
      assign(f,name);
      append(f);
      for i:=1 to n do x[i,m]:=x[i,m]*p;
      writeln(f);
      for i:=1 to n do begin writeln(f);
      for j:=1 to h do write(f,x[i,j]:8:2);
                       end;
      close(f);
    end;

procedure prnot0(name,name1:string; k,n,m,logik:byte);
    var i,j:byte; x,p:real; f,fa:text; q:mas;
    begin
      assign(f,name);
      assign(fa,name1);
      append(f);
      reset(fa);
    if logik=1 then for i:=1 to k do read(fa,x);
    for i:=1 to n do
    for j:=1 to m do read(fa,q[i,j]);
      close(fa);
      p:=1;
      for i:=1 to n do
      for j:=1 to m do if q[i,j]<>0 then p:=p*q[i,j];
      writeln(f,p:8:9);
      close(f);
    end;

Begin
assign(f,'C:\a3');
rewrite(f);
close(f);
assign(f,'C:\a4');
rewrite(f);
close(f);
assign(f,'C:\a2.txt');
rewrite(f);
close(f);
assign(f,'C:\a3.txt');
rewrite(f);
close(f);
assign(f,'C:\a4.txt');
rewrite(f);
close(f);

begin
  enter('C:\a1',5,3,y);
  enter('C:\a2',3,5,z);
  prv('C:\a3',5,3,y,z);
  prv('C:\a3',3,5,z,y);
  writeln('Задача выполнена... для выхода нажмите кл. <Enter>');
  writeln('Результаты работы находятся в файле A3 на диске C:\');
  readln;
  enter('C:\a3',5,5,x);
  Pm:=Pmax(pro(3,5,y),pro(5,3,z), pro(5,5,x));
  umn('C:\a1',pm,3,4,5,z);
  umn('C:\a2',pm,5,1,3,y);
  umn('C:\a3',pm,5,4,5,x);
  writeln('Задача выполнена... для выхода нажмите кл. <Enter>');
  writeln('Результаты работы находятся в файлах A1,A2,A3 на диске C:\');
  readln;
  prnot0('C:\a4','C:\a1',0,3,5,0);
  prnot0('C:\a4','C:\a2',0,5,3,0);
  prnot0('C:\a4','C:\a1',15,3,5,1);
  prnot0('C:\a4','C:\a2',15,5,3,1);
  prnot0('C:\a4','C:\a3',0,5,5,0);
  prnot0('C:\a4','C:\a3',9,3,3,1);
  prnot0('C:\a4','C:\a3',25,5,5,1);
  writeln('Задача выполнена... для выхода нажмите кл. <Enter>');
  writeln('Результаты работы находятся в файле A4 на диске C:\');
  readln;
  end;

Не могли бы Вы помочь и исправить ошибки? Был бы очень Вам благодарен!
Proffy69 вне форума Ответить с цитированием
Старый 13.05.2009, 23:12   #2
Proffy69
 
Регистрация: 31.03.2009
Сообщений: 4
По умолчанию

Ах да, еще хотел спросить, что за ошибка такая Type Mismatch? Просто в вышенаписанной проге именно эта ошибка и появляется. И что с ней делать я не знаю.
Proffy69 вне форума Ответить с цитированием
Старый 17.05.2009, 19:01   #3
depo111
Пользователь
 
Регистрация: 13.04.2009
Сообщений: 10
По умолчанию

Помите доделать програмку дана матрица размера А(5*5) нужно заменить в строке элементы нулями которые лежат левее наибольшего(максимального) в строке к примеру вводим первую строку(на примере первой строки) 1 3 7 2 7
а результат должен быть такой 0 0 7 2 7 я так думаю тут нужно найти минимальный индекс j - столбца и присвоить ему max но почемуто не получается
#include <stdio.h>
#include <conio.h>
#define N 5
void main()
{clrscr();
int A[N][N],i,j,max,m,h,l=0;
FILE *fp;
fp=fopen("lab3.txt", "w");
for (i=0;i<N;i++)
for (j=0;j<N;j++)
{
printf ("Vvedite A[%d][%d]",i+1,j+1);
scanf ("%d", &A[i][j]);
}
clrscr();
printf ("icxodnaya matrica\n");
fprintf (fp,"icxodnaya matrica\n");
for (i=0;i<N;i++)
{
for (j=0;j<N;j++)
{
printf ("%d ",A[i][j]);
fprintf(fp,"%5d", A[i][j]);
}

printf("\n");
fprintf(fp,"\n");
}
printf("\n");
for (i=0;i<N;i++)
{ max=A[i][0];
for (j=0;j<N;j++)
if (A[i][j]>=max) max=A[i][j];
printf("Max %d ctroki %d\n",i+1,max);
fprintf(fp,"Max %d ctroki %d\n",i+1,max);
for (h=0;h<N;h++)
if (A[i][h]==max) l=h;
for (m=0;m<l;m++)
if (A[i][m]!=max) A[i][m]=0;
}
printf("\n");
printf ("Rezultat raboti programmi\n");
fprintf (fp,"Rezultat raboti programmi\n");
for (i=0;i<N;i++)
{
for (j=0;j<N;j++)
{ printf ("%d ",A[i][j]);
fprintf (fp,"%5d ",A[i][j]);
}
printf("\n");
fprintf(fp,"\n");
}
fclose(fp);
getch();
}
depo111 вне форума Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерные массивы. Паскаль deceiver Помощь студентам 4 11.03.2009 19:28
Именно тот паскаль... Двумерные массивы Сеня Помощь студентам 2 12.02.2009 21:32
Задача на двумерные массивы N1R0 Общие вопросы C/C++ 12 21.12.2008 21:41