Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Матрица. Функция.

60K
16 ноября 2010 года
C++oder
14 / / 04.10.2010
Здравствуйте!
У меня такая задача на Pascal:
Сформировать две квадратные матрицы {aij}n,m , {bij}k,l , где i<=(n,k), j<=(m,l), вводом элементов с клавиатуры. Фактическое число строк (n,k) и столбцов (m,l) каждой матрицы вводить с клавиатуры. Создать функцию, определяющую сумму элементов строки матрицы, имеющей первый минимальный элемент. Вывести на экран матрицы, сумму матриц и максимальную из них.

Не могли бы мне разжевать, что тут требуется? Если сложить две матрицы и вывести третью, то что делать с этой функцией? Заранее спасибо =)
14K
16 ноября 2010 года
Fenja
138 / / 20.03.2009
Цитата:
то что делать с этой функцией?


Писать.
З.Ы. Лучше всего - спросить у препода.

29K
16 ноября 2010 года
Енот_в_Засаде
224 / / 09.11.2010
На паскале никогда не программировал =( На С++ это примерно так выглядит:
Код:
#include <iostream>
#include <conio.h>
#include <locale.h>
#include <iomanip>


using namespace std;

int main()
{
    setlocale(LC_ALL, "Russian");

    void Show(int n,int m, int **a);
    void Sum(int n, int m, int **a);
    void matrixSum(int n, int m, int k, int l,int **a, int **b);
    void sMatrix(int n, int m, int k, int l,int **a, int **b);

   
    int n, m;
    int i, j;


    cout<<"Введите размерность первой матрицы:\n";
    cout<<"Введите n\n";
    cin>>n;
    cout<<"Введите m\n";
    cin>>m;
    int **mas1 = new int* [n];
    cout<<"Заполните матрицу:\n";
    for (i=0; i<n;i++)
    {
        mas1=new int[m];
        for (j=0;j<m;j++)
        {
             cin>>mas1[j];
        }
    }

    int k, l;
    cout<<"Введите размерность второй матрицы:\n";
    cout<<"Введите k\n";
    cin>>k;
    cout<<"Введите l\n";
    cin>>l;

    int **mas2 = new int* [k];
    cout<<"Заполните матрицу:\n";
    for (i=0; i<k;i++)
    {
        mas2=new int[l];
        for (j=0;j<l;j++)
        {
             cin>>mas2[j];
        }
    }
   
    cout<<"Первая матрица: \n";
    Show(n,m,mas1);
    cout<<"Вторая матрица: \n";
    Show(k,l,mas2);
    cout<<"Первая матрица: \n";
    Sum(n,m,mas1);
    cout<<"Вторая матрица: \n";
    Sum(k,l,mas2);
    matrixSum(n, m, k, l, mas1, mas2);
    sMatrix(n, m, k, l, mas1, mas2);
    getch();
}

// ф-ция вывода матриц
void Show(int n, int m, int **a)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
            cout<<setw(5)<<*(*(a+i)+j)<<ends;
        cout<<endl;
    }
}
// сумма элементов строки
void Sum(int n, int m, int **a)
{
    int sum=0;
    int min;
    int index;
    int i,j;
//определение минимального элемента строки
    for (i=0; i<n; i++)
    {
        min=a[0];
        index=0;
        sum=0;

        for (j=0; j<m;j++)
        {
            if (a[j]<min)
            {
                min = a[j];
                index=j;
            }

            if (index==0)
            {
            sum +=a[j];
           
            }

        }
        cout<<"Cтрока: "<<i<<" Cумма: "<<sum<<endl;
       
       
    }

}
// сумма матриц
void matrixSum(int n, int m, int k, int l,int **a, int **b)
    {
        int **sumM = new int* [n];
        if (n==k && m==l)
        {
            for (int i=0; i<n;i++)
            {
                sumM=new int[m];
                for (int j=0; j<m; j++)
                {
                 sumM[j]=a[j]+b[j];
                }
            }
            cout<<"Сумма матриц: \n";
            Show(n,m,sumM);
        }
        else
        {
            cout<<"Нельзя  сложить\n";
        }
       

    }
// сравнение матриц
void sMatrix(int n, int m, int k, int l,int **a, int **b)
{
    int count1=0;
    int count2=0;

    if (n==k && m==l)
    {
        for (int i=0; i<n;i++)
        {
                for (int j=0; j<m; j++)
                {
        if (a[j]>b[j])
            {
            count1++;
            }
        if (a[j]<b[j])
        {
            count2++;
        }


                }
        }

        if (count1==m*n)
            {
                cout<<"Матрица 1 больше\n";
            }

            if (count2==m*n)
            {
                cout<<"Матрица 2 больше\n";
            }
                if (count1!=m*n && count2!=m*n)
                {
                cout<<"Нельзя сравнить\n";
                }
    }
    else
    {
    cout<<"Нельзя сравнить\n";
    }

}

Я так понял твое задание, может этот код тебе как-то поможет=)
+ работает не только с квадратными матрицами =)
60K
16 ноября 2010 года
C++oder
14 / / 04.10.2010
На паскале никогда не программировал =( На С++ это примерно так выглядит:
Код:
#include <iostream>
#include <conio.h>
#include <locale.h>
#include <iomanip>


using namespace std;

int main()
{
    setlocale(LC_ALL, "Russian");

    void Show(int n,int m, int **a);
    void Sum(int n, int m, int **a);
    void matrixSum(int n, int m, int k, int l,int **a, int **b);
    void sMatrix(int n, int m, int k, int l,int **a, int **b);

   
    int n, m;
    int i, j;


    cout<<"Введите размерность первой матрицы:\n";
    cout<<"Введите n\n";
    cin>>n;
    cout<<"Введите m\n";
    cin>>m;
    int **mas1 = new int* [n];
    cout<<"Заполните матрицу:\n";
    for (i=0; i<n;i++)
    {
        mas1=new int[m];
        for (j=0;j<m;j++)
        {
             cin>>mas1[j];
        }
    }

    int k, l;
    cout<<"Введите размерность второй матрицы:\n";
    cout<<"Введите k\n";
    cin>>k;
    cout<<"Введите l\n";
    cin>>l;

    int **mas2 = new int* [k];
    cout<<"Заполните матрицу:\n";
    for (i=0; i<k;i++)
    {
        mas2=new int[l];
        for (j=0;j<l;j++)
        {
             cin>>mas2[j];
        }
    }
   
    cout<<"Первая матрица: \n";
    Show(n,m,mas1);
    cout<<"Вторая матрица: \n";
    Show(k,l,mas2);
    cout<<"Первая матрица: \n";
    Sum(n,m,mas1);
    cout<<"Вторая матрица: \n";
    Sum(k,l,mas2);
    matrixSum(n, m, k, l, mas1, mas2);
    sMatrix(n, m, k, l, mas1, mas2);
    getch();
}

// ф-ция вывода матриц
void Show(int n, int m, int **a)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
            cout<<setw(5)<<*(*(a+i)+j)<<ends;
        cout<<endl;
    }
}
// сумма элементов строки
void Sum(int n, int m, int **a)
{
    int sum=0;
    int min;
    int index;
    int i,j;
//определение минимального элемента строки
    for (i=0; i<n; i++)
    {
        min=a[0];
        index=0;
        sum=0;

        for (j=0; j<m;j++)
        {
            if (a[j]<min)
            {
                min = a[j];
                index=j;
            }

            if (index==0)
            {
            sum +=a[j];
           
            }

        }
        cout<<"Cтрока: "<<i<<" Cумма: "<<sum<<endl;
       
       
    }

}
// сумма матриц
void matrixSum(int n, int m, int k, int l,int **a, int **b)
    {
        int **sumM = new int* [n];
        if (n==k && m==l)
        {
            for (int i=0; i<n;i++)
            {
                sumM=new int[m];
                for (int j=0; j<m; j++)
                {
                 sumM[j]=a[j]+b[j];
                }
            }
            cout<<"Сумма матриц: \n";
            Show(n,m,sumM);
        }
        else
        {
            cout<<"Нельзя  сложить\n";
        }
       

    }
