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

Перегрузка - C++

Восстановить пароль Регистрация
 
TenGreen
1 / 1 / 0
Регистрация: 22.03.2013
Сообщений: 12
25.09.2013, 18:52     Перегрузка #1
Написать программу на языке C++, реализующию перегруженную функцию z_cnt, получа-
ющую в качестве аргумента или массив целых чисел, или символьную строку, и возвраща-
ющую количество подсчитанных элементов. Признаком конца числового массива считать
элемент с нулевым значением (добавить при инициализации массива). Словом считать по-
следовательность символов, для которых функция isalpha возвращает истину. Функция не
должна изменять переданные ей массивы и должна это гарантировать.
Для массива целых чисел функция должна подсчитать максимальное количество иду-
щих подряд чётных чисел, а для символьной строки – количество слов, в которых две
последние буквы одинаковы.
Пример:
[ 1 2 2 23 4 2 14 9 18 889 ] - 3
"0x12 SSSS 123 43h e12 0 12gt txx" - 2
В функции main следует подготовить исходные данные, вызвать оба варианта функ-
ции, а затем вывести исходные данные и результаты. Предусмотреть меры против аварий-
ного завершения программы из-за неправильно указанных аргументов.

Задание, и код к нему.

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
#include <iostream> // для cout
using namespace std;
 
 
int xcount (const int *c);
int xcount (const char *d);
 
int main()
{
 
    const int a[] = {1, 2, 2, 23, 4, 2, 14, 9, 18, 889, 0};
    const char *d = "0x12 SSSS 123 43h e12 0 12gt txx";
 
     cout << "String: \"" << d << "\"\n";
     cout << "int array: " ;
    for( int i=0; a[i]!=0; i++ )
      cout << a[i] << ' ';
 
    cout << "\nint array: " << xcount( a ) << endl;
    cout << "string:    " << xcount( d ) << endl;
 
    return 0;
}
 
int xcount(const int *c)
{
  int max, n;
  int i;
  max=n=0;
  for (i=0; c[i]; i++)
    if ((c[i]%2==0)&&(c[i+1]%2)) {
        n++;
        if(n > max)
        max=n; n==0;
            }
return max;
}
 
int xcount (const char *d)
{
 
    int i,n=0;
    if( !d || ! d[0] || !d[1] )
      return 0;
    /*int nwords = 0;
    int inword = 0;*/
 
    for (i=2; d[i]; i++)
      if ((isalpha(d[i])==0)&&(isalpha(d[i-1])!=0)&&(d[i-2]==d[i-1]))n++;
    if((d[i]=='\0')&&(d[i-2]==d[i-1])) n++;
         /*{
          if (!inword)
            inword = 1;
            } else {
            if (inword)
              nwords++;
            }*/
 
    return n;
}
Собственно вопрос - правильно ли я написал програмку и можно ли её как то облагочестить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2013, 18:52     Перегрузка
Посмотрите здесь:

C++ C++ Перегрузка
C++ Перегрузка
Перегрузка C++
C++ перегрузка
C++ Перегрузка << и >>
Перегрузка в c++ C++
C++ Перегрузка ++ и --
Перегрузка +,-,++,-- C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
25.09.2013, 23:08     Перегрузка #2
Вы не полностью выполнили задание, а где защита от неправильных параметров
TenGreen
1 / 1 / 0
Регистрация: 22.03.2013
Сообщений: 12
26.09.2013, 14:54  [ТС]     Перегрузка #3
Цитата Сообщение от egor2116 Посмотреть сообщение
Вы не полностью выполнили задание, а где защита от неправильных параметров
Еще думаю над этим

Добавлено через 14 часов 53 минуты
Все, проблема решена
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
#include <iostream> 
using namespace std;
 
 
int xcount (const int *c);
int xcount (const char *d);
 
int main()
{
 
    const int a[] = {1, 2, 2, 23, 4, 2, 14, 9, 18, 889, 0};
    const char *d = "0x12 SSSS 123 43h e12 0 12gt txx";
if( !d || ! d[0] || !d[1] )
{cout << "Error"; return 0}
 if( !a || ! a[0] || !a[1] )
{cout << "Error"; return 0}
     cout << "String: \"" << d << "\"\n";
     cout << "int array: " ;
    for( int i=0; a[i]!=0; i++ )
      cout << a[i] << ' ';
 
    cout << "\nint array: " << xcount( a ) << endl;
    cout << "string:    " << xcount( d ) << endl;
 
    return 0;
}
 
int xcount(const int *c)
{
  int max, n;
  int i;
  max=n=0;
  for (i=0; c[i]; i++)
    if ((c[i]%2==0)&&(c[i+1]%2)) {
        n++;
        if(n > max)
        max=n; n==0;
            }
return max;
}
 
int xcount (const char *d)
{
 
    int i,n=0;
    if( !d || ! d[0] || !d[1] )
      return 0;
   
    for (i=2; d[i]; i++)
      if ((isalpha(d[i])==0)&&(isalpha(d[i-1])!=0)&&(d[i-2]==d[i-1]))n++;
    if((d[i]=='\0')&&(d[i-2]==d[i-1])) n++;
        
 
    return n;
}
но все еще не могу понять как можно сократить
C++
1
2
if ((isalpha(d[i])==0)&&(isalpha(d[i-1])!=0)&&(d[i-2]==d[i-1]))n++;
    if((d[i]=='\0')&&(d[i-2]==d[i-1])) n++;
Yandex
Объявления
26.09.2013, 14:54     Перегрузка
Ответ Создать тему
Опции темы

Текущее время: 07:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru