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

Нужно объяснить программу, т.е. какие процессы проходят - C++

Восстановить пароль Регистрация
 
Evgeniy_Fox
5 / 5 / 0
Регистрация: 22.09.2012
Сообщений: 150
20.11.2012, 13:17     Нужно объяснить программу, т.е. какие процессы проходят #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
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
// Laboratornaya_3.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <string>
#include <conio.h>
#include <stdio.h>
using namespace std;
int enterMenu();    //объявление функции
 
int menu(char *str, bool p) //главное меню
{
    int k = 0;  //номер пункта меню
    for(;;){
        cout << "1.Ввести строку." << endl;
        cout << "2.Подсчитать количество знаков." << endl;
        cout << "3.Вывести результат." << endl;
        cout << "4.Удалить строку." << endl;
        cout << "5.Выход." << endl;
        cout << "_______________________________________________________________________________" << endl;
        k = enterMenu();
        if (k>0 && k<6)
            break;
        else
            cout << "ОШИБКА! Неверный номер пункта, повторите ввод." << endl;
            cout << "_______________________________________________________________________________" << endl;
    }
    switch (k){
        case 1:
            return k;
        case 2:
            if (strlen(str)>1)
            {
                return k;
            }
            else
            {
                cout << "ОШИБКА! Строка не введена." << endl;
                cout << "_______________________________________________________________________________" << endl;
                break;
            }
        case 3:
            if (p)
                return k;
            else
                {
                    cout << "ОШИБКА! Знаки не подсчитаны." << endl;
                    cout << "_______________________________________________________________________________" << endl;
                    break;
                }
        case 4:
            if (strlen(str)>1)
            {
                return k;
            }
            else
            {
                cout << "ОШИБКА! Строка не введена." << endl;
                cout << "_______________________________________________________________________________" << endl;
                break;
            }
        case 5:
            return k;
    }
    return 0;
}
 
int enterMenu() //Выбор номера пункта меню
{
    int s = 0;
    do {
            cout << "Введите номер пункта: ";
            cin.clear();    //сброс битов ошибок входного стандартного потока
            cin.sync(); //очищение буфера стандартного ввода
            cin >> s;
        } while( cin.fail() );  //проверка на ошибку предыдущего ввода со стандартного потока
    return s;
}
 
 
char *enterStr(char *str)
{
    char ch = 0;
    while (true)
    {
        ch = _getch();
        cout << ch;
        if (ch == 13)
            break;
        int len = strlen(str);
        char *tmp = new char[len+2];
        strcpy(tmp, str);
        tmp[len] = ch;
        tmp[len+1] = '\0';
        delete [] str;
        str = tmp;
    }
    cout << endl;
    return str;
}
 
int signCh(char *str, bool &p)
{
    int count = 0;
    char c[] = {',','.','<','>','{','}','[',']','(',')','?','\"',';',':','!','@','#','$','%','^','&','*','|','/','\n'};
    for (int i = 0; i < strlen(str); i++)
    {
        int m = 0;
        while (c[m] != '\n')
        {
            if (str[i] == c[m++])
                count++;
        }
    }
    p = true;
    return count;
}
 
void showResult(char *str, int count)
{
    cout << "В строке: \"" << str << '\"' << ' ' << "Знаков пунктуации: " << count << endl;
    cout << "_______________________________________________________________________________" << endl;
}
 
char *delStr(char *str, bool &p)
{
    p = false;
    delete [] str;
    str = new char[1];
    str[0] = '\0';
    return str;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char *str = new char[1];
    str[0] = '\0';
    int count = 0;
    bool p = false;
    while (true)
    {
        int num = menu(str, p);
        if (num == 1)
        {
            str = delStr(str, p);
            str = enterStr(str);
        }
        else if (num == 2)
        {
            count = signCh(str, p);
        }
        else if (num == 3)
        {
            showResult(str, count);
        }
        else if (num == 4)
        {
            str = delStr(str, p);
        }
        else if (num == 5)
            return 0;
    }
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2012, 13:17     Нужно объяснить программу, т.е. какие процессы проходят
Посмотрите здесь:

C++ Объяснить программу
C++ просто объяснить программу.
Объяснить программу C++
C++ Объяснить, какие действия выполняет данный фрагмент программы
Нужно объяснить ошибку C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
20.11.2012, 13:22     Нужно объяснить программу, т.е. какие процессы проходят #2
объясняйте, мы внимательно слушаем
Evgeniy_Fox
5 / 5 / 0
Регистрация: 22.09.2012
Сообщений: 150
20.11.2012, 13:54  [ТС]     Нужно объяснить программу, т.е. какие процессы проходят #3
Очень смешно смеяться над нубом, который начинает только программировать и нашёл интересный пример из книги. Ты прям Евгений Ваганыч
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
20.11.2012, 14:11     Нужно объяснить программу, т.е. какие процессы проходят #4
да действительно как это я так облажался, я же телепат и точно знаю, что конкретно вы не понимаете.

Объясняю: Любую задачу можно представить в виде сценария варианта использования. (хотя Дейтел поясняет программы на псевдокоде, но эти способы во многом похожи)
Выделим действующее лицо для вашей программы, пусть это будет пользователь.
Важно понять какова цель пользователя. как эта программа помогает пользователю решить его задачи.

Чтобы восстановить эти требования по коду необходимо написать комментарии к методам. Думаю что врятли у кого то найдётся столько времени, чтобы для вас комментировать каждую строчку. Поэтому я советую написать вам комментарии к тому что вы понимаете. или вы уже это сделали?
Evgeniy_Fox
5 / 5 / 0
Регистрация: 22.09.2012
Сообщений: 150
20.11.2012, 14:14  [ТС]     Нужно объяснить программу, т.е. какие процессы проходят #5
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
char *delStr(char *str, bool &p)
{
    p = false;
    delete [] str;
    str = new char[1];
    str[0] = '\0';
    return str;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char *str = new char[1];
    str[0] = '\0';
    int count = 0;
    bool p = false;
    while (true)
    {
        int num = menu(str, p);
        if (num == 1)
        {
            str = delStr(str, p);
            str = enterStr(str);
        }
        else if (num == 2)
        {
            count = signCh(str, p);
        }
        else if (num == 3)
        {
            showResult(str, count);
        }
        else if (num == 4)
        {
            str = delStr(str, p);
        }
        else if (num == 5)
            return 0;
    }
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
20.11.2012, 14:20     Нужно объяснить программу, т.е. какие процессы проходят #6
как бы очевидно, что пользователь достигает своей цели когда вызывается showResult(). это и является ключевым моментом в программе. естественно, что без вызова signCh мы не получим правильный результат
Yandex
Объявления
20.11.2012, 14:20     Нужно объяснить программу, т.е. какие процессы проходят
Ответ Создать тему
Опции темы

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