Консультация № 158446
22.01.2009, 16:40
0.00 руб.
0 4 2
Помогите решить задачу плиззз!!!!!
сказали написать с помощью масивов!!!! вот цик который считает for(int i=0;(i<h)&&(A[i]'='10');i++)
пользователь вводит строку, программа выводит на экран все символы которые есть в строке и сколько раз они повторяются


[q=][/q]

Обсуждение

Неизвестный
22.01.2009, 17:23
общий
это ответ
Здравствуйте, Понаморенко Андрей Андреевич!
Немного не понял зачем вы написали цикл. Вот мое решение вашей задачи



#include <conio.h>
#include <stdio.h>

//структура в которой два поля. symbol хранит символ, count хранит количество его вхождения
struct rec {
char symbol;
int count;

};

int main(int argc, char* argv[])
{
char s; //переменная содержит текущий набранный символ
rec mass[256]; // массив вышеописанных структур для всех возможных символов (их 256)
for(int i=0;i<256;i++) { //циклом инициализируем элементы массива
mass[i].symbol=(char)i; //поле symbol всех элементов массива, т.е. присваиваем им все возможные значения от кода 0 до 255
mass[i].count = 0; //счетчик вхождений для каждого символа ставим в ноль
}
while(1) { //запускаем бесконечный цикл в нем будем считать вхождение каждого символа
s = getche(); //получим символ с клавиатуры
if(s == 13) break; //если нажат Enter то выйдем из цикла
mass[(int)s].count++; //увеличим счетчик вхождений для символа с соответствующим кодом на единицу
}

for(int i = 0; i < 256; i++) { // выведем статистику
if(mass[i].count) //только для тех символов у которых счетчик отличен от нуля
printf("Symbol: '%c' Count: %d\n", mass[i].symbol, mass[i].count); //собственно вывод

}
getch(); //ждем нажатия клавиатуры (чтобы окошко не исчезло сразу)
return 0;
}
Неизвестный
22.01.2009, 19:52
общий
БОЛЬШОЕ СПАСИБО!!!!!при много благодарен!!!ты оч меня выручил!!!!
можно я по наглею!!!! =)))
ты бы не мог написать в таком стиле :
#include <iostream>
#include <time.h>
using namespace std;
void main ()
{
srand(time(NULL));
rand();
double r;
const int n=10;
int B[n];
int A[n];
for(int i=0;i<n;i++)
{
r=(double)rand()/RAND_MAX;
A[i]=(int)(r*10);
}
for(int i=0;i<n;i++)

cout<<A[i]<<" ";
cout<<"\n";
for(int i=0;i<n;i++)
{
B[i]=A[n-1-i]*2;

}
for(int i=0;i<n;i++)

cout<<B[i]<<" ";
}


просто мне не оч понятно))что-то понял а что-то нет)
заранее блогадарен!!!!
Неизвестный
22.01.2009, 20:03
общий
это ответ
Здравствуйте, Понаморенко Андрей Андреевич!
Не ясно при чем тут цикл Вами написанный. Вот программа на C++. Программа тестировалась на MS Visual Studio 2008.

Приложение:
// Условие задачи.
// Пользователь вводит строку, программа выводит на экран все символы которые есть в строке и сколько раз
// они повторяются.

// Важно!!!
// Для корректного отображения русских букв в консоли
// зайдите в свойства консоли(нажав на пиктограмме консоли в левом верхнем углу окна)
// и установите шрифт Lucida Console

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <windows.h>
#ifdef max
#undef max
#endif

using namespace std;

// Класс счетчик
class counter
{
private:
wchar_t _letter; // Символ
unsigned _count; // Сколько раз встречается
public:
counter(wchar_t letter,unsigned count=0)
:_letter(letter)
,_count(count)
{}
// Оператор инкремента
counter operator++()
{
_count++;
return *this;
}
// Оператор равенства
bool operator==(const wchar_t letter)const
{
return _letter==letter;
}
// Оператор "меньше"
bool operator<(const counter& Counter)const
{
return _letter<Counter._letter;
}
// Оператор потокового вывода
friend wostream& operator<<(wostream& stream,counter& Counter)
{
stream<<Counter._letter<<" - "<<Counter._count;
return stream;
}
};

// Здесь хранится таблица символов
vector<counter> letters;

// Возвращает ссылку на счетчик
counter& getCounter(wchar_t letter)
{
vector<counter>::iterator it=find(letters.begin(),letters.end(),letter);
if(it==letters.end())
{
counter newCounter(letter);
letters.push_back(newCounter);
return letters[letters.size()-1];
}
return *it;
}

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
wcout<<"Введите строку для разбора:"<<endl;
wstring str;
getline(wcin,str);
for(wstring::iterator it=str.begin();it!=str.end();it++)++getCounter(*it);
sort(letters.begin(),letters.end());
wcout<<"Получена следующая таблица символов:"<<endl;
for(vector<counter>::iterator it=letters.begin();it!=letters.end();it++)wcout<<*it<<endl;
system("PAUSE");
return 0;
}
Неизвестный
22.01.2009, 20:25
общий
мне учитель сказал написать так((((
а если не сделаю то кирдык мне!он сказал что все предыдущие оценки понизит(((
Форма ответа