Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
1

Перегруз функции

11.08.2009, 20:06. Просмотров 2674. Ответов 29

Вообще задание такое разработать функцию, вычисляющую максимальный элемент:
- в одномерном числовом массиве, состоящем из целых чисел;
- в одномерном числовом массиве, состоящим из вещественных чисел;
- в массиве строк (для этого массива функция должна находить строку с максимальной длиной). С помощью перегруза функции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
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
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include <iostream.h>
#include <stdlib.h>
//---------------------------------------------------------------------------
 
#pragma argsused
//---------------------------------------------------------------------------
int u1(int*op,int a,int max){
 ;
 for(int i=0;i<a;i++){
 if(op[i]>op[max])
   max=i;
 }
 return op[max];
 }
//---------------------------------------------------------------------------
float u2(float*op,int a,int max){
 for(int i=0;i<a;i++){
 if(op[i]>op[max])
    max=i;
 }
 return op[max];
 }
//---------------------------------------------------------------------------
char s3(char op[10], char a, char max){
 for(char i=0;i<a;i++){
 if(sizeof(op[i])>sizeof(op[max]))
    max=i;
 }
return op[max];
}
int main()
{int o,j;
 int*nt=new int[o];
 float*ft=new float[j];
 char l[10];
 cout<<"Vvedite razmer massiva"<<endl;
 cin>>o;
 cout<<"Vvedite razmer massiva"<<endl;
 cin>>j;
 cout<<"Vvedite zeloe chisla"<<endl;//для ввода в массив
  for(int i=0;i<o;i++){
   cin>>nt[i];
  }
 cout<<"Vvedite vehestvennor chisla"<<endl;//для ввода в массив
  for(int i=0;i<j;i++){
   cin>>ft[i];
  }
 cout<<"Vvedite stroku chisel"<<endl;//для ввода в массив строк
 for(int i=0;i<10;i++){
  cin>>(l);
  }
cout<<"Maxmal'nii element massiva zelih chisel= "<<u1(nt,o,0)<<endl;
 cout<<"Maxmal'nii element massiva vehestvennih chisel= "<<u2(ft,j,0)<<endl;
 cout<<"Maxmal'nii element massiva vehestvennih chisel= "<<s3(l,10,' ')<<endl;
        cin.get();
        cin.get();
        return 0;
вот сам текст программы, здесь у меня не работает только подсчет самой длинной строки, хотя если что-то не правильно кроме строк подскажите!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.08.2009, 20:06
Ответы с готовыми решениями:

Перегруз
Можете помочь ошибку C2995, как правильно перегружать #include&quot;stdafx.h&quot; #include&lt;iostream&gt; ...

Stack Overflow, перегруз буфера
Добрый день, знаком с перегрузом буфера в теории, хотел бы перейти к практике. Написал простенькую...

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

адский перегруз ЦП
Поле Значение Компьютер Тип компьютера ACPI компьютер на базе x86 Операционная...

29
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
11.08.2009, 20:12 2
не пробовал вместо sizeof использовать strlen? Да у тебя программа вообще-то с ошибками написана и она не рабочая, сначала исправь все ошибки в коде
0
576 / 570 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
11.08.2009, 20:16 3
Код
char l[10];
Это массив символов. Массив строк задается, например, как char l[10][128] - 10 строк вместимостью 128 символов, или как char *l[10] - тогда на каждое l[i] нужно вызывать new и выделять память под строку.
0
123 / 121 / 0
Регистрация: 30.03.2009
Сообщений: 766
11.08.2009, 20:20 4
а как к твоему коду относится перегруз функций??
0
MCSD: APP BUILDER
8787 / 1065 / 104
Регистрация: 17.06.2006
Сообщений: 12,604
11.08.2009, 20:26 5
в одномерном числовом массиве, состоящем из целых чисел;
C++
1
2
3
4
5
6
7
int arr_max(const int* begin, const int* end)
{
   return *std::max_element(begin, end);
}
 
int arr[10];
arr_max(arr, arr+10);
0
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
11.08.2009, 20:32 6
Lolcht0, перегруз к его коду относится как первые две функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int u1(int*op,int a,int max)
{
    for(int i=0;i<a;i++)
        if(op[i]>op[max])
            max=i;
    return op[max];
}
//---------------------------------------------------------------------------
float u1(float*op,int a,int max)
{
    for(int i=0;i<a;i++)
        if(op[i]>op[max])
            max=i;
    return op[max];
}
0
123 / 121 / 0
Регистрация: 30.03.2009
Сообщений: 766
11.08.2009, 20:38 7
где??? где там такое??? я вижу u1 и u2!! к тому же, очевидно, по условию задачи, третьей тоже было бы неплохо относиться к перегрузу!
0
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
11.08.2009, 20:43 8
ну это я уже исправил , но для начала там код нерабочий)))
0
123 / 121 / 0
Регистрация: 30.03.2009
Сообщений: 766
11.08.2009, 20:51 9
ну, я даж не знаю, что тут сначала

