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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2013, 15:51   #1
Alexandr-
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 79
По умолчанию Перегрузка функции

Определить функцию, находящую максимальный элемент массива. Выполнить перегрузку функции для следующих типов параметров:
a. Одномерный массив типа int размерностью N.
b. Одномерный массив типа float размерностью N.
c. Одномерный массив типа double размерностью N.

В общем функция должна быть 1 имени в 3 случаях и выполнять все 3 пункта, но со 2 пункта начинаются проблемы. Помогите правильно составить функцию для 2 пункта (код ниже как пытался).


Код:
#include <iostream>
#include <math.h>
#include <time.h>
using namespace std;
int massiv (int N, int max, int A[100]) {
	int i;
	for (i=0;i<=N;i++) {
		if (A[i]>max) max=A[i]; } cout<<"\nmax int "<<max; return max; }

float massiv (float N, float max1, float A[100]) {
	int i;
	for (i=0;i<=N;i++) {
		if (A[i]>max1) max1=A[i]; } cout<<"\nmax float "<<max1; return max1; }

 main () {
	int N,A[100],i,max; float max1; srand(time(NULL));
	cout<<"vvedite razmer massiva\n";
	cin>>N;
	for (i=0;i<=N;i++) {
		A[i]=rand()%N; 
		cout<<A[i]; }

massiv(N,max,A);
massiv(N,max1,A);
system("pause"); return 0; }
Alexandr- вне форума Ответить с цитированием
Старый 22.09.2013, 16:04   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Код:
#include <iostream>
#include <math.h>
#include <time.h>

using namespace std;

int
max(int A[], int N)
{
    int m = A[0];
    for (int i = 1; i < N; ++i)
        if (A[i] > m)
            m = A[i];
    return m;
}

float
max(float A[], int N)
{
    float m = A[0];
    for (int i = 1; i < N; ++i)
        if (A[i] > m)
            m = A[i];
    return m;
}

double
max(double A[], int N)
{
    double m = A[0];
    for (int i = 1; i < N; ++i)
        if (A[i] > m)
            m = A[i];
    return m;
}

