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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2008, 12:53   #1
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию Перегрузка функций...

Собственно простая программа с перегрузкой,только вот ,функции абсолютно одинаковые а значения возвращают разные 0_о
Код:
//---------------------------------------------------------------------------

#include <clx.h>
#pragma hdrstop
#include <conio.h>
#include <iostream.h>
#include <math.h>


//---------------------------------------------------------------------------

#pragma argsused
int funct(int b[][12]);
double funct(double b[][12]);
char funct(char b[][12]);
int main(int argc, char* argv[])
{
  int x,y;
 int a[12][12]={{1,2,3,4,5,6,7,8,9,10,11,12},
              {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,75,76,77,78,79,80,81,82,83,84,85},
              {86,87,88,89,90,91,92,93,94,95,96,97},
              {98,99,100,101,102,103,104,105,106,107,108,109},
              {110,111,112,113,114,115,116,117,118,119,120,121}};

  double b[12][12]={{1,2,3,4,5,6,7,8,9,10,11,12},
              {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,75,76,77,78,79,80,81,82,83,84,85},
              {86,87,88,89,90,91,92,93,94,95,96,97},
              {98,99,100,101,102,103,104,105,106,107,108,109},
              {110,111,112,113,114,115,116,117,118,119,120,3}};

  char c[12][12]={{1,2,3,4,5,6,7,8,9,10,11,12},
              {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,75,76,77,78,79,80,81,82,83,84,85},
              {86,87,88,89,90,91,92,93,94,95,96,97},
              {98,99,100,101,102,103,104,105,106,107,108,109},
              {110,111,112,113,114,115,116,117,118,119,120,121}};





  for (x=0;x<10;x++)
 {
  for (y=0;y<12;y++){
 cout<<a[x][y]<<" ";
  }
  cout<<"\n" ;
  }  ;


cout<<funct(a)<<"\n";
cout<<funct(b)<<"\n";
cout<<int(funct(c));




        return 0;
}
//---------------------------------------------------------------------------

int funct(int b[][12])
{
 int x,y,n,l,min;int m[45];
 n=0;l=0;
 for (y=1;y<12;y++){
 for (x=11;x>0;x--)
 {m[l]=b[x][y];
  n++;l++;
  if (n==y) break;};n=0;};


   n=0;
  for (l=0;l<46;l++){
   if ((m[l]>0) && (m[l]%3==0) && (n==0)) {min=m[l];n++;}
  if ((m[l]>0) && (m[l]%3==0) && (m[l]<min)) min=m[l]; };
  return min;


}

//---------------------------------------

double funct(double b[][12])
{
 int x,y,n,l;double m[45];double min;
 n=0;l=0;
 for (y=1;y<12;y++){
 for (x=11;x>0;x--)
 {m[l]=b[x][y];
  n++;l++;
  if (n==y) break;};n=0;};

 double lol;
  n=0;
  for (l=0;l<46;l++){modf(m[l]/3,&lol);
  if ((m[l]>0) && (modf(m[l]/3,&lol)==0)==0 && (m[l]<min)) min=m[l]; };
  return min;


}

//---------------------------------------

char funct(char b[][12])
{
 int x,y,n,l;char m[45];char min;
 n=0;l=0;
 for (y=1;y<12;y++){
 for (x=11;x>0;x--)
 {m[l]=b[x][y];
  n++;l++;
  if (n==y) break;};n=0;};


   n=0;
  for (l=0;l<46;l++){
   if ((m[l]>0) && (m[l]%3==0) && (n==0)) {min=m[l];n++;}
  if ((m[l]>0) && (m[l]%3==0) && (m[l]<min)) min=m[l]; };
  return min;


}

//---------------------------------------

Последний раз редактировалось bondik; 24.04.2008 в 14:22.
bondik вне форума Ответить с цитированием
Старый 24.04.2008, 13:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а значения возвращают разные
Ну дык одна преобразует результ в число другая символ, ессно разный результ.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.04.2008, 14:21   #3
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию

Нет в контексте данной программы char это числовой тип от 0 до 255,поэтому и будет вызываться так cout<<Int(Моя_функция(чармассив));
bondik вне форума Ответить с цитированием
Старый 24.04.2008, 17:50   #4
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Перегрузка функций - это механизм когда у тебя есть 2 и более функции с одинаковыми именами, но разными параметрами. Будет вызывать именно та функция, параметры которой являются того же типа, что и в функции. Это делает сам компилятор. Отсюда и значения разные.
Hollander вне форума Ответить с цитированием
Старый 24.04.2008, 21:32   #5
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Код:
int m[45];  
 n=0;l=0;  
 for (y=1;y<12;y++){  
 for (x=11;x>0;x--)  
 {m[l]=b[x][y];  
  n++;l++;  
  if (n==y) break;};n=0;};
45 элементов для m маловато
Somebody вне форума Ответить с цитированием
Старый 24.04.2008, 21:50   #6
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию

нет как раз ровно,смысл этого массива что он заносит все элементы двумерного массива которые находяться под побочной диагональю исключая оную
bondik вне форума Ответить с цитированием
Старый 24.04.2008, 22:13   #7
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от bondik Посмотреть сообщение
нет как раз ровно,смысл этого массива что он заносит все элементы двумерного массива которые находяться под побочной диагональю исключая оную
Какая разница, в чём его смысл, если "l" в циклах доходит до шестидесяти пяти?
B_N вне форума Ответить с цитированием
Старый 25.04.2008, 00:32   #8
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию

Лано вот полный ворос...Дана программа вставить в нее 3 перегрузки на типы int double char,эти функции могут лишь принимать и возвращать,выводить не могут.и собственно прога+надо еще 2 массива заданых явным способом
Код:
//---------------------------------------------------------------------------

#include <clx.h>
#pragma hdrstop
#include <conio.h>
#include <iostream.h>

//---------------------------------------------------------------------------

#pragma argsused
int funct(int b[][12]);
int main(int argc, char* argv[])
{
  int x,y,n,l,min;int m[45];
 int a[12][12]={{1,2,3,4,5,6,7,8,9,10,11,12},
              {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,75,76,77,78,79,80,81,82,83,84,85},
              {86,87,88,89,90,91,92,93,94,95,96,97},
              {98,99,100,101,102,103,104,105,106,107,108,109},
              {110,111,112,113,114,115,116,117,118,119,120,121}};



  for (x=0;x<10;x++)
 {
  for (y=0;y<12;y++){
 cout<<a[x][y]<<" ";
  }
  cout<<"\n" ;
  }  ;


 cout<<funct(a);
 getch();



        return 0;
}
//---------------------------------------------------------------------------

int funct(int b[][12])
{
 int x,y,n,l,min;int m[45];
 n=0;l=0;
 for (y=1;y<12;y++){
 for (x=11;x>0;x--)
 {m[l]=b[x][y];
  n++;l++;
  if (n==y) break;};n=0;};


  min=32767;
  for (l=0;l<46;l++)
  if ((m[l]>0) && (m[l]%3==0) && (m[l]<min)) min=m[l];
  return min;


}
bondik вне форума Ответить с цитированием
Старый 25.04.2008, 03:00   #9
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

У Вас неправильная логика функции. Начиная с такой мелочи, как указание 32767 для машиннозависимого типа int в качестве первого минимума, вместо INT_MAX, и кончая "железно" забитым числом 45. Это у матрицы десятого ранга вне диагонали 45 элементов с каждой стороны, для 12-го - по 66. Поэтому функции и вылазят из массива, на что и указал Somebody. Объясните, что они должны делать.
B_N вне форума Ответить с цитированием
Старый 26.04.2008, 15:03   #10
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию

Вот с исправленными ошибками,как я сказал она не моя,но как я понял ищут наименьшее положительное кратное трем из определенных чисел данного массива ,а точнее из всех чисел лежащих под побочной диагональю,в линейный массив как раз записываються эти выделенные числа числа
Код:
#include <clx.h>   
#pragma hdrstop   
#include <conio.h>   
#include <iostream.h>   
  
//---------------------------------------------------------------------------   
  
#pragma argsused   
int funct(int b[][12]);   
int main(int argc, char* argv[])   
{  
  int x,y,n,l,min;int m[66];  
 int a[12][12]={{1,2,3,4,5,6,7,8,9,10,11,12},   
              {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,75,76,77,78,79,80,81,82,83,84,85},   
              {86,87,88,89,90,91,92,93,94,95,96,97},   
              {98,99,100,101,102,103,104,105,106,107,108,109},   
              {110,111,112,113,114,115,116,117,118,119,120,121}};   
  
  
  
  for (x=0;x<10;x++)   
 {  
  for (y=0;y<12;y++){  
 cout<<a[x][y]<<" ";  
  }   
  cout<<"\n" ;   
  }  ;   
  
  
 cout<<funct(a);   
 getch();   
  
  
  
        return 0;   
}   
//---------------------------------------------------------------------------   
  
int funct(int b[][12])   
{  
 int x,y,n,l,min;int m[65];  
 n=0;l=0;  
 for (y=1;y<12;y++){  
 for (x=11;x>0;x--)  
 {m[l]=b[x][y];  
  n++;l++;  
  if (n==y) break;};n=0;};   
  
  
  n=0;  
  for (l=0;l<46;l++)
  if ((m[l]>0) && (m[l]%3==0) && (n==0)) {min=m[l];n++};    
  if ((m[l]>0) && (m[l]%3==0) && (m[l]<min)) min=m[l];   
  return min;   
  
  
}

Последний раз редактировалось bondik; 27.04.2008 в 12:10.
bondik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перегрузка + softrix Общие вопросы C/C++ 2 21.06.2008 22:27
Перегрузка ++ Dark_Maks Общие вопросы C/C++ 2 18.12.2007 09:27
перегрузка функций Snake_ua Общие вопросы Delphi 3 26.11.2007 10:54
Перегрузка оператора Crucian Общие вопросы C/C++ 2 22.10.2007 09:44