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

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

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

Определить, какой символ наиболее редко встречается в заданном массиве(шаблоны) - C++

14.02.2013, 02:05. Просмотров 482. Ответов 2
Метки нет (Все метки)

Доброго времени суток, товарищи эксперты! Написал программу по следующему заданию:
Задан массив int A[N], элементы которого могут быть заполнены только (0, 1, 2, 3, 4, 5, 6). Определить, какой символ наиболее редко встречается в данном массиве.
заголовочный файл:
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
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include <iostream>
#include <conio.h>
using namespace std;
typedef int T;
class VECTOR
{
    public:
       int n;
       T *A;
       VECTOR(int n);
       ~VECTOR();
       VECTOR(VECTOR & what);
       void Set(int j, T value);
       int GetSize();
       float Get(int t);
       int Check(int value,VECTOR what);
       void Print();
       void Counting(VECTOR what);
};
 
 
 VECTOR::VECTOR(int _n)
    {
        n=_n;
        A= new T[n];
            if(A==NULL) 
                {
                    cout << "Недостаточно памяти\n";
                    exit(1);
                }
            for(int i=0;i<n;i++)
                {
                    A[i]=0;
                }
    }
 
 VECTOR::~VECTOR()
    {
        if (A)
            delete[] A;
    }
 
 VECTOR::VECTOR(VECTOR & what) 
    {
        n = what.n;
        A = new T[n];
        for(int i = 0; i < n; i++)
            A[i] = what.A[i];
    };
 
 int VECTOR::GetSize() 
    {   
        return n;
    }
 
 float VECTOR::Get(int t) 
    {
        return A[t];
    }
 
 int VECTOR::Check(int value,VECTOR what)
    {
        int flag1;
        flag1=0;
        for(int j=0; j<what.GetSize();j++)
            {
                if(what.Get(j)==value)
                    {
                        flag1++;
                    }
            }
                if(flag1==0)
                    {
                        cout<<"\n Введенный элемент не может содержаться массиве!";
                        cout<<"\n Массив должен содержать следующие элементы:";
                        what.Print();
                        return 1;
                        _getch();
                    }
        return 0; 
 
    }
 
 void VECTOR::Set(int j, T value)
    {
        if(j<GetSize())   
            {
                A[j]=value;
            }
        else
            {
                cout<<"Вы вышли за пределы выделенной для программы памяти!!!";
                cout<<"\nПрограмма завершает свою работу!!!";
                _getch();
                exit(0);
            }
    }
 
 void VECTOR::Print()
    {
        cout << "[";    
        for(int i=0;i<n;i++)
            {
               cout << " "<<A[i];
            };
        cout << "]";    
    };
 
 void VECTOR::Counting(VECTOR what)
    {
        int schet,result, min;
        VECTOR count(what.GetSize());
        Print();
        what.Print();
        for (int i=0; i<what.GetSize();i++)
            {
                schet=0;
                for(int j=0; j<GetSize();j++)
                    {
                        if(A[j]==what.Get(i))
                            {
                                schet++;
                            }
                    }
                count.Set(i, schet);
            }       
        min=what.GetSize()-1;
        for(int j=0;j<what.GetSize();j++)
            {
                if((count.Get(j)!=0)&&(count.Get(j)<min))
                    {
                        min=count.Get(j);
                        result=j;
                    }
            }
        cout<<"\nЧисло "<< result <<" встречается реже остальных: "<<min<<" раз.";
 }
сама прога:
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
#include <iostream>
#include <conio.h>
#include <clocale>
#include "VECTOR.h"
using namespace std;
 
int main()
{
    setlocale(LC_CTYPE,"Russian");
    int n, input,in_elem;
    VECTOR Check_Arr(7);
        cout << "Введите элементы проверочного массива: ";
        cout << "\nА= [ ";
        for(int i = 0; i < 7; i++)
            {
                cin>>in_elem;
                Check_Arr.Set(i,in_elem);
            }
        cout << "]";
        do
            {
                cout << "Введите размерность массива: ";
                cin >> n; 
            }
        while(n <= 0); // Проверка корректности ввода
    VECTOR V(n);
    cout << "\nВведите элементы массива А: ";
    for(int i = 0; i < n; i++)
        {
            do
                {
                    cout << "\nВведите [" << i << "] элемент: ";
                    cin >> in_elem;
                    input=V.Check(in_elem,Check_Arr);//проверка, чтоб вводимый массив 
                }                        //состоял из нужных нам элементов
            while(input==1);
            V.Set(i,in_elem);
        }
    V.Counting(Check_Arr);
    _getch();
    return 0;
}
Скжите пожалуйста, как переписать программу используя шаблоны, чтоб массив мог состоять не только из цифр, но и из символов, например (0,1,2,A,B,C,D).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2013, 02:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить, какой символ наиболее редко встречается в заданном массиве(шаблоны) (C++):

Определить, какой символ сколько раз встречается в заданном массиве - C++
Помогите решить задание: Дано массив символов. Определить , какой символ сколько раз встречается в данном массиве И можно...

Вывести те числа, которые наиболее редко встречаются в массиве и количество их повторений - C++
Дан одномерный массив из 150 случайных целых чисел в диапазоне от 14 до 37 включительно. Вывести те числа, которые наиболее редко...

Определить, какой символ чаще других встречается в данном файле. - C++
Помогите написать программу пожалуйста Определить, какой символ чаще других встречается в данном файле. желательно с описанием по...

Найти слово, в котором заданный символ встречается наиболее часто - C++
Помогите с задачей. Дан текст. Найти в нём слова, в которых некоторый заданный символ встречается наибольшее число раз.

Найти наиболее редко встрещающую цифру - C++
бо'льшую часть задания я сделал сам... вот заступорился вот на этом: &quot;найти наиболее редко встрещающую цифру в числе&quot; В функцию мы...

Сколько раз какой символ встречается в файле - C++
Здравствуйте.. У меня просьбочка небольшая, нужно решить такую задачку, кому она по силу? Помогите пожалуйста..

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
anmartex
...
1703 / 1196 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
14.02.2013, 05:55 #2
Так как-то:
vector.h
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
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include <stdexcept>
#include <string>
#include <sstream>
#include <utility>
 
using namespace std;
 
template <class T>
class TVector
{
   protected:
      int n;
      T* A;
 
   public:
      // TODO: Исключение в конструкторе вещь не благодарное
      //       но если хотите проверять new ...
      TVector(int n) throw (std::runtime_error);
      TVector(const TVector& what) throw (std::runtime_error);
 
      ~TVector();
      void Set(int index, T value) throw (std::runtime_error);
      int GetSize() const;
      T Get(int t) const throw (std::runtime_error);
      int Check(T value, TVector what) const throw (std::runtime_error);
      std::string AsString() const;
      std::pair<T, int> Counting(const TVector& what) const;
};
 
//----------------------------------------------//
template <class T>
TVector<T>::TVector(int _n) throw (std::runtime_error)
{
   n = _n;
   A = new T[n];
   if (A == NULL)
   {
      throw std::runtime_error("Недостаточно памяти");
   }
   for (int i = 0; i < n; i++)
   {
      A[i] = 0;
   }
}
//----------------------------------------------//
template <class T>
TVector<T>::TVector(const TVector& what) throw (std::runtime_error)
{
   n = what.n;
   A = new T[n];
   if (A == NULL)
   {
      throw std::runtime_error("Недостаточно памяти");
   }
   for (int i = 0; i < n; i++)
   {
      A[i] = what.A[i];
   }
};
//----------------------------------------------//
template <class T>
TVector<T>::~TVector()
{
   if (A)
   {
      delete[] A;
   }
}
//----------------------------------------------//
template <class T>
int TVector<T>::GetSize() const
{
   return n;
}
//----------------------------------------------//
template <class T>
T TVector<T>::Get(int index) const throw (std::runtime_error)
{
   if (index >= n)
   {
      throw std::runtime_error("Выход за пределы массива");
   }
 
   return A[index];
}
//----------------------------------------------//
template <class T>
int TVector<T>::Check(T value, TVector what) const throw (std::runtime_error)
{
   int flag1;
   flag1 = 0;
   for (int j = 0; j < what.GetSize(); j++)
   {
      if (what.Get(j) == value)
      {
         flag1++;
      }
   }
   if (flag1 == 0)
   {
      std::stringstream ss;
      ss << "Введенный элемент не может содержаться в массиве!\n"
         << "Массив должен содержать следующие элементы: "
         << what.AsString();
      throw std::runtime_error(ss.str());
   }
 
   return 0;
}
//----------------------------------------------//
template <class T>
void TVector<T>::Set(int index, T value) throw (std::runtime_error)
{
   if (index < GetSize())
   {
      A[index] = value;
   }
   else
   {
      throw std::runtime_error("Вы вышли за пределы выделенной для программы памяти!!!\n"
                               "Программа завершает свою работу!!!");
   }
}
//----------------------------------------------//
template <class T>
std::string TVector<T>::AsString() const
{
   std::stringstream ss;
   ss << "[";
   for (int i = 0; i < n; i++)
   {
      ss << " " << A[i];
   };
   ss << "]";
 
   return ss.str();
};
//----------------------------------------------//
template <class T>
std::pair<T, int> TVector<T>::Counting(const TVector& what) const
{
   int schet = 0;
 
   TVector<int> count(what.GetSize());
 
   for (int i = 0; i < what.GetSize(); i++)
   {
      schet = 0;
      for (int j = 0; j < GetSize(); j++)
      {
         if (A[j] == what.Get(i))
         {
            schet++;
         }
      }
      count.Set(i, schet);
   }
 
   int min = 0;
   for (int j = 0; j < what.GetSize(); j++)
   {
      if (count.Get(j) < count.Get(min))
      {
         min = j;
      }
   }
 
   return std::pair<T, int>(what.Get(min), count.Get(min));
}
//----------------------------------------------//
Пример использования для типа char:
mina.cpp
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
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <clocale>
 