int
main ()
{
    int N;
    srand(time(NULL));
    cin >> N;
    int A[N];
    float B[N];
    double C[N];
    for (int i = 0; i < N; ++i) {
        A[i] = rand() % 101 - 50;
        cout << A[i] << ' '; 
    }
    cout << endl << "max: " << max(A, N) << endl;
    for (int i = 0; i < N; ++i) {
        B[i] = rand() % 101 - 50;
        cout << B[i] << ' '; 
    }
    cout << endl << "max: " << max(B, N) << endl;
    for (int i = 0; i < N; ++i) {
        C[i] = rand() % 101 - 50;
        cout << C[i] << ' '; 
    }
    cout << endl << "max: " << max(C, N) << endl;
    system("pause");
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 22.09.2013, 16:13   #3
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Alexandr-, у Вас куча ошибок. Вот несколько:

Зачем Вы передаёте в функцию int max?

Массив вы задали в 100 элементов. А если пользователь захочет больше и введёт 200?

Замените Ваши функции по следующему образцу:

Код:
int maxElement(int a[], int n) {
    int max = a[0];

    for (int i = 0; i < n; i++) {
        if (a[i] > max) {
            max = a[i];
        }
    }
    
    return max;
}
Если Вы хотите чтобы размер массива определялся пользователем, то используйте динамический массив вместо Вашего статического.

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

Код:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

void fillArray(int arr[], int n) {
    srand (time(NULL));
    for (int i = 0; i < n; i++) {
        arr[i] = rand() % 10;
    }
}

int main(int argc, char** argv) {
    int n;
    int *array;    
    
    cout << "Enter the size of the array: ";
    cin >> n;
    array = new int[n];

    fillArray(array, n);
    
    // ...
    
    for (int i = 0; i < n; ++i)
        cout << array[i] << ' ';

    cout << endl;

    delete[] array;
    return 0;
}

Последний раз редактировалось 8Observer8; 22.09.2013 в 16:17.
8Observer8 вне форума Ответить с цитированием
Старый 22.09.2013, 16:25   #4
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
    cin >> N;
    int A[N];
    float B[N];
    double C[N];
Ого! Я и не думал, что размер статического массива можно в время исполнения задавать. Я думал, что он во время компиляции должен быть задан константой. Попробовал - работает. Только stdlib.h нужно добавить для srand, rand и system.
8Observer8 вне форума Ответить с цитированием
Старый 22.09.2013, 17:03   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Попробовал - работает.
Работает-то, работает, но насколько допустим стандартом такой код, не могу сказать
http://stackoverflow.com/questions/1...th-arrays-in-c

UPD
Пожалуйста
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 22.09.2013 в 18:47.
BDA вне форума Ответить с цитированием
Старый 22.09.2013, 18:15   #6
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Работает-то, работает, но насколько допустим стандартом такой код, не могу сказать
http://stackoverflow.com/questions/1...th-arrays-in-c
Спасибо за ссылку и инфу
8Observer8 вне форума Ответить с цитированием
Старый 28.09.2013, 08:57   #7
Alexandr-
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 79
По умолчанию

Как работает перегрузка понял спасибо. Только 1 момент не совсем понятен, про который выше писали.
Код:
 int A[N];
float B[N];
double C[N];
Если сделать например так:
Код:
 int A[]={2,3,6,5,8,6,5};
    float B[]={1.2,8.5,3.4,5.5,6.4,3.1,4.4};
    double C[]={6.6,-4.5,-3.2,9.8,6.5,3.7,3.8};
То все отлично будет работать(если не считать, что в задании надо вводить размерность), но с 1 вариантом выдаются ошибки(хотя с виду все логично):
error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
error C2133: 'A' : unknown size

Из-за этого не получается создать 3 массива с разным типом переменных...
Alexandr- вне форума Ответить с цитированием
Старый 28.09.2013, 09:28   #8
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Судя по представленным ошибкам, не все компиляторы могут такое проделывать:
Код:
    cin >> N;
    int A[N];
    float B[N];
    double C[N];
Вот так нужно:
Код:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

void fillArray(int arr[], int n) {
    srand (time(NULL));
    for (int i = 0; i < n; i++) {
        arr[i] = rand() % 10;
    }
}

int main(int argc, char** argv) {
    int n;
    int *array;    
    
    cout << "Enter the size of the array: ";
    cin >> n;
    array = new int[n];

    fillArray(array, n);
    
    // ...
    
    for (int i = 0; i < n; ++i)
        cout << array[i] << ' ';

    cout << endl;

    delete[] array;
    return 0;
}
8Observer8 вне форума Ответить с цитированием
Старый 28.09.2013, 17:48   #9
Alexandr-
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 79
По умолчанию

Ну так это пример, как вывести 1 массив целых чисел. У меня проблема вывести другие 2 с другим типом данных.(или я неправильно понимаю что-то)
Alexandr- вне форума Ответить с цитированием
Старый 28.09.2013, 17:55   #10
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Просто добавьте ещё массив double. Всё по тому же принципу, что и выше для int.

Будет две функции перед main(). Одна будет принимать массив целых чисел, другая - массив вещественных чисел.

Код:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

void fillArray(int arr[], int n) {
    srand (time(NULL));
    for (int i = 0; i < n; i++) {
        arr[i] = rand() % 10;
    }
}

void fillArray(double arr[], int n) {
    srand (time(NULL));
    for (int i = 0; i < n; i++) {
        arr[i] = rand() % 10;
    }
}
8Observer8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка функции Dima-War Общие вопросы C/C++ 8 27.05.2013 22:56
перегрузка функции.. YaDenis Помощь студентам 0 10.01.2013 23:56
перегрузка функции на С++ erfo Помощь студентам 0 23.05.2012 18:32
Перегрузка функции.С++ jagger Помощь студентам 8 11.11.2010 22:27
Перегрузка функции в С++ Vultar Помощь студентам 7 19.11.2009 13:12