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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2011, 13:36   #1
Dean
Пользователь
 
Регистрация: 10.02.2011
Сообщений: 29
По умолчанию матрицы. паскаль

добрый день, уважаемые программисты! могу я к вам обратиться с просьбой решить одну задачку? сам ничего в ней понять не могу, а решать-то надо...
Дана квадратная матрица А(4,4).За один просмотр элементов матрицы А(4,4) сформировать вектор С(4), каждый j-й элемент которого равен произведению элеметов j-го столбца исходной матрицы, и вектор D(4), каждый j-й элемент которого равен сумме соответствующей строки матрицы А.
Dean вне форума Ответить с цитированием
Старый 20.02.2011, 17:57   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

http://programmersforum.ru/showthread.php?t=34061
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 20.02.2011, 20:16   #3
Dean
Пользователь
 
Регистрация: 10.02.2011
Сообщений: 29
По умолчанию

не могли бы вы исправить программку, чтобы матрица заполнялась нормально? У меня она почему-то заполняется в столбик
Код:
program My2;
var
i,j,max,min:integer;
a:array [1..5,1..3] of integer;
begin
writeln('Заполните матрицу');
for i:=1 to 5 do begin
for j:=1 to 3 do
read(a[i,j]);
end;
max:=0;
for i:=1 to 5 do begin
for j:=1 to 3 do
if a[i,j]>max then max:=a[i,j];
end;
min:=max;
for i:=1 to 5 do
begin
for j:=1 to 3 do
if a[i,j]<min then min:=a[i,j];
end;
begin
writeln('max=',max);
writeln('min=',min);
end;
end.

Последний раз редактировалось Stilet; 20.02.2011 в 20:39.
Dean вне форума Ответить с цитированием
Старый 20.02.2011, 21:42   #4
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

Вот, написал свой вариант. Вам должен подойти он:
Код:
const
   N = 4;
var	
   i,j:integer;
   a:array [1..N,1..N] of integer;
   d:array [1..N] of integer = (0,0,0,0);
   c:array [1..N] of integer = (1,1,1,1);
begin
   randomize;
   writeln('Исходная матрица ' ,N,'x',N, ':');
   for i:=1 to N do
   begin
      j:=1;
      while j<=N do
      begin
         a[i,j]:=random(9)+1;
	 write(a[i,j]:3);
	 d[i]:=d[i] + a[i,j];
	 c[j]:=c[j] * a[i,j];
	 inc(j);
      end;
      writeln;   
   end;
   writeln('Вектор D (сумма по строкам):');
   for i:=1 to N do
      writeln('d[',i,'] = ' ,d[i]);
   writeln(#10 + 'Вектор C (произведение по столбцам):');
   for i:=1 to N do
      writeln('c[',i,'] = ' , c[i]);
end.

Последний раз редактировалось tools; 20.02.2011 в 22:25.
tools вне форума Ответить с цитированием
Старый 20.02.2011, 22:11   #5
Dean
Пользователь
 
Регистрация: 10.02.2011
Сообщений: 29
По умолчанию

произведение по столбцам считает неправильно. И да, программа, которую я выложил в своем предыдущем посте, не относится к этой задаче, она совсем другой задачи касается, я имел ввиду в ней ошибку исправить, если нетрудно
Dean вне форума Ответить с цитированием
Старый 20.02.2011, 22:15   #6
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

В моем варианте неправильно считает по столбцам? Я проверил сейчас - все подсчеты верными там выходят.
tools вне форума Ответить с цитированием
Старый 21.02.2011, 11:30   #7
Dean
Пользователь
 
Регистрация: 10.02.2011
Сообщений: 29
По умолчанию

Цитата:
Сообщение от tools Посмотреть сообщение
Код:
   d:array [1..N] of integer = (0,0,0,0);
   c:array [1..N] of integer = (1,1,1,1);
в этих двух строчках Паскаль требует убрать цифры с ставить точку с запятой сразу после integer. я убираю, компилирую, но произведение он не считает, а выдает 4 нуля. Не знаю, в чем дело.
Dean вне форума Ответить с цитированием
Старый 21.02.2011, 15:04   #8
CaN9^^
Пользователь
 
Регистрация: 21.02.2011
Сообщений: 10
По умолчанию

Здраствуйте! у меня 2 кода написанны но не работают помогите сделать отладку!плиз)
вот 1 задача:вход 2 квадратные матрицы выход 3-я -результат действия + или *, знак должен выбрать пользователь.ввод матриц тоже с клавы)
вот кодrogram lab1pr1;
const
Max=10;
type
Tm=array[1..Max, 1..Max] of integer;
var
matr1,matr2:Tm;
resmatr:Tm;
n,m:integer;
action:char;