хотелось бы, навреное, чтобы автор (да, автор, к тебе обращаюсь) разобрался, что такое массив строк, что такое перегруз), и ответил, зачем нужен параметр max в параметрах функции. ну для самопроверки автору нарн можно написать это тут) заодно, если что, и подправим
0
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
11.08.2009, 21:23  [ТС] 10
Спасибо всем, но я не понял Gravity, ничего!!! Объясните по точнее где моя ошибка. Просто перегруз я понял так что имеются функции из которых нужно выбрать программе какую выполнять, если что не так объясните.
0
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
11.08.2009, 21:45 11
Перегрузка - это несколько функций с одинаковыми именами, но разной сигнатурой. Компилятор выбирает нужную ему функцию по сигнатуре
1
12 / 12 / 5
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
11.08.2009, 21:52 12
сделай так
C++
1
int o=10,j=10;
в Visual studio 2008 заработало
0
123 / 121 / 0
Регистрация: 30.03.2009
Сообщений: 766
11.08.2009, 21:56 13
скажи, что ты понимаешь под массивом строк, и зачем параметр max?
0
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
11.08.2009, 21:57 14
pigah, ты не понял. Он сначала выделил память, а только потом ввел размеры, а надо сначала получить размерность, а потом выделять память, т.е.
C++
1
2
3
4
5
6
7
    int o,j;
    cout<<"Vvedite razmer massiva"<<endl;
    cin>>o;
    cout<<"Vvedite razmer massiva"<<endl;
    cin>>j;
    int*nt=new int[o];
    float*ft=new float[j];
0
12 / 12 / 5
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
11.08.2009, 22:14 15
Цитата Сообщение от M128K145 Посмотреть сообщение
pigah, ты не понял. Он сначала выделил память, а только потом ввел размеры, а надо сначала получить размерность, а потом выделять память, т.е.
C++
1
2
3
4
5
6
7
    int o,j;
    cout<<"Vvedite razmer massiva"<<endl;
    cin>>o;
    cout<<"Vvedite razmer massiva"<<endl;
    cin>>j;
    int*nt=new int[o];
    float*ft=new float[j];
ну да а еще и освободить память ему не помешает
C++
1
2
delete nt;
delete ft;
иначе начнутся проблемы
0
576 / 570 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
11.08.2009, 22:16 16
Цитата Сообщение от pigah Посмотреть сообщение
иначе начнутся проблемы
Со здоровьем?
0
12 / 12 / 5
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
11.08.2009, 22:28 17
Цитата Сообщение от Gravity Посмотреть сообщение
Со здоровьем?
с компьютером ты память занял и не освободил)
0
576 / 570 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
11.08.2009, 22:34 18
Цитата Сообщение от pigah Посмотреть сообщение
с компьютером ты память занял и не освободил)
После выхода из программы, занятая память автоматически обозначается как свободная и становится доступной для других приложений, так что ничего страшного в этом нет. Но с т.з. хорошего тона программирования, оно конечно верно явно освобождать память.
0
M128K145
11.08.2009, 22:56
  #19

Не по теме:

страшнее если не закроеш поток, в многопоточной программе,
он потом может всплыть загрузив одно из ядер проца :D

0
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.08.2009, 23:04 20
а я бы не усложнял. сигнатуру сделал бы максимально похожей, т.к. отсутствие концепции - хуже неудачной концепции.
итак, наши перегруженные ф-ии будут получать указатель на первый элемент массива и длину его, и возвращать индекс элемента массива с максимальным значением, или -1 если массив пуст. само значение из массива достать для вызывающего - не проблема.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
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
/////////////////
int getMax (const int *pArg, int size){
  int max = MIN_INT;
  int iMax = -1;
  for (int i = 0; i < size; i++){
    if (*(pArg+i) > max){
      max =  *(pArg+i);
      iMax = i;
    }
  }
  return i;
}
 
/////////////////
int getMax (const double *pArg, int size){
  double max = MIN_DOUBLE;
  int iMax = -1;
  for (int i = 0; i < size; i++){
    if (*(pArg+i) > max){
      max =  *(pArg+i);
      iMax = i;
    }
  }
  return i;
}
 
/////////////////
int getMax (const char **pArg, int size){
  int maxSize = 0;
  int iMax = -1;
  for (int i = 0; i < size; i++){
    int sz = ::strlen (*(pArg+i));
    if (sz > maxSize){
      maxSize = sz;
      iMax = i;
    }
  }
  return i;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.08.2009, 23:04

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

Работа с Socket и перегруз
Добрый день ! Недавно наткнулся на статью в которой говорилось о том что если запустить бесконечный...

Перегруз трафика, где искать
(Другой офис, другой комп) Превышение трафика, логи дают три ip адреса pppoe.spdop.ru фильмы не...

Перенос сайта, перегруз шлюза
По работе дали такие задания: 1)Нужно скопировать сайт с домена .com на домен .ru вот сайт...

Перегруз на FloatToChar; Неупорядочный вывод массива
Нужно вывести 2х строковый массив (в форму) 1. Самый простой способ это вывести массив А на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.