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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Организовать последовательность связей, краткое хранения не отрицательное целых 9999, так чтобы значения в которых Последнее цифра одинакова отвечала http://www.cyberforum.ru/cpp-beginners/thread785981.html
Организовать последовательность связей, краткое хранения не отрицательное целых 9999, так чтобы значения в которых Последнее цифра одинакова отвечала к одному и тому подсписку
C++ В матрицы из действительных чисел поменять местами столбцы В матрицы из действительных чисел поменять местами последний столбец и столбец, содержащий минимальный по абсолютной величине элемент матрицы. http://www.cyberforum.ru/cpp-beginners/thread785978.html
C++ Написать программу, которая находит в массиве самое маленькое нечетное число и показывает его на экран
Написать программу, которая находит в массиве самое маленькое нечетное число и показывает его на экран
"Змейка", C++ (консоль) C++
Доброго инета всем. Я тут делаю задание по игре "Змейка"... Вот пока код еще не дописанный: #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h> #include <time.h> #include <iostream>
C++ Преобразовать массив удвоив длину его серии http://www.cyberforum.ru/cpp-beginners/thread785959.html
Дано целое число K (> 0) и целочисленный массив размера N. Преобразовать массив, удвоив длину его серии с номером K. Если серий в массиве меньше K, то вывести массив без изменений. Под серией понимается ряд одинаковых цифр к примеру 1112222225555555
C++ Написать программу, которая находит сумму четных и сумму нечетных элементов массива Написать программу, которая находит сумму четных и сумму нечетных элементов массива. подробнее

Показать сообщение отдельно
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
14.02.2013, 05:55     Определить, какой символ наиболее редко встречается в заданном массиве(шаблоны)
Так как-то:
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;
}
 
Текущее время: 13:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru