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

Нужно вынести часть программы в отдельный модуль - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Однозвязный список через template http://www.cyberforum.ru/cpp-beginners/thread887472.html
Помогите разобрать код в тех местах где я поставил //???? . Код не мой, и указатели я не очень хорошо понимаю. #include <iostream> using namespace std; /////////////////////////////////////////// template <class T> struct element { element* next;
C++ Классы: составить описание объектного типа Matrix (инициализации единичной, квадратных матриц, сложение, транспонирование, вычисление определителя) Составить описание объектного типа Matrix, обеспечивающего инициализации единичной матрицы, квадратных матриц, сложение матриц, транспонирование, вычисление определителя матрицы. http://www.cyberforum.ru/cpp-beginners/thread887469.html
C++ Получить строку, в которой наибольшее число знаков препинания
Дан текстовый файл. Получить строку, в которой наибольшее число знаков препинания.
Подключение статической библиотеки (libxls) C++
Здравствуйте, недавно столкнулся с необходимостью читать из .xls файла, нашел для этого библиотеку libxls. В их readme написано, что они "A multiplatform, C/C++ library for parsing Excel(TM) files." (то есть я так понял что в винду в проект с плюсами это запихнуть можно), однако в архиве с названием "Win32 binary: libxls-0.2.0-win32.tar.gz" (судя по всему для винды?) лежат хедеры и файл .a,...
C++ где моду прочитать о деревьях с нуля? http://www.cyberforum.ru/cpp-beginners/thread887463.html
где моду прочитать о деревьях с нуля?
C++ Как правильно сделать функцию? (Из Паскаля в С++) Добрый день, уважаемые программисты! Подскажите пожалуйста вот такое дело: есть код на Турбопаскале, и надо всё это дело в С++. Вроде бы переводила, переводила, но вот выплыл такой кусок кода и я не знаю что делать: procedure Delete (X: string; var PNode: TPtrNode; var H: boolean); //выполняет поиск удаляемого узла и его замену var Q: TPtrNode; // сохраняет указатель на удаляемый узел подробнее

Показать сообщение отдельно
Lilechka
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 25
04.06.2013, 23:12  [ТС]
Цитата Сообщение от XRuZzz Посмотреть сообщение
напишите краткто требования к вашей программе, что она должна выводить, в каком виде, для кого эти сведения будут полезны. Тогда мы сможем поговорить о том как разбить её на модули.
Вот такое вот задание: реализовать программу, подсчитывающую количество информации для каждого символа заданного текста.
В ней считается количество уникальных символов в тексте, количество всех символов в тексте, сколько раз каждый символ встретился в тексте, также частота встречаемости каждого символа, затем по формуле Шеннона считается количество информации для каждого символа
Препод код вобщем то одобрил, но дал еще вот такое задание: Основные операции программы (подсчёт количества символов, подсчёт и вывод количества информации) рекомендую реализовать в виде отдельной функции. Точка входа будет лишь вызывать нужную с параметром -- именем файла. Эта функция, в свою очередь, будет выполнять всю необходимую работу и вызывать другие. Выделите основной и вспомогательный функционал по подсчёту количества информации в отдельный модуль (*.h, *.cpp).

Добавлено через 2 минуты
Цитата Сообщение от Tulosba Посмотреть сообщение
Lilechka, код плохой. Намешано всё в кучу и FILE* и fstream, cout и printf. По-хорошему, надо всё переписать. Но если Вам нужно просто разбить на модули, возможно, подойдет такой вариант:

main.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include "info.h"
 
using namespace std;
 
int main() {
    setlocale(LC_ALL,"Rus"); // включаем в консоли русский язык
    const int MAX_PATH = 256; // константа, содержащая максимальную длину имени
    char *fn1 = new char[MAX_PATH]; // строка для хранения имени файла ввода
    cout << "Введите файл для чтения: ";
    cin >> fn1;
    FILE *f = NULL;
    f = fopen(fn1, "r"); // открываем файл для чтения
    if (f == NULL) {
        printf("Файл не найден: \"%s\"\n", fn1);
    } else {
        func( fn1, f );
    }
    return 0;
}


info.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
#include "info.h"
#include <fstream>
#include <map>
 
void info( const char* fn1, FILE* f )
{
    map<char, int> letter; // создаем контейнер(ассоциативный массив) letter; char - буква, int - сколько раз встречается в тексте
    ifstream input(fn1);                // считывать файл по одному символу
    while (!input.eof())                //пока не конец файла, цикл
        if (input.peek() != EOF)        //если следующий символ во входном потоке не равен концу файла
            letter[input.get()]++;      //плюсуем соответсвующий счетчик
    int res=0;                          //с помощью res считается общее количество символов в тексте
    char c;
    while ((c = fgetc(f)) != EOF) {
        if (c != 10 && c != 13) {
            res++;
        }
    }
    input.close();                      //закрываем входной поток
    cout << "Эти символы встречаются в тексте столько раз" << endl;
    for (map<char, int>::iterator it = letter.begin(); it != letter.end(); it++) {  /*итератор типа map<char,int> (то есть указатель) 
                                                                                    инициализируем адресом первого элемента. 
                                                                                    Пока итератор не равен адресу последнего элемента, итератор++ */
        cout << it->first << '=' << it->second << endl; // берем указатель, разыменовываем его и обращаемся к элементу first структуры
        double chastota = ((double) (it->second)/res)*1.00; // считаем частоту встречаемости символа
        double countInf=-(chastota*(log(chastota)/log(2))); // считаем количество информации для символа
        cout << "Частота встречаемости символа " << it->first << " = ";
        printf("%1.7f", chastota);
        cout << endl;
        cout << "Количество информации = ";
        printf("%1.3f", countInf);
        cout << " бит" << endl;
    }
    cout << "Всего уникальных символов в тексте: " << letter.size() << endl;
    cout << "Всего символов в тексте: " << res << endl;
}


info.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
void info( const char* fn1, FILE* f );
знаю, что так себе код, но я только учусь, да и переписывать уже времени нету, сдавать скоро, я думаю ваша реализация разделения вполне подойдет)

Добавлено через 5 минут
Tulosba, скажите, а можно info.cpp и info.h объединить в один модуль? ну чтобы были только main.cpp и info.h
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru