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

Тема в разделе "MS Visual C++", создана пользователем Sergey777, 9 дек 2012.

  1. Sergey777

    Sergey777 Гость

    Дана задача 12.jpg
    Помогите перевести из Турбо Паскаля на MS Visual C++
    Код на Турбо Паскале:
    Код (Delphi):
    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++.
     
Загрузка...

Поделиться этой страницей