Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
pr1me222
0 / 0 / 0
Регистрация: 11.05.2011
Сообщений: 71
#1

Перегрузка функций - C++

19.01.2013, 22:41. Просмотров 430. Ответов 3
Метки нет (Все метки)

Задание: Написать перегруженные функции и основную программу, которая их вызывает.
а) для массива целых чисел находит количество нечетных элементов;
б) для строки находит количество слов в ней.
Вот код:
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
#include <iostream>
#include <conio.h>
// #include <stdio.h>
using namespace std;
 
int func (char S [])
    {
        //int i;
    //  char a[30];
    int space=0;
    for (int i = 1; i<= strlen(S); i++)
    {
        if (S[i] == ' ')
        {
            space++;
        }
    }
    return space+1;
}
 
int func (int s)
{ 
    double a[20];
    int i,p;
    s=0;
    for (i=0; i<20; i++)
        if (a[i]/2==0)
    {
    s++;
    }
        return s;
}
 
int main ()
{
    
    char a[20];
    int i, s;
    cout <<"Vvedite massiv strok ili chisel: ";
    for (i=0; i>20; i++);
    cin >> a[i];
    cout<< func (s);
    
    getch ();
}

Программа запускается но аварийно завершается. Это первая попытка создания перегруженных функций. Не очень понятно как в функции int main про инициализировать массив и каким типом объявлять. Ведь в зависимости от желания пользователя могут в него вводится или числа или символы. И от этого уже зависит какая функция именно будет вызываться, для подсчета слов или четных чисел.
Очень прошу указать на мои ошибки(( По возможности объяснить.)
Заранее спасибо)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2013, 22:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка функций (C++):

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов - C++
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

Перегрузка функций. Реализация функций - C++
Разработать функцию f(x) , которая возвращает младшую цифру натурального числа x . Вычислить с ее помощью значение выражения z= f(a) +...

Перегрузка функций - C++
Моя последняя лаба=( Светлые умы, помогите... Выполнить задания пятой и шестой лабораторной работы, оформив каждый пункт задания в виде...

Перегрузка функций - C++
АТД - множество с элементами типа int. Дополнительно перегрузить следующие операции: «+» - добавить элемент в множество(типа int +...

Перегрузка функций - C++
Здравствуйте уважаемые програмисты:) У меня вот такое задание: В классе необходимо перегрузить нижеследующие операции, при этом две...

Перегрузка функций - C++
Для одномерного массива из n вещественных элементов и од*номерного массива из n строк, найти соответственно: 1.1. Максимальный по модулю...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
20.01.2013, 16:44 #2
Цитата Сообщение от pr1me222 Посмотреть сообщение
Не очень понятно как в функции int main про инициализировать массив и каким типом объявлять. Ведь в зависимости от желания пользователя могут в него вводится или числа или символы. И от этого уже зависит какая функция именно будет вызываться, для подсчета слов или четных чисел.
Весь смысл перегрузки - объединение множества различных функций, выполняющих по сути одни и те же действия, но имеющие специфичную для определённых типов и/или числа параметров реализацию, под одним именем. Какая из функций будет вызвана определяется ещё во время компиляции. Если вам нужен массив чисел, объявляете массив чисел, если нужен массив символов, соответственно объявляете массив символов.
Цитата Сообщение от pr1me222 Посмотреть сообщение
Очень прошу указать на мои ошибки(( По возможности объяснить.)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int func (char S [])
    {
        //int i;
    //  char a[30];
    int space=0;
    for (int i = 1; i<= strlen(S); i++)
    {
        if (S[i] == ' ')
        {
            space++;
        }
    }
    return space+1;
}
Цикл for не мешало бы переписать так
C++
1
2
3
// индекс первого элемента массива всегда 0
// признак конца С-строки символ '\0'
for (int i = 0; S[i] != '\0'; i++)
более удачный алгоритм подсчёта слов в строке можете посмотреть здесь
C++
1
2
3
4
5
6
7
8
9
10
11
12
int func (int s)
{ 
    double a[20];
    int i,p;
    s=0;
    for (i=0; i<20; i++)
        if (a[i]/2==0)
    {
    s++;
    }
        return s;
}
C++
1
2
3
4
5
6
7
8
int func (int a[], int n) // a - массив; n - количество символов в массиве
{ 
    int s = 0;
    for (int i = 0; i < n; i++)
        if (a[i] % 2 == 0) s++; // подсчёт чётных чисел (% - извлечь остаток от деления двух целых чисел)
 
    return s;
}
Функцию main можете оформить приблизительно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const int s_len = 256;
char s[s_len];
 
cin.getline(s, s_len); // ввод строки
if(!cin) return 1; // ошибка ввода        
 
// вызов func и вывод результата
 
//---------
 
const int a_len = 10;
int a[a_len];
 
// ввод элементов целочисленного массива
for(int i = 0; i < a_len; ++i)
{
    cin >> a[i];
    if(!cin) return 1; // ошибка ввода    
}
 
// вызов func и вывод результата
pr1me222
0 / 0 / 0
Регистрация: 11.05.2011
Сообщений: 71
22.01.2013, 02:12  [ТС] #3
Спасибо огромнейшее.)
ну вот еще один маленький вопросик..
подсчет слов работает, но вот когда вызываешь функцию для подсчета количество нечетных элементов

C++
1
cout << func (a[n]);
выбивает следующую ошибку : "error C2665: func: ни одна из 2 перегрузок не может преобразовать все типы аргументов."
а если вызываешь функцию так:
C++
1
cout << func (a[], n);
(понимаю что бред но все же..) выдает ошибку: "error C2059: синтаксическая ошибка: ] "
при чем первоначальная функция для подсчета количества слов вызвана вот так:

C++
1
cout << func(s);
как правильно вызват вторую функцию?..подскажите пожалуйста...
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
22.01.2013, 14:44 #4
Цитата Сообщение от pr1me222 Посмотреть сообщение
как правильно вызват вторую функцию?
C++
1
cout << func (a, n);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2013, 14:44
Привет! Вот еще темы с ответами:

перегрузка функций - C++
У меня есть структура Студенты. в ней есть Имя студента, его Бал аттестата и Возраст. Подскажите, плиз, как создать функцию add(); и...

Перегрузка функций - C++
Стало интересно из-за возможна перегрузка функций в программе на языке С++, с чем это связано, как реализовано внутри программы? Кто...

Перегрузка функций - C++
Задача такая: перегрузить * так чтобы время умножалось на число, и так чтобы число умножалось на время. Не могу понять как реализовать...

Перегрузка функций - C++
разработайте две версии функции F,заголовки которых выглядят следующим образом: 1) float F(float х); 2) void F (float x, float &amp;y); ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.01.2013, 14:44
Ответ Создать тему
Опции темы

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