Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 31.03.2009, 12:19   #1
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию c++ помогите разобраться с програмкой

Всем добрый день!
текст самой задчки таков: Дана матрица N(6,5) (6 - строк, 5 - столбцов). Найти столбец с минимальной суммой элементов.
Задачку нужно делать обязательно с использованием указателей...
у меня получился вот такой код:
Код:
#include <iostream.h>
#include <conio.h>
void main()
{
int a[6][5];
int *P;
int i,j,s,max,min;
cout << "Vvedite 6 strok po 5 chisel" << endl;
for(i=0;i<6;i++)
  for(j=0;j<5;j++)
	 cin >> a[i][j];
cout << endl << "Matriza :" << endl;
for(i=0;i<6;i++){
   for(j=0;j<5;j++)
	cout << a[i][j]<< " ";
	cout << endl;
	}
P=&a[0][0];
for(j=0;j<5;j++)
   {s=0;
   for(i=0;i<6;i++)
	{s+=*P;
	P++;
	   }
   if(j==0)max=s;
	else if(max>s) max=s;
	}
cout << endl << "Minimum summa stolbza = " << max << endl;
cin.get();
cin.get();
}
Проблема заключается в следующем при подсчёте, если, к примеру, на самом столбец с минимальной суммой элементов 16, то у меня в программке получается ответ, когда как, то 15 то 17....
проще говоря, программа прибавляет или отнимает из полученного результат 1 ...
объясните пожалуйста, что я делаю не так, почему то каежется что я чтото напутал с указателем...
hen вне форума
Старый 31.03.2009, 12:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну не знаю... Если в таком ракурсе рассматривать то могу посоветовать примерно следующее:
Код:
#include <iostream.h>
#include <conio.h>
void main()
{
int a[6][5];
int b[5];
int *P;
int i,j,s,max,min;
cout << "Vvedite 6 strok po 5 chisel" << endl;
for(i=0;i<6;i++)
  for(j=0;j<5;j++)
	 cin >> a[i][j];
cout << endl << "Matriza :" << endl;
for(i=0;i<6;i++){
   for(j=0;j<5;j++)
	cout << a[i][j]<< " ";
	cout << endl;
	}
P=&a[0][0];
for(j=0;j<5;j++)
   {s=0;
   for(i=0;i<6;i++)
	{b[j]+=*P;
	P++;
	   }
  
   if(b[j]<max)max=b[j];
}
cout << endl << "Minimum summa stolbza = " << max << endl;
cin.get();
cin.get();
}
Только я не тестил...
I'm learning to live...
Stilet вне форума
Старый 31.03.2009, 13:19   #3
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию

Stilet, извини забыл указать мне необходимо сделать без использования каких-либо других массивов... поэтому я и искал минимальную сумму через переменную...

причем если использовать твой код
при введении такого то массива
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
1 2 3 4 5
минимальная сумма столбца получается 24 ,
но это получается сумма ни минимальная ни максимальная сумма какого-либо столбца...
hen вне форума
Старый 31.03.2009, 13:22   #4
Peter20
 
Регистрация: 31.03.2009
Сообщений: 6
Сообщение

Код:

int n = 0, min = 0x7fffffff;
for(j=0;j<5;j++) // по столбцам
{
       s=0;
       for(i=0;i<6;i++) // по строкам
       {
            s += *(P + i * 5); // база + номер строки * длина строки
       }
       if(s < min)
       {
            n = j; 
            min=s;
       }
}
// n номер столбца с мин суммой
Peter20 вне форума
Старый 31.03.2009, 14:30   #5
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию

Peter20, понимаешь мне нужно чтоб вот эта часть была прибл.. в таком виде
Код:
P=&a[0][0];
for(j=0;j<5;j++)
   {s=0;
   for(i=0;i<6;i++)
	{s+=*P;
	P++;
	}
   if(j==0)max=s;
   else if(max>s) max=s;
	}
cout << endl << "Minimal'nay summa stolbza = " << max << endl;
cin.get();
cin.get();
hen вне форума
Старый 31.03.2009, 15:19   #6
Peter20
 
Регистрация: 31.03.2009
Сообщений: 6
По умолчанию

ранее была ошибка в коде, не было смещения внутри строки, надо так
Код:
for(i=0;i<6;i++) // по строкам
{
        s += *(P + i * 5 + j); // база + номер строки * длина строки + номер в строке
}
Peter20 вне форума
Старый 31.03.2009, 19:06   #7
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Люди вы что, больные? Указатели - значит память под массив выделяется динамически и передается в функцию поиска минимально элемента по указателю.
Где-то так
Код:
int **matrix;
matrix = new int*[5];
for(int i = 0; i < 5; i++)
   matrix[i] = new int[5];

//потом пишем параметры к функции
void min(int **m) //массив передается по указателю
{
//и так далее
}
Работа с массивом идет так же.
MaTBeu вне форума
Старый 31.03.2009, 19:20   #8
Am1r
Пользователь
 
Регистрация: 19.03.2009
Сообщений: 13
По умолчанию

Код:
// mas.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

void main()
{
int a[6][5];
int *P;
int i,j,s,max,min;
cout << "Vvedite 6 strok po 5 chisel" << endl;
for(i=0;i<6;i++)
  for(j=0;j<5;j++)
	 cin >> a[i][j];
cout << endl << "Matriza :" << endl;
for(i=0;i<6;i++){
   for(j=0;j<5;j++)
	cout << a[i][j]<< " ";
	cout << endl;
	}
P=&a[0][0];
for(j=0;j<5;j++)
   {s=0;
	P=&a[0][0];
   for(i=0;i<6;i++)
	{s+=*P;
	P+=5;
	   }
   if(j==0)max=s;
	else if(max>s) max=s;
	}
cout << endl << "Minimum summa stolbza = " << max << endl;
cin.get();
cin.get();
}
Am1r вне форума
Старый 31.03.2009, 20:16   #9
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию

Am1r, спасибо тебе огромное...
Вот как раз это и нужно было, а не всякие базы городить и дополнительные массивы вводить...

Модератор: какой вопрос, такой и ответ. Тема закрыта.

Последний раз редактировалось MaTBeu; 31.03.2009 в 20:24.
hen вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с програмкой (Repeat...Until)... Goldberg Паскаль, Turbo Pascal, PascalABC.NET 2 11.11.2008 15:50
помогите разобраться Tanuska___:) БД в Delphi 1 04.09.2008 14:56
Помогите разобраться! SerSasha Помощь студентам 4 09.06.2008 10:00
Помогите разобраться! Кот Microsoft Office Excel 3 14.08.2007 19:48