// сравнение матриц
void sMatrix(int n, int m, int k, int l,int **a, int **b)
{
    int count1=0;
    int count2=0;

    if (n==k && m==l)
    {
        for (int i=0; i<n;i++)
        {
                for (int j=0; j<m; j++)
                {
        if (a[j]>b[j])
            {
            count1++;
            }
        if (a[j]<b[j])
        {
            count2++;
        }


                }
        }

        if (count1==m*n)
            {
                cout<<"Матрица 1 больше\n";
            }

            if (count2==m*n)
            {
                cout<<"Матрица 2 больше\n";
            }
                if (count1!=m*n && count2!=m*n)
                {
                cout<<"Нельзя сравнить\n";
                }
    }
    else
    {
    cout<<"Нельзя сравнить\n";
    }

}

Я так понял твое задание, может этот код тебе как-то поможет=)
+ работает не только с квадратными матрицами =)



Спасибо большое! =)

297
17 ноября 2010 года
koodeer
1.2K / / 02.05.2009
Енот_в_Засаде, а где delete'ы?

И чтобы было полное ЦПП - <clocale> вместо <locale.h>
<conio.h> и getch() тоже не место в коде C++.

P.S. переменная l (строчная L) слишком похожа на единицу - лучше не использовать такие имена - тяжелее читать код.
29K
17 ноября 2010 года
Енот_в_Засаде
224 / / 09.11.2010
Цитата:

И чтобы было полное ЦПП - <clocale> вместо <locale.h>
<conio.h> и getch() тоже не место в коде C++.


на С++ практически не пишу, в основном на C#, но спасибо за совет, учту=)

Цитата:

P.S. переменная l (строчная L) слишком похожа на единицу - лучше не использовать такие имена - тяжелее читать код.


просто в задании была эта переменная

29K
17 ноября 2010 года
Енот_в_Засаде
224 / / 09.11.2010
Цитата: C++oder
Спасибо большое! =)


не за что, рад что помог=)

60K
18 ноября 2010 года
C++oder
14 / / 04.10.2010
Блин, не догоняю как функцию сделать чтоб определяла сумму элементов строки матрицы, имеющей первый минимальный элемент :(
Исправьте, пожалуйста, что не так.

Код:

Код:
function sum(var x:mas;row,col:integer):integer;
var s, i,j,min: integer ;
begin
min:=x[1,1];
For i:=1 to row do
For j:=1 to col do
begin
If min>x[i,j] then
begin
min:=x[i,j];
end;
end;
s:=0;
for i:=1 to n do
s:=s+x[i,j];
writeln (s);
end;
29K
18 ноября 2010 года
Енот_в_Засаде
224 / / 09.11.2010
Я так понял, что если в строке матрицы, минимальный элемент этой строки стоит на первом месте, то нужно посчитать сумму элементов этой строки, и так проверить все строки матрицы.
60K
18 ноября 2010 года
C++oder
14 / / 04.10.2010

повторюсь, что паскаль не изучал, но попробуй так



спасибо )) короче прога чет неправильно работает. Гляньте весь код, пожалуйста ))

Код:
program lab5;
uses crt;
const max=10;
type mas=array[1..max,1..max] of integer;
var a,b:mas; n,m,k,l,g,u:integer;

procedure matrixin(var x:mas; row,col:integer);
var i,j:integer;
begin
writeln('Vvod elementov matricy');
for i:=1 to row do begin
writeln('Vvod elementov ',i,' stroki matricy');
for j:=1 to col do
readln(x[i,j]);
end;
end;

procedure matrixout(var x:mas; row,col:integer);
var i,j:integer;
begin
for i:=1 to row do begin
writeln;
for j:=1 to col do
write(x[i,j], ' ');
end;
end;

function sum(var x:mas;row,col:integer):integer;
var s, i,j,min, index: integer ;
begin
For i:=1 to row do
index:=0;
s:=0;
min:= x[i,1];
For j:=1 to col do
begin
If x[i,j]<min then
begin
min:=x[i,j];
index:=j;
end;
If index=0  then
begin
s:=s+x[i,j];
end;
end;
writeln (s);
end;

begin
clrscr;
writeln('Vvedite razmernost matricy A');
readln(n,m);
writeln('Vvedite razmernost matricy B');
readln(k,l);
matrixin(A,n,m);
matrixin(B,k,l);
writeln('*********__MATRIX_A__*********');
matrixout(A,n,m);
writeln;
writeln('*********__MATRIX_B__*********');
matrixout(B,k,l);
writeln;

writeln;
writeln('*********__MATRIX_A*__**********');
matrixout(A,n,m);
writeln;
writeln('*********__MATRIX_B*__**********');
matrixout(B,k,l);
g:=sum(a,n,m);
u:=sum (b,k,l);
if  g > u  then begin
writeln('Naibolshaa matrica A');
end
else begin
writeln('Naibolshaa matrica B');end;
readln;
end.
29K
18 ноября 2010 года
Енот_в_Засаде
224 / / 09.11.2010
Цитата: C++oder
спасибо )) короче прога чет неправильно работает. Гляньте весь код, пожалуйста ))

Код:
program lab5;
uses crt;
const max=10;
type mas=array[1..max,1..max] of integer;
var a,b:mas; n,m,k,l,g,u:integer;

procedure matrixin(var x:mas; row,col:integer);
var i,j:integer;
begin
writeln('Vvod elementov matricy');
for i:=1 to row do begin
writeln('Vvod elementov ',i,' stroki matricy');
for j:=1 to col do
readln(x[i,j]);
end;
end;

procedure matrixout(var x:mas; row,col:integer);
var i,j:integer;
begin
for i:=1 to row do begin
writeln;
for j:=1 to col do
write(x[i,j], ' ');
end;
end;

function sum(var x:mas;row,col:integer):integer;
var s, i,j,min, index: integer ;
begin
For i:=1 to row do
[COLOR="Red"]наверное здесь должен быть begin[/COLOR]
index:=0;
s:=0;
min:= x[i,1];
For j:=1 to col do
begin
If x[i,j]<min then
begin
min:=x[i,j];
index:=j;
end;
If [COLOR="Red"]index=1[/COLOR]  then
begin
s:=s+x[i,j];
end;
end;
writeln (s);
end;

begin
clrscr;
writeln('Vvedite razmernost matricy A');
readln(n,m);
writeln('Vvedite razmernost matricy B');
readln(k,l);
matrixin(A,n,m);
matrixin(B,k,l);
writeln('*********__MATRIX_A__*********');
matrixout(A,n,m);
writeln;
writeln('*********__MATRIX_B__*********');
matrixout(B,k,l);
writeln;

writeln;
writeln('*********__MATRIX_A*__**********');
matrixout(A,n,m);
writeln;
writeln('*********__MATRIX_B*__**********');
matrixout(B,k,l);
[COLOR="Red"]g:=sum(A,n,m);
u:=sum (B,k,l);[/COLOR]
if  g > u  then begin
writeln('Naibolshaa matrica A');
end
else begin
writeln('Naibolshaa matrica B');end;
readln;
end.



я красным выделил, где по моему мнению ошибки (хотя может я ошибаюсь), а так я даж не знаю как помочь =(

 
Код:
g:=sum(A,n,m);
u:=sum (B,k,l);
if  g > u  then begin
writeln('Naibolshaa matrica A');
end
else begin
writeln('Naibolshaa matrica B');end;


Я не совсем понял что ты хотел сделать, function sum - по идее вычисляет сумму элементов строки, если в строке минимальный элемент на первом месте, поэтому
 
Код:
g:=sum(A,n,m);
u:=sum (B,k,l);
- в переменные g и u записывается сумма элементов последней строки в начале которой стоит минимальный элемент этой строки. Например для одной из матриц:
1 2 3 сумма = 6
-4 5 3 сумма = 4
4 2 4 не считаем, т.к. 4 - не минимальный элемент строки
в g запишется 4.
29K
18 ноября 2010 года
Енот_в_Засаде
224 / / 09.11.2010
или ты хочешь сделать например следующее:

матрица 1:
1 2 3 сумма 6
4 2 1 -
0 2 5 сумма 7
g=6+7

матрица 2:
4 2 3 -
1 5 2 сумма 8
1 2 5 сумма 8

u=8+8

а потом сравнивать эти значения?
60K
18 ноября 2010 года
C++oder
14 / / 04.10.2010
или ты хочешь сделать например следующее:

матрица 1:
1 2 3 сумма 6
4 2 1 -
0 2 5 сумма 7
g=6+7

матрица 2:
4 2 3 -
1 5 2 сумма 8
1 2 5 сумма 8

u=8+8

а потом сравнивать эти значения?



насколько я понял задание, то мне надо так:
1. Найти в матрице минимальный элемент, если их несколько, брать первый из них
2. Посчитать сумму элементов этой строки матрицы - где нашелся первый минимальный.
всё это делает функция. А в конце сравнить.

29K
18 ноября 2010 года
Енот_в_Засаде
224 / / 09.11.2010
понял, сейчас попробую сделать
29K
18 ноября 2010 года
Енот_в_Засаде
224 / / 09.11.2010
Вот функция, ищет минимальный элемент матрицы, определяет в какой он строке находиться, и считает сумму элементов в этой строке:

Код:
function sum(var x:mas;row,col:integer):integer;
var s, i,j,min, index: integer ;
begin
s := 0;
index:=0;
min:=x[1,1];
For i:=1 to row do
begin
For j:=1 to col do
begin
If x[i,j]<=min then
begin
min:=x[i,j];
index:=i;
end;
end;
end;
writeln ('element',min);
writeln ('stroka',index);

For i:=1 to row do
begin
For j:=1 to col do
begin
if i=index then
begin
s:=s+x[index, j];
end;
end;
end;
writeln ('summa',s);
end;

вроде работает
60K
19 ноября 2010 года
C++oder
14 / / 04.10.2010

вроде работает



Да, спасибо! =)

60K
19 ноября 2010 года
C++oder
14 / / 04.10.2010
Вот вроде более менее окончательный вариант.

Цитата:
Сформировать две квадратные матрицы {aij}n,m , {bij}k,l , где i<=(n,k), j<=(m,l), вводом элементов с клавиатуры. Фактическое число строк (n,k) и столбцов (m,l) каждой матрицы вводить с клавиатуры. Создать функцию, определяющую сумму элементов строки матрицы, имеющей первый минимальный элемент. Вывести на экран матрицы, сумму матриц и максимальную из них.



Код:
program lab5;
uses crt;
const max=10;
type mas=array[1..max,1..max] of integer;
var a,b:mas; n,m,k,l,s,v,z,g,h:integer;

    procedure matrixin(var x:mas; row,col:integer);
    var i,j:integer;
    begin
    writeln('______VVOD ELEMENTOV______');
    writeln('');
    for i:=1 to row do begin
    writeln('VVOD ELEMENTOV ',i,' STROKI');
    for j:=1 to col do
    readln(x[i,j]);    end;
    end;

    procedure matrixout(var x:mas; row,col:integer);
    var i,j:integer;
    begin
    for i:=1 to row do begin
    writeln;
    for j:=1 to col do
    write(x[i,j], ' ');
    end;
    end;

    procedure zamena(var x:mas; row,col:integer);
    var i:integer;
    begin
    for i:=1 to row do
    if x[i,i]=0 then x[i,i]:=1;
    end;

    function sum(var x:mas;row,col:integer):integer;
    var s, i,j,min, index: integer ;
    begin
    s := 0;
    index:=0;
    min:=x[1,1];
    For i:=1 to row do
    begin
    For j:=1 to col do
    begin
    If x[i,j]<=min then
    begin
    min:=x[i,j];
    index:=i;
    end;
    end;
    end;
    writeln ('min. element - ',min);
    writeln ('stroka - ',index);

    For i:=1 to row do
    begin
    For j:=1 to col do
    begin
    if i=index then
    begin
    s:=s+x[index, j];
    end;
    end;
    end;
    writeln ('summa elementov stroki - ',s);
    h:=s;
    g:=s;
    end;
begin
clrscr;
writeln('VVEDITE RAZMERNOST MATRIX A');
readln(n,m);
writeln('VVEDITE RAZMERNOST MATRIX B');
readln(k,l);
matrixin(A,n,m);
matrixin(B,k,l);
clrscr;
writeln('_____MATRIX_A_INT_____');
matrixout(A,n,m);
writeln ('');
writeln('_____MATRIX_B_INT_____');
matrixout(B,k,l);
writeln ('');
writeln;
writeln('_____MATRIX_A_OUT_____');
matrixout(A,n,m);
writeln('');
sum(a,n,m);
writeln (h);
v:=h;
writeln('_____MATRIX_B_OUT_____');
matrixout(B,k,l);
writeln ('');
sum(b,k,l);
writeln(g);
z:=g;
if v>z then
   begin
   writeln ('max - MATRIX A');
   end
else
    begin
    writeln ('max - MATRIX B');
    end;
readln;
end.


Нормально? =)
29K
19 ноября 2010 года
Енот_в_Засаде
224 / / 09.11.2010
Главное чтоб работало все хорошо=)
60K
20 ноября 2010 года
C++oder
14 / / 04.10.2010
Главное чтоб работало все хорошо=)



вроде хорошо работает =) спасибо =)

64K
05 декабря 2010 года
JuliaR
6 / / 05.12.2010
Сформировать две квадратные матрицы {aij}n,m , {bij}k,l , где i<=(n,k), j<=(m,l), вводом элементов с клавиатуры. Фактическое число строк (n,k) и столбцов (m,l) каждой матрицы вводить с клавиатуры. Посчитать сумму всех элементов матрицы.

есть начало проги,нужно "Посчитать сумму всех элементов матрицы."


program p1;
uses wincrt;
type TArray=Array[1..10,1..10] of real;
var A, B, C, D:TArray; n,k,l,m:Byte; h:char; min, max:real;
procedure InMarth(Var x:TArray; row,col:Byte);
var i,j:Byte;
Begin
Randomize;
For i:=1 to row do begin
For j:=1 to col do begin
X[i,j]:=Random*200-100;
White(x[i,j]:7:2,' ');
End;
Writeln;
End;
End;
begin
Procedure InMarth1 (var:TArray; row,col:Byte);
begin
writeln ('введите кол-во строк - n, столбцов - m');
readln (n,m);
For i:=1 to n do
For j:1 to m do
readln (x[i,j]);
if [[i,j]=min then x[i,j]=max;
if [[i,j]=max then x[i,j]=min;
end;
29K
05 декабря 2010 года
Енот_в_Засаде
224 / / 09.11.2010
Цитата: JuliaR
Сформировать две квадратные матрицы {aij}n,m , {bij}k,l , где i<=(n,k), j<=(m,l), вводом элементов с клавиатуры. Фактическое число строк (n,k) и столбцов (m,l) каждой матрицы вводить с клавиатуры. Посчитать сумму всех элементов матрицы.

есть начало проги,нужно "Посчитать сумму всех элементов матрицы."

program p1;
uses wincrt;
type TArray=Array[1..10,1..10] of real;
var A, B, C, D:TArray; n,k,l,m:Byte; h:char; min, max:real;
procedure InMarth(Var x:TArray; row,col:Byte);
var i,j:Byte;
Begin
Randomize;
For i:=1 to row do begin
For j:=1 to col do begin
X[i,j]:=Random*200-100;
White(x[i,j]:7:2,' ');
End;
Writeln;
End;
End;
begin
Procedure InMarth1 (var:TArray; row,col:Byte);
begin
writeln ('введите кол-во строк - n, столбцов - m');
readln (n,m);
For i:=1 to n do
For j:1 to m do
readln (x[i,j]);
if [[i,j]=min then x[i,j]=max;
if [[i,j]=max then x[i,j]=min;
end;


оформляйте в теги код, а решение примерно такое:

 
Код:
Var sum: integer
sum:=0

For i:=1 to row do begin
For j:=1 to col do begin
sum=sum+x[i,j]
End;
End;

White(sum);
64K
06 декабря 2010 года
JuliaR
6 / / 05.12.2010
оформляйте в теги код, а решение примерно такое:

 
Код:
Var sum: integer
sum:=0

For i:=1 to row do begin
For j:=1 to col do begin
sum=sum+x[i,j]
End;
End;

White(sum);



Большое спасибо)

29K
06 декабря 2010 года
Енот_в_Засаде
224 / / 09.11.2010
Цитата: JuliaR
Большое спасибо)



да не за что)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог