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

подскажите пожалуйста, что не так? - C++

Восстановить пароль Регистрация
 
Irenija
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 21
09.05.2011, 21:41     подскажите пожалуйста, что не так? #1
Здравствуйте.

У меня вопрос по поводу задачи: найти букву, чаще встречающуюся в тексте.

Т.е. я ввожу массив из элементов, записываю в матрицу не повторяющиеся элементы *если есть эл-ты, которые повторяются, я увеличиваю кол-во, которое уже есть в матрице * после, ищу эл-т с наибольшим кол-ом и вывожу его, при том само кол-во выводить не обязательно.
там еще такая путаница с типами происходит ( получается, в матрице есть одновременно как тип char, так и тип int ( а как 2 одномерных массива между собой связать, я додумать не могу (
и сразу вопрос : можно ведь обращаться к конкретным эл-ам матрицы, например math[i][0] - это получается i-ая строка в первом столбце ?
тогда, чтобы присвоить искомые кол-ва букв достаточно записи math[i][1] = kol + 1 ?

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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{ 
char tmas[10]; 
char math[10][10];    char ib;
cout << "kol-vo el-ov "; int z; cin >> z;
 cout << "vvod " << z << " bukv " ;
  for (int k=0; k<z; k++) cin >> tmas[k];  //vvod massiva tmas[k] - изначальный массив
    
  int kol=0;
 
  for (int k=0; k<z; k++)  //заполнение матрицы
    {
        for (int i=0; i<z; i++)
        {
            for(int j=0; j<=1; j++)
            {
            if(tmas[k] != math[i][j]) {math[i][j] = tmas[k];
                                               math[i][j] = kol+1;
                                                  }
            else
                 math[i][1]=kol+1;
            }
        }
           for (int i=0; i<z; i++)  //поиск макс числа в числах
           {
               for (int j=0; j<=1; j++)
               {
                   if(math[i][j] > math[i++][j]) ib = math[i][j];
               }
           }
   }
cout << ib;
 
 
 getch();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
09.05.2011, 22:26     подскажите пожалуйста, что не так? #2
Ну например так.
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
#include <stdio.h>
 
int main(int argc, char *argv[]) {
  char file_name[] = "/usr/share/doc/linux-generic/copyright";
  FILE *source = fopen(file_name, "r");
  // Как вариант, можно считывать из стандартного ввода:
  // source = stdin;
  if (source == NULL) {
    perror("Error opening file");
  } else {
    int symbol, max_symbol = 0;
    char symbols[256];
    size_t i;
    for (i = 0; i < 256; ++i)
      symbols[i] = 0;
    do {
      symbol = fgetc(source);
      ++symbols[symbol];
      if (symbols[max_symbol] < symbols[symbol])
        max_symbol = symbol;
    } while (symbol != EOF);
    printf("Most common symbol is %c. File has it %d time(s).\n",
           max_symbol, symbols[max_symbol]);
    fclose(source);
  }
  return 0;
}
ZeD.Ok
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 5
09.05.2011, 22:47     подскажите пожалуйста, что не так? #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
#include<iostream>
using namespace std;
void main()
{
    cout<<"Vvedite chislo elementov: ";int chislo;cin>>chislo; //число элемнтов в массиве
    cout<<"Vvedite stroku: ";
    char *stroka; //для строки, память выделил динамически, можно все сделать через массив,
    stroka=new char [chislo+1]; //если не знаешь, что такое указатели
    cin>>stroka; //считываем строку
    
    int *stroka_kol; //массив количеств всех символов
    stroka_kol=new int [256];
    for(int i=0;i<=256;i++)
        stroka_kol[i]=0; //изначально обнуляем значения
 
    int j=0;
    while(j<chislo)
    {
        stroka_kol[stroka[j]]++; //считаем количества каждого символа в строке
        j++;
    }
 
    int pred=stroka_kol[0];
    char max=0;
    for(int k=1;k<=256;k++)
    {
        if(stroka_kol[k]!=0)
        {
            if(stroka_kol[k]>pred)
                max=k;              //находим макс., используя предыдущий и следующий ненулевые элементы
            pred=stroka_kol[k];
        }
    }
    cout<<max<<'\n'; //выводим часто встречаемый символ
}
Irenija
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 21
10.05.2011, 10:51  [ТС]     подскажите пожалуйста, что не так? #4
спасибо )
сейчас попробуем

Добавлено через 1 час 55 минут
спасибо всем за ответы)
вот работающая прога, только чтение из файла *но мне так и нужно было;-) *

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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{ 
  FILE *file; char ch; int q = 0; int l = 0;
  char *mas; mas = new char [l+1];
  file = fopen("F:\\text.txt","r");
  if (file == NULL) cout << " ошибка открытия файла ";
  else 
  {
      while ((ch = getc(file)) != EOF) { mas[q] = ch;
                                         q++; 
                                         l = q;
                                       }
  
  
        int *mas_kol; 
        mas_kol = new int [256];
        for(int i=0; i<=256; i++) mas_kol[i]=0; 
 
        int j=0;
        while(j < l)
        {
                mas_kol[mas[j]]++; 
                j++;
        }
 
        int pred = mas_kol[0];
        char max = 0;
        for(int k=1; k<=256; k++)
        {
                if(mas_kol[k]!=0)
                {
                        if(mas_kol[k]>pred)
                                              max = k;              
                                              pred = mas_kol[k];
                }
        }
  
cout << max;
fclose(file);
  }
getch();
}
ZeD.Ok
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 5
10.05.2011, 12:51     подскажите пожалуйста, что не так? #5
ну да) использовали мою идею)
Yandex
Объявления
10.05.2011, 12:51     подскажите пожалуйста, что не так?
Ответ Создать тему
Опции темы

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