Программирование С Использованием Подпрограмм Общего Вида Типа

  • Автор темы Sergey777
  • Дата начала
S

Sergey777

#1
Дана задача 12.jpg
Помогите перевести из Турбо Паскаля на MS Visual C++
Код на Турбо Паскале:
Код:
const n = 3;
type matr = array [1..n, 1..n] of real; {оем тип: квадратная матрица 3х3}
var a, b, c: matr;
i, j: integer;

procedure Sort (var a: matr); {процедура сортировки диагонали}
var i, j: integer; tmp: real;
begin
for i:=1 to n-1 do {сортировка методом пузырька}
for j:=i+1 to n do
if a[i, i] > a[j, j] then {элементы главной диагонали имеют равные индексы}
begin
tmp:= a[i, i]; {если элемент i,i больше j,j, меняем их местами}
a[i, i]:= a[j, j]; 
a[j, j]:= tmp;
end;
end;

begin
for i:=1 to n do {ввод матрицы а}
for j:=1 to n do
readln (a[i, j]);
for i:=1 to n do {ввод матрицы b}
for j:=1 to n do
readln (b[i, j]);
Sort (a); {сортируем а}
writeln;
for i:=1 to n do {выведем результат сортировки}
begin
for j:=1 to n do
write (a[i,j], ' ');
writeln;
end;
Sort (b); {сортируем b}
for i:=1 to n do {вывод для проверки}
begin
for j:=1 to n do
write (b[i,j], ' ');
writeln;
end;
for i:=1 to n do {складываем поэлементно матрицы а и b}
for j:=1 to n do
c[i,j]:= a[i,j]+b[i,j];
for i:=1 to n do
begin
for j:=1 to n do {выводим матрицу с - результат сложения}
write (c[i,j]);
writeln;
end;
end.
Что вышло у меня (здесь идёт рандомное заполнение двух массивов, далее идёт сортировка по их главным диагоналям по возрастанию элементов):
C++:
#include <iostream>
#include <cstdlib>
#include <ctime>
int main()
{
srand(time(NULL));
const int n=3, m=3;
int a[n][m], b[n][m];
std::cout<<"Before:\n";
for (int i=0; i<n; i++)
{ 
for (int j=0; j<m; j++)
std::cout<<(a[i][j]=rand()%10)<<'\t';
std::cout<<"\n\n";
} 
std::cout<<"-----------------"<<'\n';
for (int i=0; i<n; i++)
{ 
for (int j=0; j<m; j++)
std::cout<<(b[i][j]=rand()%10)<<'\t';
std::cout<<"\n\n";
} 
std::cout<<"After:\n";
for (int i=0; i<n; i++) 
for (int j=0; j<m; j++)
if (i==j)
for (int k=0; k<n; k++) 
for (int l=0; l<m; l++)
if (k==l)
{
if (a[i][j]<a[k][l])
std::swap(a[i][j],a[k][l]);
if (b[i][j]<b[k][l])
std::swap(b[i][j],b[k][l]);
}
for (int i=0; i<n; i++)
{ 
for (int j=0; j<m; j++)
std::cout<<a[i][j]<<'\t';
std::cout<<"\n\n";
}  
std::cout<<"-----------------"<<'\n';
for (int i=0; i<n; i++)
{ 
for (int j=0; j<m; j++)
std::cout<<b[i][j]<<'\t';
std::cout<<"\n\n";
}					  
std::cout<<'\n';
system("pause");
return 0;
}
Ещё код (здесь идёт ручное заполнение массивов, а точнее делаем такие же массивы как в задании, далее идёт суммирование элементов массива А (потом массива Б), потом сумму элементов массивов А и Б складываем):
C++:
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
float sum(float**x,const int n,const int m);
int n,m,n1,m1;
int main()
{
int i,j;
float**a,**b;
double x1,x2,x;


cout<<"Kol-vo strok matrici A n=";
cin>>n;
cout<<"Kol-vo stolbcov matrici A m=";
cin>>m;
a=new float*[n];
for(i=0;i<n;i++)
a[i]=new float[m];
cout<<"\nVvedi elementi matrici A\n";
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>a[i][j];
cout<<"\nSformirovannaya Matrica A\n";
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
cout<<setw(5)<<a[i][j]<<" ";
cout<<"\n";
}


cout<<"\nKol-vo strok matrici B n1=";
cin>>n1;
cout<<"Kol-vo stolbcov matrici B m1=";
cin>>m1;
b=new float*[n1];
for(i=0;i<n1;i++)
b[i]=new float[m1];
cout<<"\nVvedi elementi matrici B\n";
for(i=0;i<n1;i++)
for(j=0;j<m1;j++)
cin>>b[i][j];
cout<<"\nSformirovannaya Matrica B\n";
for(i=0; i<n1; i++)
{
for(j=0; j<m1; j++)
cout<<setw(5)<<b[i][j]<<" ";
cout<<"\n";
}

x1=sum(a,n,m);
cout<<"\nSumma elementov matrici A ravna "<<x1;	
x2=sum(b,n1,m1);
cout<<"\nSumma elementov matrici B ravna "<<x2;

cout<<"\n";
x=x1+x2;
cout<<"\nSumma matric A B ravna "<<x;
cout<<"\n";
return 0;
}
float sum(float**x,const int n,const int m)
{
int i,j;
float s;
s=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
s=s+x[i][j];
return s;
}
Совсем запутался (изучаю только второй месяц MS Visual C++, как и само программирование), помогите связать коды на С++, чтобы расставить в порядке возрастания элементы в главных диагоналях каждой матрицы, затем A и B сложить, потом расстановку в порядке возрастания элементов оформить в виде подпрограммы. Или же перевести код на Турбо Паскале на MS Visual C++.
 

Вложения

  • 30.4 КБ Просмотры: 127