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

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Задание с двумерными массивами C++ (http://www.tehnari.ru/f41/t96066/)

Vasilisk 29.04.2014 18:24

Задание с двумерными массивами C++
 
1) Вычислить сумму элементов по строкам
2) Вычислить произведение всех положительных элементов
3) Упорядочить строки так чтобы суммы по строкам возрастали от первой строки к последней.

Я пока сделал такое:
Код:

#include <iostream.h>
#include <stdio.h>
#include <conio.h>

void main()
{
int i, n, m, j;
double A[10][10], sum, proiz;

m=4;
n=5;

A[1][1]=-9.6; A[1][2]=2.5; A[1][3]=5.4; A[1][4]=-9.9; A[1][5]=1.7;
A[2][1]=-7.5; A[2][2]=-7.6; A[2][3]=8.5; A[2][4]=8.8; A[2][5]=1.1;
A[3][1]=9.2; A[3][2]=-3.9; A[3][3]=2.1; A[3][4]=2.2; A[3][5]=4.5;
A[4][1]=9.4; A[4][2]=7.3; A[4][3]=-4.5; A[4][4]=4.3; A[4][5]=-7.5;

cout<<endl<<endl<<endl;
cout<<"  Matrix before"<<endl<<endl;
for (i=1; i<=m; i++)
        {
  printf("  ");
  for (j=1; j<=n; j++)
          printf("%3.1f  ",A[i][j]);
  printf("\n");
  }

cout<<endl<<endl<<endl;
cout<<"  Matrix Sum"<<endl<<endl;


sum=0;
for(i=0; i<m; i++)
        {

          for(j=0; j<n; j++)
        {
                sum+=A[i][j];
        }
            cout<<"Sum "<<sum<<" ";
      sum=0;
      cout<<endl;

        }

1) задание считает не верно, да еще и первое значение "NАN" выдает
2) Все работает
3) 0_0 получается надо пузырьковым методом сделать, что бы считались суммы строк и в зависимости от результата, менялись строки местами tehno035

Vasilisk 29.04.2014 20:06

1) исправил, тупые ошибки (

Vasilisk 29.04.2014 23:16

Все, я в ступоре, SOS!!!

Vladimir_S 30.04.2014 09:59

Цитата:

Сообщение от Vasilisk (Сообщение 1028631)
1) исправил, тупые ошибки (

Антон, ну так покажи, что наисправлял! Пока я вижу явную путаницу с индексацией матрицы: ввод сделан не на сишный, а на паскалевский манер: индексация с 1, в то время как циклы построены, как положено в СИ, т.е. в предположении индексации с 0.
Попробуй исправить так. Вместо
Код:

A[1][1]=-9.6; A[1][2]= 2.5; A[1][3]= 5.4; A[1][4]=-9.9; A[1][5]= 1.7;
A[2][1]=-7.5; A[2][2]=-7.6; A[2][3]= 8.5; A[2][4]= 8.8; A[2][5]= 1.1;
A[3][1]= 9.2; A[3][2]=-3.9; A[3][3]= 2.1; A[3][4]= 2.2; A[3][5]= 4.5;
A[4][1]= 9.4; A[4][2]= 7.3; A[4][3]=-4.5; A[4][4]= 4.3; A[4][5]=-7.5;

запиши
Код:

A[0][0]=-9.6; A[0][1]= 2.5; A[0][2]= 5.4; A[0][3]=-9.9; A[0][4]= 1.7;
A[1][0]=-7.5; A[1][1]=-7.6; A[1][2]= 8.5; A[1][3]= 8.8; A[1][4]= 1.1;
A[2][0]= 9.2; A[2][1]=-3.9; A[2][2]= 2.1; A[2][3]= 2.2; A[2][4]= 4.5;
A[3][0]= 9.4; A[3][1]= 7.3; A[3][2]=-4.5; A[3][3]= 4.3; A[3][4]=-7.5;

Циклы оставь, как есть.

Vasilisk 30.04.2014 11:38

Код:

for(i=0; i<m; i++)
        {

          for(j=0; j<n; j++)

Забыл "=" поставить, и не учитывались одна строка и один столбец. И
Код:

double A[10][10]
заменил на "double A[5][4]", не знаю, имеет ли это смысл. Что касается индексации, так тут точно нет разницы, я везде пропускаю нулевой столбец и строку.
А вот с третьем заданием... Вообще не понимаю как это реализовать.

Vladimir_S 30.04.2014 12:18

Цитата:

Сообщение от Vasilisk (Сообщение 1028798)
Что касается индексации, так тут точно нет разницы, я везде пропускаю нулевой столбец и строку.

Пожалуйста, можно и так, но тогда никаких
Цитата:

Сообщение от Vasilisk (Сообщение 1028798)
Забыл "=" поставить


Vladimir_S 30.04.2014 14:12

Цитата:

Сообщение от Vasilisk (Сообщение 1028798)
А вот с третьем заданием... Вообще не понимаю как это реализовать.

А в чем конкретно трудности?

Vasilisk 30.04.2014 14:17

Не хватает понимания процесса, что бы написать такое (

Vladimir_S 30.04.2014 14:32

Цитата:

Сообщение от Vasilisk (Сообщение 1028839)
Не хватает понимания процесса, что бы написать такое (

К сожалению, написать код не могу - на С не программирую, а вот с пониманием процесса помочь попытаюсь.
Прежде всего - сюда: http://www.tehnari.ru/f41/t72821/
Там, правда, Паскаль, но код такой примитивный, что разберешься.
Разница в том, что в твоём случае надо сравнивать суммы строк, а переставлять сами строки, что, по-моему, несложно.

Vasilisk 30.04.2014 15:38

Вот такую бредятину я написал:
Код:

for (i=1; i<=m-1; i++)
{
        for (j=1; m-i; j++)
                {
          if (for(j=1; j<=n; j++) sum+=A[i][j]; > for(j=1; j<=n; j++) sum+=A[i+1][j];)

              for (k=0; k<=m; k++)
                          {
                            q=A[i][k];
                A[i][k]=A[i+][k];
                            A[i+1][k]=q;
                          }
                }
}



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

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