Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите пожалуйста с задачами (http://www.tehnari.ru/f41/t250083/)

АсяЯ 16.11.2016 17:57

Помогите пожалуйста с задачами
 
1.Даны квадратные матрицы А(5,5) и В(5,5). С использованием процедуры вычисления произведения двух матриц найти матрицы С = АхВ и D = ВхА. Вычислить суммы элементов главных диагоналей матриц С и D, напечатать
Переменная цикла for должна описываться в том же блоке, что и цикл for-пишет ошибку

type matr=array[1..5,1..5] of integer;
var A,B,C,D:matr;
i,j,sumC,sumD:integer;
procedure Umn(p:integer;T,R:matr;var H:matr);
var k:byte;
begin
for k:=1 to p do
for j:=1 to p do
begin
H[k,j]:=0;
for i:=1 to p do
begin
H[k,j]:=H[k,j]+T[k,i]*R[i,j];
end;
end;
end;
begin
writeln('Матрица A:');
for i:=1 to 5 do
begin
for j:=1 to 5 do
begin
A[i,j]:=random(10)+1;
write(A[i,j]:3);
end;
writeln;
end;
readln;
writeln('Матрица B:');
for i:=1 to 5 do
begin
for j:=1 to 5 do
begin
B[i,j]:=random(10)+1;
write(B[i,j]:3);
end;
writeln;
end;
readln;
writeln('Матрица C:');
Umn(5,A,B,C);
for i:=1 to 5 do
begin
for j:=1 to 5 do
write(C[i,j]:6);
writeln;
end;
readln;
writeln('Матрица D:');
Umn(5,B,A,D);
for i:=1 to 5 do
begin
for j:=1 to 5 do
write(D[i,j]:6);
writeln;
end;
readln;
sumC:=0;
for i:=1 to 5 do
for j:=1 to 5 do
if i=j then sumC:=sumC+C[i,j];
writeln('Сумма элементов главной диагонали C=',sumC);
sumD:=0;
for i:=1 to 5 do
for j:=1 to 5 do
if i=j then sumD:=sumD+D[i,j];
writeln('Сумма элементов главной диагонали D=',sumD);
readln;
end.
2.Дано натуральное число N. Напечатать строку символов, являющуюся представлением этого числа в 5 системе счисления с использованием процедуры "перевода".
Как в строку сделать?

var
i,c:integer;
value1,value:string;
begin
writeln('Введите число');
Readln(c);
i:=1;
repeat
Str((c mod 5),value1);
insert(value1,value,1);
c:=c div 5;
i:=i*10;
until c div 5=0;
Str(c,value1);
insert(value1,value,1);
Writeln(value);
end.

Vladimir_S 16.11.2016 19:37

Цитата:

Сообщение от АсяЯ (Сообщение 2434926)
Переменная цикла for должна описываться в том же блоке, что и цикл for-пишет ошибку

Ну так и задайте их внутри процедуры! Т.е. вместо
var k:byte;
напишите
var i,j,k:byte;
То, что они повторяют имена внешних переменных - ничего страшного. Хотя лично я стараюсь, просто из соображений наглядности, этого избегать. Но допускается, ошибки нет.

Vladimir_S 17.11.2016 10:16

Цитата:

Сообщение от АсяЯ (Сообщение 2434926)
2.Дано натуральное число N. Напечатать строку символов, являющуюся представлением этого числа в 5 системе счисления с использованием процедуры "перевода". Как в строку сделать?

Например, так:
Код:

Var
 N:integer;
 S:String;

Function Dec2Quin(M:integer):String;
var
 p,D:integer;
 C,SS:String;
begin
 SS:='';
 p:=1;
 repeat
  p:=p*5;
 until (M div p)=0;
 if p>5 then
  repeat
  p:=p div 5;
  D:=M div p;
  Str(D,C);
  SS:=SS+C;
  M:=M mod p;
  until p=5;
 D:=M mod 5;
 Str(D,C);
 SS:=SS+C;
 Dec2Quin:=SS;
end;

Begin
 Repeat
  Write('Enter N (0 to quit) ');
  Readln(N);
  if N>0 then
  begin
    S:=Dec2Quin(N);
    Writeln(S);
  end;
 Until N=0;
End.



Часовой пояс GMT +4, время: 15:45.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.