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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2012, 20:29   #1
Timmon
Пользователь
 
Регистрация: 06.09.2011
Сообщений: 12
По умолчанию цикл в классе не проходит.выбирает только первое значение

задание: Реализовать шаблон функции max_mas2, обеспечивающей поиск максимального элемента двумерного массива. + Реализовать шаблон функции согласно варианту задания. Для проверки работоспособности шаблона функции написать тестирующую программу, в которой функция вызывается для разнотипных данных.

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


Код:
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include<conio.h>
using namespace std;

 template <class T>
 T max(T **c, const int size1, const int size2)
{
  T maxx=c[0][0];
  for(int i = 0; i < size1; ++i)
  for(int j = 0; j < size2; ++j)
  {
    if (c[i][j] > maxx)
      maxx = c[i][j];
  return maxx;
  }
}

int main()
{
 srand(time(NULL));
 int i,j,na,nb,maxa,**a;
 double maxb, **b;
na = nb = 2;

a=new int*[na];       //динамическое выделение памяти двумерному массиву a
for(i=0;i<na;i++){a[i]=new int[na];}

cout<< "\nMade " << na << " element (s) array a: "<< endl;
for(i=0;i<na;i++)
{
for (j=0;j<na;j++)
 {
  a[i][j]=rand()%201-100;
  cout << a[i][j]<<"\n";
}}

b=new double*[nb]; //динамическое выделение памяти двумерному массиву b
for(i=0;i<nb;i++){b[i]=new double[nb];}

cout <<"\nMade " <<nb <<" element (s) array b: "<< endl;
for (i=0;i<nb;i++)
for(j=0;j<nb;j++)
  {

   b[i][j]=201.0*rand()/RAND_MAX-100.0;
   cout << b[i][j]<<"\n";
  }

  maxa= max(a,na,na);
 cout <<"\nMax element array a: " <<maxa << endl;

 maxb= max(b,nb,nb);
 cout <<"\nMax element array b: " <<maxb << endl;

  system("pause");
delete []a;
delete []b;
  return 0;
  }
Timmon вне форума Ответить с цитированием
Старый 18.10.2012, 20:54   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
  return maxx;
  }
Поменяйте эти два элемента местами. У Вас выход из процедуры... пардон, из функции (все-таки это Си ) внутри цикла сделан, поэтому он первый элемент выводит и вываливает на экран
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 18.10.2012, 21:19   #3
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

Код:
#include <iostream>
#include <ctime>

using namespace std;

 template <class T>
 T myMax(T **c, const int size)
{
  T maxx = c[0][0];
  for(int i = 0; i < size; ++i)
  {
	  for(int j = 0; j < size; ++j)
	  {
		if (c[i][j] > maxx)
		  maxx = c[i][j];
	  }
  }
  return maxx;
  }


int main()
{
	srand( time( NULL ) );

	const size_t sizeOfFirst = 3;
	const size_t sizeOfSecond = 2;

	int** firstArray = new int* [sizeOfFirst];
	for (int i = 0; i < sizeOfFirst; i++) firstArray[i] = new int[sizeOfFirst];

	float** secondArray = new float* [sizeOfSecond];
	for (int i = 0; i < sizeOfSecond; i++) secondArray[i] = new float[sizeOfSecond];
	
#pragma region Fill both arrays

	cout << "\t\t\tMatrix A\n";

	for (int i = 0; i < sizeOfFirst; i++)
	{
		for (int j = 0; j < sizeOfFirst; j++)
		{
			firstArray[i][j] = rand() % 201- 100;
			cout << firstArray[i][j] << " ";
		}
		cout << endl;
	}

	cout << "\t\t\tMatrix B\n";

	for (int i = 0; i < sizeOfSecond; i++)
	{
		for (int j = 0; j < sizeOfSecond; j++)
		{
			secondArray[i][j] = 201.0 * rand() / RAND_MAX - 100.0;
			cout << secondArray[i][j] << " ";
		}
		cout << endl;
	}
#pragma endregion

	
	int maxF = myMax(firstArray, sizeOfFirst);
	float maxS = myMax(secondArray, sizeOfSecond);

	cout << "\n\nFirst max is " << maxF << "\nSecond max is " << maxS << endl;
//TODO ADD DELETE HERE
	system("pause");
}
как-то так, а вообще то у тебя ретурн не там стоит в функции макс, нужно ниже.
rUs_LAN вне форума Ответить с цитированием
Старый 20.10.2012, 01:20   #4
Timmon
Пользователь
 
Регистрация: 06.09.2011
Сообщений: 12
По умолчанию

спасибо)не углядел
Timmon вне форума Ответить с цитированием
Старый 20.10.2012, 03:10   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,726
По умолчанию

сколько можно кросспостить? где модераторы?
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему-то цикл доходит до только 100 Ignam Microsoft Office Excel 4 18.07.2011 18:02
При экспорте базы в Excel выводит везде первое значение Aleksandr Общие вопросы Delphi 1 25.04.2011 12:07
выбрать первое и последнее значение в списке по условию simpleGo Microsoft Office Excel 4 06.12.2010 19:43
алгоритм находит только первое вхождение find_if Progsenya Общие вопросы C/C++ 5 11.09.2010 10:38