procedure ra3mermatr(var x,y:integer);
begin {строки}
repeat
write('введите кооличество строк матрицы'(1..',Max,')');
readln(x);
if(x<1) then
writeln('*не может быть отрицательным');
if (x>Max) then
writeln('не может превышать 10');
until (x>0)and(x<Max);
{столбцы}
repeat
write('введите колличество столбцов матриц (1..',Max,')');
readln(y);
if (y<1) then
writeln('не может быть <1!');
if (y>Max) then
writeln('*не должно превышать 10');
until (x>0)and(x<=Max);
end;

procedure EnterMatr(x,y:integer; var M:Tm);
var
i,j:integer;
begin
writeln('введите элементы матрицы:');
for i:=1 to x do
for j:=1 to y do
Begin
writeln('M[',i,',',j,']=');
readln(M[i,j]);
end;
end;

procedure BblBod(x,y:integer;M:Tm);
var
i,j:integer;
begin
for i:=1 to x do
begin
for j:=1 to y do
write(M[i,j]);
writeln;
end;
end;
procedure summatr(m1,m2:Tm; var res:Tm; n,m:integer);
var
i,j:integer;
begin
for i:=1 to n do
for j:=1 to m do
res[i,j]:=m1[i,j]+m2[i,j];
end;
procedure myltmatr(m1,m2:Tm; var res:Tm; n,m:integer);
var
i,j,k:integer;
begin
for i:=1 to m do
for j:=1 to m do
begin
res[i,j]:=0;
for k:=1 to n do
res[i,j]:=m1[i,k]+m2[k,j];
end;
end;

begin
ra3mermatr(n,m);
writeln('введите элементы 1 матрицы:');
EnterMatr(n,m,matr1);
writeln('введите элементы 2 матрицы:');
EnterMatr(n,m,matr2);
writeln('1-я исходная матрица:');
BblBod(n,m,matr1);
writeln('2-я исходная матрица*:');
BblBod(n,m,matr2);
writeln('выберите действие+) или (*):');
readln(action);
if (action='+')then
begin
summatr(matr1,matr2,resmatr);
output(resmatr);
end;
if (action='*') then
begin
myltmatr(matr1,matr2,resmtr);
output(resmatr);
end;
summatr(matr1,matr2,resmatr,n,m);
writeln('результат:');
BblBod(n,m,resmatr);
myltmatr(matr1,matr2,resmatr,n,m);
writeln('результат:');
BblBod(n,m,resmatr);
readln;
end.
вообщем я тут не могу сделать чтобы знак пользователь выбирал...помогите)
CaN9^^ вне форума Ответить с цитированием
Старый 21.02.2011, 15:05   #9
CaN9^^
Пользователь
 
Регистрация: 21.02.2011
Сообщений: 10
По умолчанию

Здраствуйте! у меня 2 кода написанны но не работают помогите сделать отладку!плиз)
вот 1 задача:вход 2 квадратные матрицы выход 3-я -результат действия + или *, знак должен выбрать пользователь.ввод матриц тоже с клавы)
вот кодrogram lab1pr1;
const
Max=10;
type
Tm=array[1..Max, 1..Max] of integer;
var
matr1,matr2:Tm;
resmatr:Tm;
n,m:integer;
action:char;

procedure ra3mermatr(var x,y:integer);
begin {строки}
repeat
write('введите кооличество строк матрицы'(1..',Max,')');
readln(x);
if(x<1) then
writeln('*не может быть отрицательным');
if (x>Max) then
writeln('не может превышать 10');
until (x>0)and(x<Max);
{столбцы}
repeat
write('введите колличество столбцов матриц (1..',Max,')');
readln(y);
if (y<1) then
writeln('не может быть <1!');
if (y>Max) then
writeln('*не должно превышать 10');
until (x>0)and(x<=Max);
end;

procedure EnterMatr(x,y:integer; var M:Tm);
var
i,j:integer;
begin
writeln('введите элементы матрицы:');
for i:=1 to x do
for j:=1 to y do
Begin
writeln('M[',i,',',j,']=');
readln(M[i,j]);
end;
end;

procedure BblBod(x,y:integer;M:Tm);
var
i,j:integer;
begin
for i:=1 to x do
begin
for j:=1 to y do
write(M[i,j]);
writeln;
end;
end;
procedure summatr(m1,m2:Tm; var res:Tm; n,m:integer);
var
i,j:integer;
begin
for i:=1 to n do
for j:=1 to m do
res[i,j]:=m1[i,j]+m2[i,j];
end;
procedure myltmatr(m1,m2:Tm; var res:Tm; n,m:integer);
var
i,j,k:integer;
begin
for i:=1 to m do
for j:=1 to m do
begin
res[i,j]:=0;
for k:=1 to n do
res[i,j]:=m1[i,k]+m2[k,j];
end;
end;

begin
ra3mermatr(n,m);
writeln('введите элементы 1 матрицы:');
EnterMatr(n,m,matr1);
writeln('введите элементы 2 матрицы:');
EnterMatr(n,m,matr2);
writeln('1-я исходная матрица:');
BblBod(n,m,matr1);
writeln('2-я исходная матрица*:');
BblBod(n,m,matr2);
writeln('выберите действие+) или (*):');
readln(action);
if (action='+')then
begin
summatr(matr1,matr2,resmatr);
output(resmatr);
end;
if (action='*') then
begin
myltmatr(matr1,matr2,resmtr);
output(resmatr);
end;
summatr(matr1,matr2,resmatr,n,m);
writeln('результат:');
BblBod(n,m,resmatr);
myltmatr(matr1,matr2,resmatr,n,m);
writeln('результат:');
BblBod(n,m,resmatr);
readln;
end.
вообщем я тут не могу сделать чтобы знак пользователь выбирал...помогите)
CaN9^^ вне форума Ответить с цитированием
Старый 21.02.2011, 15:09   #10
CaN9^^
Пользователь
 
Регистрация: 21.02.2011
Сообщений: 10
По умолчанию

а вот 2 задача:Во входном файле code.txt (файл необходимо создать самостоятельно) записана матрица размером N х N (N – нечетное число). В файл decode.txt необходимо вывести строку, состоящую из элементов матрицы, полученную при обходе матрицы по спирали (начиная с первого элемента первой строки).
вот мой код:
program lab1pr2;
const
n=5;
type
TMatr=array[1..n,1..n] of integer;
var
Matr:TMatr;
f:text;
i,j,p:integer;
begin
assign(f,'Code.txt');
Reset(f);
for i:=1 to n do
begin
for j:=1 to n do read(f,Matr[i,j]);
end;
readln(f);
end;
close(f);
assign(f,'decode.txt');
rewrite(f);
for p:=1 to (n+1) div 2 do
begin
for j:=p to n-p+1 do write(Matr[p,j]:4);
for i:=p+1 to n-p+1 do write(Matr[i,n-p+1]:4);
for j:=n-p downto p do write (Matr[n-p+1,j]:4);
for i:=n-p downto p+1 do write(Matr[i,p]:4);
end;
close(f);
readln;
end.
не понимаю что не так... и если кто может помогите сделать её более универсалинее)
P.S в первой задаче ещё помогите сделать её не прямоугольной а квадратной)
ВСЕМ ЗАРАНЕЕ СПАСИБО!!!!
CaN9^^ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль! Матрицы! Yelisey Паскаль, Turbo Pascal, PascalABC.NET 6 13.02.2011 20:01
Матрицы (Паскаль) finito_solo Помощь студентам 5 19.12.2010 19:59
Паскаль Матрицы Таня.Ку Помощь студентам 2 17.02.2010 17:04
матрицы паскаль Анжелика1988 Помощь студентам 2 03.11.2009 13:21
Матрицы паскаль Анжелика1988 Помощь студентам 2 02.11.2009 15:37