#include "vector.h"
 
int main()
{
   ::setlocale(LC_CTYPE, "Russian");
 
   char in_elem = 0;
   TVector<char> Check_Arr(7);
 
   cout << "Введите элементы проверочного массива:\nА = ";
   for (int i = 0; i < Check_Arr.GetSize(); i++)
   {
      cin >> in_elem;
      try
      {
         Check_Arr.Set(i, in_elem);
      }
      catch (const std::runtime_error& error)
      {
         std::cerr << error.what() << std::endl;
         return 1;
      }
   }
 
   int n = 0;
   do
   {
      std::cout << "Введите размерность массива: ";
      cin >> n;
   }
   while (n <= 0);
 
   TVector<char> V(n);
   std::cout << "Введите элементы массива А: " << std::endl;
 
   int input = 0;
   for (int i = 0; i < V.GetSize(); i++)
   {
      do
      {
         cout << "Введите [" << i << "] элемент: ";
         cin >> in_elem;
         try
         {
            input = V.Check(in_elem, Check_Arr);
            V.Set(i, in_elem);
         }
         catch (const std::runtime_error& error)
         {
            std::cerr << error.what() << std::endl;
            // TODO: не хорошо, но тогда i-ый элемент будет равен 0
            --i;
         }
      }
      while (input == 1);
   }
 
   std::cout << "\n" << Check_Arr.AsString() << "\n"  << V.AsString() << std::endl;
 
   std::pair<char, int> result = V.Counting(Check_Arr);
 
   std::cout << "Значение \""<< result.first << "\" встречается реже остальных: "
             << result.second << " раз." << std::endl;
 
   return 0;
}
Zeleniy
0 / 0 / 1
Регистрация: 24.03.2010
Сообщений: 46
14.02.2013, 20:21  [ТС] #3
а как будет если не использовать STL?

Добавлено через 9 часов 22 минуты
все.. разобрался, спасибо))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2013, 20:21
Привет! Вот еще темы с ответами:

Какой символ чаще других встречается в данном файле - C++
Написать программу, определяющую какой символ чаще других встречается в данном файле. Имя файла задается в командной строке.

Массивы строк. Какой символ встречается в этой строке чаще всего? - C++
напишите программу которая принимает с клавы строку и определяет какой символ встречается в этой строке чаще всего. Если таких символов...

Строки: определить, какая буква встречается наиболее часто в словах - C++
Ребят, помогите пожалуйста, уже пол дня сижу и не знаю как делать, в строках вообще не шарю(( Задача такова: какая буква встречается...

Самый редко встречаемый символ - C++
Задан массив A. Найти самый редко встречаемый символ. Может быть пригодится кому, но вот исходник задачи обратной - самый часто...


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

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

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