Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
 Аватар для Сергей_freeze
6 / 6 / 1
Регистрация: 24.12.2011
Сообщений: 352

Определить минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы

14.06.2013, 10:04. Показов 4205. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
дана целочисленная квалратная матрица:задается с экрана либо генерируется в пределах от -20 до 20. определить минимум среди сумм модулей элементов диагоналей,параллельных побочной диагонали матрицы.

Добавлено через 19 минут
есть на паскале код. кто может на си сделать? сегодня сдавать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.06.2013, 10:04
Ответы с готовыми решениями:

Минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы
Ребят, программа работает, проверьте только на чистоту кода, пожалуйста Дана целочисленная квадратная матрица. Определить: 1) сумму...

Определить минимум среди сумм модулей элементов диагоналей параллельных побочной диагонали
Дана целочисленная квадратная матрица. Определить: минимум среди сумм модулей элементов диагоналей параллельных побочной диагонали матрицы....

Найти минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы
Код программы,который должен вычислять минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы, но в ней...

6
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
14.06.2013, 10:07
Цитата Сообщение от Сергей_freeze Посмотреть сообщение
есть на паскале код.
Выкладывайте все что есть. Вдруг там все не так страшно и кому-нибудь это окажется по зубам.
1
 Аватар для Сергей_freeze
6 / 6 / 1
Регистрация: 24.12.2011
Сообщений: 352
14.06.2013, 21:12  [ТС]
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
usescrt;
const n = 10;
Varmm :array[1..n,1..n] of integer;
i, j, SumAbs : integer;
MinSum : Word;
Begin
ClrScr;
 
WriteLn('Исходнаяматрица:');
Randomize;
  For i:=1 to n do
begin
      For j:=1 to n do
begin
mm[i,j]:=Random(20);
          If Random(10)<5 then mm[i,j]:=-mm[i,j];
Write(mm[i,j]:4);
end;
WriteLn;
end;
MinSum:=65535;
WriteLn('Суммымодулейэлементовдиагоналейвышепобочной');
For i:=n-1 downto 1 do
begin
SumAbs:=0;
      For j:=1 to i do
SumAbs:=SumAbs+Abs(mm[j,i-j+1]);
Write(SumAbs:4);
      If MinSum>SumAbs then MinSum:=SumAbs;
end;
WriteLn;
WriteLn('Суммы модулей элементов диагоналей ниже побочной');
For i:=2 to n do
begin
SumAbs:=0;
      For j:=1 to n+1-i do
SumAbs:=SumAbs+Abs(mm[i-1+j,n+1-j]);
Write(SumAbs:4);
      If MinSum>SumAbs then MinSum:=SumAbs;
end;
WriteLn;
WriteLn('Минимальнаясумма:',MinSum:4);
ReadLn;
End
Добавлено через 1 час 16 минут
как вообще это на си написать?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,028
Записей в блоге: 1
14.06.2013, 21:17
Цитата Сообщение от Сергей_freeze Посмотреть сообщение
как вообще это на си написать?
так Си или Си++?
0
 Аватар для Сергей_freeze
6 / 6 / 1
Регистрация: 24.12.2011
Сообщений: 352
17.06.2013, 07:14  [ТС]
на С++
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
17.06.2013, 10:40
Сломал половину мозга над заданием, и как понял требуется найти две диагонали параллельные побочной и сравнить у кого сумма элементов больше, да?
Вот, если актуально еще. Универсальным алгоритм не получился: для размерностей матрицы два на два и три на три считает только с помощью костыля (см. crutch).
А так, в точности ваш паскалевский код, на тупую переведенный, подправлены переносы строк при выводе и пофиксен сам алгоритм поиска элементов диагоналей.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream.h>
 
int main()
{
//usescrt;
const int n = 4; //const n = 10;
int mm[n][n]; //Var mm :array[1..n,1..n] of integer;
int i, j, SumAbs; //i, j, SumAbs : integer;
unsigned short int MinSum; //MinSum : Word;
//Begin
system("cls"); //ClrScr;
 
cout << "Исходнаяматрица:" << endl; //WriteLn('Исходнаяматрица:');
randomize(); //Randomize;
  for(i=0; i<n; i++) //For i:=1 to n do
    { //begin
      for(j=0; j<n; j++) //For j:=1 to n do
        { //begin
        mm[i][j] = rand() % 20; //mm[i,j]:=Random(20);
          if(rand()%10 < 5) mm[i][j] *= -1; //If Random(10)<5 then mm[i,j]:=-mm[i,j];
        cout.width(4);
        cout << mm[i][j]; //Write(mm[i,j]:4);
        } //end;
    cout << endl; //WriteLn;
    } //end;
MinSum = 65535; //MinSum:=65535;
cout << "Суммымодулейэлементовдиагоналейвышепобочной" << endl; //WriteLn('Суммымодулейэлементовдиагоналейвышепобочной');
int crutch;
switch(n)
  {
  case(3) : crutch = 1; break;
  case(2) : crutch = 1; break;
  default : crutch = 0;
  }
for(i=n/2-1+crutch; i>0; i--) //For i:=n-1 downto 1 do
  { //begin
  SumAbs = 0; //SumAbs:=0;
    for(j=i; j<n; j++) //For j:=1 to i do
      SumAbs += abs(mm[j-i][n-j-1]); //SumAbs:=SumAbs+Abs(mm[j,i-j+1]);
    cout.width(4);
    cout << SumAbs; //Write(SumAbs:4);
    if(MinSum > SumAbs) MinSum = SumAbs; //If MinSum>SumAbs then MinSum:=SumAbs;
  } //end;
cout << endl; //WriteLn;
cout << "Суммы модулей элементов диагоналей ниже побочной" << endl; //WriteLn('Суммы модулей элементов диагоналей ниже побочной');
for(i=n/2-1+crutch; i>0; i--) //For i:=2 to n do
  { //begin
  SumAbs = 0; //SumAbs:=0;
  for(j=i; j<n; j++) //For j:=1 to n+1-i do
    SumAbs += abs(mm[j-i+1][n-j]); //SumAbs:=SumAbs+Abs(mm[i-1+j,n+1-j]);
  cout.width(4);
  cout << SumAbs; //Write(SumAbs:4);
  if(MinSum > SumAbs) MinSum = SumAbs; //If MinSum>SumAbs then MinSum:=SumAbs;
  } //end;
cout << endl; //WriteLn;
cout << "Минимальнаясумма:" << MinSum; //WriteLn('Минимальнаясумма:',MinSum:4);
cin.ignore(); //ReadLn;
//End
 
return 0;
}
1
 Аватар для Сергей_freeze
6 / 6 / 1
Регистрация: 24.12.2011
Сообщений: 352
17.06.2013, 16:00  [ТС]
спасибо. щас будем исправлять, так как прога еще не компилируется..

Добавлено через 14 минут
сделал под себя! осталось чтоб еще работало....
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <math.h>
#include <windows.h>
#include <conio.h>
char bufRus[256];
char* Rus(const char*text)
{
    CharToOem(text, bufRus);
    return bufRus;
}
int main()
{
    int n,i,j,m,A[50][50],f,S=0,sp1,sp2;
    puts(Rus("Введите число строк и столбцов матрицы:"));
    scanf("%d%d",&m,&n);
    for(i=0; i<m; i++)
        for(j=0; j<n; j++)
        {
            printf(Rus("Введите число A[%d][%d]="), i,j);
            scanf("%d",&A[i][j]);
        }
    puts(Rus("Массив А:"));
    for(i=0; i<m; i++)
    {
        for(j=0; j<n; j++) printf("%6d", A[i][j]);
        puts("\n");
    }
    for(j=0; j<n; j++)
    {
        f=0;
        i=0;
        while(i<m&&f==0)
        {
            if(A[i][j]>0) f=0;
            else f=1;
            i++;
        }
        if(f==0) for(i=0; i<m; i++) S+=A[i][j];
    }
    printf(Rus("Сумма: %d \n"),S);
    j=n-2;
    i=0;
    while(j>=0&&i<m-1)
    {
        sp1+=fabs(A[i][j]);
        j=j-1;
        i++;
    }
    printf("sp1=%d\n",sp1);
    j=n-1;
    i=1;
    while(j>0&&i<m)
    {
        sp2+=fabs(A[i][j]);
        j--;
        i++;
    }
    printf("sp2=%d\n",sp2);
    if(sp1<sp2) printf(Rus("Сумма элементов диагонали (выше побочной) равна %d"),sp1);
    else printf(Rus("Сумма элементов диагонали (ниже побочной) равна %d"),sp2);
    getch();
    return(0);
}
Добавлено через 28 минут
вот что надо найти: возьмем матрицу

3 5 -7
3 2 8
9 1 5

побочная диагональ -7 2 9, параллельные ей пары элементов 5+3=8; 3; 8+1=9; 5. следовательно Минимальный модуль сумм это 3.

Добавлено через 12 минут
посмотрите пожалуйста.,что не так???

Добавлено через 35 минут
или вот еще код.работает. Здесь находит:1) сумму элементов в тех столбцах, которые не содержат отрицательных
элементов;
2) минимум среди сумм модулей элементов диагоналей, параллельных
побочной диагонали матрицы.
мне только 2) нужно. Что убрать??? что лишнее??
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
 
const int k=3;
void sum (int mas[k][k]);
void max(int matrix[k][k]);
 
 
int main(){
        int arr[k][k];
        int i, j;
 
        for ( i = 0; i < k; i++ ){
                for ( j = 0; j < k; j++ ){
                        printf("arr[%d][%d] = ", i+1, j+1);
                        scanf("%d", &arr[i][j]);
                }
        }
 
        printf("\n-----------------------\n");
        for ( i = 0; i < k; i++ )
        for ( j = 0; j < k; j++ )
        printf( ( j < (k-1) ) ? "%d\t" : "%d\n", arr[i][j]);
 
        printf("\n Summa elementov v teh strokah,kotorye ne soderjat otricatelnyh elementov:");
        sum(arr);
        printf("\n \n Minimum sredi summ elementov diagonalej,parallelnyh pobochnoy diagonali matricy: ");
        max(arr);
        fflush(stdin);
        char c=getchar();
        return 0;
}
 
void sum(int mas[k][k])
{
        int i,j,a,sum,n;
        for (i=0;i<k;i++)
        { 
                a=0;
                for (j=0;j<k;j++)
                if (mas[i][j]<0) a++;
                if (a==0) 
                { 
                        sum=0;
                        for (n=0;n<k;n++)
                        sum+=mas[i][n];
                        printf("\n stroka %d: %d",(i+1),sum);
                }
        }
}
int sumDiagonal (int matrix[k][k], int currentDiagonal)
{
    int sum = 0;
    if(currentDiagonal < k)
        for(int i = -1; i != currentDiagonal; ++i)
            sum += matrix[currentDiagonal - i - 1][i + 1];
    else
        for(int i = currentDiagonal - k + 1, j = k; i < k; ++i)
            sum += matrix[--j][i];
    return sum;
}
void max(int matrix[k][k])
{
        int min = sumDiagonal(matrix, 0);
        for(int i = 1, cnt; i < k + k - 1; ++i)
        {
                cnt = sumDiagonal(matrix, i);
                if(cnt < min)
                        min = cnt;
        }
        printf("%d\n",min);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.06.2013, 16:00
Помогаю со студенческими работами здесь

Найти минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы
Доброго времени суток. Помогите создать процедуру, которая найдет минимум среди сумм модулей элементов диагоналей, параллельных побочной...

Найти минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы.
Помогите доделать задачу до конца, пожалуйста :-) Дана целочисленная квадратная матрица. Определить: — сумму элементов в тех...

Опеределить минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы
Дана целочисленная квадратная матрица. Определить: Минимум среди сумм модулей элементов диагоналей параллельных побочной диагонали...

Найти минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы
Дана целочисленная квадратная матрица. Определить: 2) минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали...

Найти минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы
Помогите написать код! Задача: Дана целочисленная квадратная матрица. Определить минимум среди сумм модулей элементов диагоналей,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru