• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задание с двумерными массивами C++

Vasilisk

Ученик
Почётный участник
Регистрация
16 Май 2010
Сообщения
1,194
Реакции
12
Баллы
0
Задание с двумерными массивами 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
 
1) исправил, тупые ошибки (
 
Все, я в ступоре, SOS!!!
 
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;
Циклы оставь, как есть.
 
Код:
for(i=0; i<m; i++)
	{

   	for(j=0; j<n; j++)
Забыл "=" поставить, и не учитывались одна строка и один столбец. И
Код:
double A[10][10]
заменил на "double A[5][4]", не знаю, имеет ли это смысл. Что касается индексации, так тут точно нет разницы, я везде пропускаю нулевой столбец и строку.
А вот с третьем заданием... Вообще не понимаю как это реализовать.
 
Не хватает понимания процесса, что бы написать такое (
 
Не хватает понимания процесса, что бы написать такое (
К сожалению, написать код не могу - на С не программирую, а вот с пониманием процесса помочь попытаюсь.
Прежде всего - сюда: http://www.tehnari.ru/f41/t72821/
Там, правда, Паскаль, но код такой примитивный, что разберешься.
Разница в том, что в твоём случае надо сравнивать суммы строк, а переставлять сами строки, что, по-моему, несложно.
 
Вот такую бредятину я написал:
Код:
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;
  			}
		}
}
 
Вот такую бредятину я написал:
Ага, причем полнейшую. Просто бессвязный набор значков.
Антон, давай, берись за ум и решай задачу осмысленно. Прежде всего, разберись, как работает метод пузырька, тогда и дело пойдёт.
 
на Си тоже пишу редко. на паскале вот...
это 3 задание...

Код:
const
 n = 5;
 m = 5;

var
 i, j, k: byte;
 sum, tmp: real;
 mas: array[0..n-1, 0..m-1] of real;
 mas_sum: array [0..m-1] of real;

begin
randomize();
writeln('Input mas:');
// do mas
for i:= 0 to n-1 do
 for j:= 0 to m-1 do mas[i, j]:= -10 + random(20);
// show mas, calc row sum and write mas_sum
for i:= 0 to n-1 do
 begin
  sum:= 0;
   for j:= 0 to m-1 do
    begin
     write(mas[i, j]:4:0);
     sum:= sum + mas[i, j];
    end;
  writeln;
  mas_sum[i]:= sum;
 end;
// show mas_sum
writeln('Massive of Sum:');
for i:= 0 to n-1 do write(mas_sum[i]:4:0);
//sort by puzir
for i:= 0 to n-1 do
 for j:= 0 to n-i do
  if mas_sum[j] > mas_sum[j+1] then
   begin
    tmp:= mas_sum[j];
    mas_sum[j]:= mas_sum[j+1];
    mas_sum[j+1]:= tmp;

    // change row
    for k:= 0 to m-1 do
     begin
      tmp:= mas[j, k];
      mas[j, k]:= mas[j+1, k];
      mas[j+1, k]:= tmp;
      end; // for
   end; // if
// show sorted mas
writeln;
writeln('Output mas:');
for i:= 0 to n-1 do
 begin
  for j:= 0 to m-1 do write(mas[i, j]:4:0);
 writeln;
 end;
// show sotred mas_sum
writeln('Massive of Sum:');
for i:= 0 to n-1 do write(mas_sum[i]:5:0);
readln;
end.
 
Результат:
Код:
#include <iostream>
#include <stdio.h>
#include <conio.h>

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

	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 = 1; i <= m; i++)
	{

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

	}






	proiz = 1;
	for (i = 1; i < m; i++)
	for (j = 1; j<n; j++)
	{
		if (A[i][j]>0)
			proiz *= A[i][j];
	}
	cout << endl << endl << endl;

	cout << "  Matrix Proizv" << endl << endl;
   printf("  ");
   cout << proiz << endl;



	
	for (i = 1; i <= m; i++)
	{
		sum = 0;
		for (j = 1; j <= n; j++)
		{
			sum = sum + A[i][j];
		}
		B[i] = sum;
		
		//cout << B[i];
		//printf("  ");
	}

	
		for (j = 1; j<=m-1; j++)
		if (B[j] > B[j + 1])
		{
			//cout << B[j];
			//printf("  ");
			tmp = B[j];
			B[j] = B[j + 1];
			B[j+1] = tmp;
			
			for (k = 1; k <= n; k++)
			{
				//cout << A[j][k];
				//cout << A[j+1][k];

				printf("  ");
				tmp = A[j][k];
				A[j][k] = A[j + 1][k];
				A[j + 1][k] = tmp;
			}
			

		}
	





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







	_getch();
}

Да раза сумму вычисляет и угрюмый, но работает... (так как сдал сегодня, не стал переделывать)
Всем большое спасибо!!!
 
Назад
Сверху