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

почему когда вводишь пунк 2 не появляется решение - C++

Восстановить пароль Регистрация
 
 
easyfrag
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 111
12.06.2013, 18:52     почему когда вводишь пунк 2 не появляется решение #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
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
double calc(int n, double sum, int a, int b, double p, double f)
{
    if(n == 0)
        return sum;
    else
    {
        sum += p / (f * (1.0 + (1.0 * a) * a + (1.0 * b) * b));
 
        p *= 2;
        f *= n + 1;
 
        int a_ = a, b_ = b;
        a = 3 * b_ + 2 * a_;
        b = 2 * a_ + b_;
 
        sum = calc(n - 1, sum, a, b, p, f);
        return sum;
    }
}
 
int cikl()
{
    const int SIZE=10;
    int a[SIZE+1]={0,1}, b[SIZE+1]={0,1};
    unsigned int factorial[SIZE+1]={0,1};
    unsigned int n, i;
    double sum=0;
    for (i=2; i<=SIZE; i++)
    {
        a[i] = 3*b[i-1] + 2*a[i-1];
        b[i] = 2*a[i-1] + b[i-1];
        factorial[i] = i*factorial[i-1];
    }
    std::wcout << L"введите n : ";
    std::wcin >> n;
    for (i=1; i<=n; i++)
        sum = sum + double(pow(2.0, (double)i)) / ((1 + pow(a[i], 2.0)+pow(b[i],(double)2)) * factorial[i]);
    std::wcout << sum << std::endl;
    system("pause");
    return 0;
}
int vvod()
{
    int n;
    cout << "Введите n : ";
    cin >> n;
    return n;
}
void zapis(int n, double sum, int a, int b, double p, double f)
{
    //записываем в файл
    ofstream out("result.txt");
    out << calc(n, sum, a, b, p, f);
    out.close();
}
double file(int n, double sum, int a, int b, double p, double f)
{ 
    //читаем из файла
    ifstream in("result.txt");
    double result;
    in >> result;
    in.close();
    cout << result;
cout << calc(n, sum, a, b, p, f) << endl << endl;;
return(0);
}
int About()
{
printf("\n ");
printf("\n ");
printf("\n ");
printf(" \n================================================================================\n"
 "\t  Зачётная работа\n"
 "\tВариант 10\n"
"\tВыполнил студент группы ИНБc-11 Огибалов дмитрий\n");
printf(" \n================================================================================\n");
return(0);
}
int help()
{
    printf("\nЗадание №10\n\n");
    printf("Даны числа a1=b1=1 и натуральное n.\n"); 
    printf("В последовательности ak=3*bk-1+2*ak-1; bk=2*ak-1+bk-1,k=2,3…\n"); 
    printf("Найти:  сумму 2^k/(1+ak^2+bk^2)*k!\n"); 
    return 1;
}
int main()
{
    setlocale(LC_ALL,"Russian");
    int ch;
    int n;
    int a = 1;
    int b = 1;
    int z=0;
    double p = 2.0, f = 1.0;
    double sum = 0;
    bool flag=0,flag1=0;
        bool flug=0;
           do
        {
system("cls");
printf("\t*********************МЕНЮ**************************\n");
printf("1. Ввод\n");
printf("2. Решение\n");
printf("3. Цикл\n");
printf("4. About \n");
printf("5. Help\n");
printf("6. Выход\n");
printf("\n");
printf("Нажмите клавишу для вызова пункта меню\n");
ch=caas();
switch(ch)
{
case 1://если 1
setlocale(LC_ALL,"Russian");
    system("cls");
    printf("Нажмите 1 для ввода данных с клавиатуры.\n");
    printf("Нажмите 2 для ввода данных их файла.\n");
    ch=caas();
    switch(ch){
case 1:
     system("cls");
        n=vvod();
        flag=1;
        break;
case 2:
     system("cls");
        file(n, sum, a, b, p, f);
        flag1=1;
        break;
    }
break;
case 2:
system("cls");
if (flag==1||flag1==1) //если введен данные пункт 1
{
n = calc(n,sum,a,b,p,f);
 
printf("\n Решение выполняется");
flug=1;
    }
else 
    printf("\n Ввод данных не произведен\n");
    printf("\n Нажмите 1 для записи данных в файл\n");
    ch=caas();                
switch(ch){
case 1: zapis(n,sum,a,b,p,f);
printf("\nНажмите клавишу для возвращения в меню");
break;
    }
 _getch();
break;
case 3: 
                    
if ((flag==1)||(flug==1||flag1==1))//если введен данные пункт 1
{
 cikl();
 }
else    
printf("\n Ввод данных не произведен или решение не выполнено\n");
printf("\nНажмите клавишу для возвращения в меню");
_getch();
system("cls");
break;
case 4:
About();
printf("\nНажмите клавишу для возвращения в меню");
_getch();
system("cls");
break;
case 5:
help();
printf("\nНажмите клавишу для возвращения в меню");
_getch();
system("cls");
break;
default:
break;
 }
    }
 while(ch!=6);
   printf("\nPress any key to continue\n");
_getch();
 return 0;  
}
помогите исправить

Добавлено через 19 секунд
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2013, 18:52     почему когда вводишь пунк 2 не появляется решение
Посмотрите здесь:

Вводишь число от 1 до 7 и выводит день недели.Вводишь 0 выход. C++
C++ Решение квадратных уравнений, почему не работает?
есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так? C++
почему не работает условие когда х=3 C++
Почему появляется предупреждение Variable '...' set but not used C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easyfrag
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 111
12.06.2013, 21:47  [ТС]     почему когда вводишь пунк 2 не появляется решение #21
тоесть printf

Добавлено через 41 секунду
да тут
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.06.2013, 21:53     почему когда вводишь пунк 2 не появляется решение #22
Цитата Сообщение от easyfrag Посмотреть сообщение
тоесть printf

Добавлено через 41 секунду
да тут
Рассказать как вывести на экран переменную типа int? (Только сделайте n типа double, а то данные теряются).
easyfrag
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 111
12.06.2013, 21:56  [ТС]     почему когда вводишь пунк 2 не появляется решение #23
а я должен вывести n
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.06.2013, 22:02     почему когда вводишь пунк 2 не появляется решение #24
Цитата Сообщение от easyfrag Посмотреть сообщение
а я должен вывести n
В чём проблема? Выводите.
easyfrag
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 111
12.06.2013, 22:03  [ТС]     почему когда вводишь пунк 2 не появляется решение #25
дак он мне 0 считает
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,397
12.06.2013, 22:18     почему когда вводишь пунк 2 не появляется решение #26
Давайте я вам просто покажу как примерно строится программа с менюшками разными, свитчами и прочим:
Program.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
#ifndef _PROGRAM_H_
#define _PROGRAM_H_
#include <string>
#include <vector>
#include "Array.h"
#include "Film.h"
#define MAX_FILMS 100
 
typedef Array<Film> arr_Film;
typedef Array<Film>::iterator arr_Film_it;
typedef Array<Film>::const_iterator arr_Film_cit;
 
typedef std::vector<std::string> vec_str;
typedef std::vector<std::string>::iterator vec_str_it;
typedef std::vector<std::string>::const_iterator vec_str_cit;
 
 
class Program
{
    public:
        Program();
 
        // обработка меню
        void menu();
        void menuChoise(int choise);
        void menuFind();
        void menuFindChoise(int choise);
 
        // выводы информации на экран
        void printMenu() const;
        void printMenuFind() const;
        void printFilms() const;
 
        // управление фильмами
        void addFilm();
        void delFilm();
 
        // поиск фильмов по категориям
        bool findByName(const std::string &);
        bool findByGenre(const std::string &);
        bool findByYear(const int);
        bool findByCharacter(const std::string &);
 
        // работа с файлами
        void writeInFiles();
        void readFromFiles();
 
    private:
        arr_Film films; // список фильмов
        vec_str files;  // список файлов для считывания
        int counter;    // счетчик числа фильмов
};
 
#endif
Program.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
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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
#include <iostream>
#include <fstream>
#include <clocale>
#include <conio.h>
#include <string>
#include <stdexcept>
#include "Program.h"
 
 
using namespace std;
 
Program::Program() : films(MAX_FILMS), files(), counter(0)
{
    setlocale(LC_ALL, "");
    ifstream ifs("files.txt");
    if (!ifs)
        throw runtime_error("File \"files.txt\" not found");
 
    string name;
    while (!ifs.eof() && ifs >> name)
        files.push_back(name);
}
 
void Program::menu()
{
    char choise;
    do
    {
        printMenu();
        cin >> choise; // запоминаем выбор
        if (choise < '0' || choise > '6')
        {
            cout << "\nВыберите корректный пункт меню\a"; // гудок
            _getch();
        }
        else
            menuChoise(choise - '0');
    } while (choise != '0');
}
 
void Program::menuChoise(int ch)
{
    switch(ch)
    {
        case 1 :
            printFilms();
            break;
 
        case 2 :
            addFilm();
            break;
 
        case 3 :
            delFilm();
            break;
 
        case 4 :
            menuFind();
            break;
 
        case 5 :
            writeInFiles();
            if (counter != 0)
            {
                cout << "\nЗаписано " << counter << " фильмов\n";
                _getch();
            }
            break;
 
        case 6 :
        {
            int last = counter;
            readFromFiles();
            cout << "\nСчитано " << counter - last << " фильмов\n";
            _getch();
            break;
        }
 
        default :
            break;
    }
} // end of Program::menuChoise(int ch)
 
void Program::menuFind()
{
    if (counter == 0)
    {
        cout << "\a\nСписок пуст, для начала заполните его\n";
        _getch();
        return;
    }
 
    char choise;
    do
    {
        printMenuFind();
        cin >> choise; // запоминаем выбор
        if (choise < '0' || choise > '4')
        {
            cout << "\nВыберите корректный пункт меню\a"; // гудок
            _getch();
        }
        else
            menuFindChoise(choise - '0');
    } while (choise < '0' || choise > '4');
}
 
void Program::menuFindChoise(int ch)
{
    switch(ch)
    {
        case 1 :
        {
            string name;
            cout << "Введите название: ";
            cin.ignore();
            getline(cin, name);
            bool result = findByName(name);
            if (!result)
                cout << "Фильмов по запросу не найдено\n";
            else
                cout << "Назад\n";
            _getch();
            break;
        }
 
        case 2 :
        {
            string genre;
            cout << "Введите жанр: ";
            cin.ignore();
            getline(cin, genre);
            bool result = findByGenre(genre);
            if (!result)
                cout << "Фильмов по запросу не найдено\n";
            else
                cout << "Назад\n";
            _getch();
            break;
        }
 
        case 3 :
        {
            int year;
            cout << "Введите год выпуска: ";
            cin >> year;
            bool result = findByYear(year);
            if (!result)
                cout << "Фильмов по запросу не найдено\n";
            else
                cout << "Назад\n";
            _getch();
            break;
        }
 
        case 4 :
        {
            string character;
            cout << "Введите актера: ";
            cin.ignore();
            getline(cin, character);
            bool result = findByCharacter(character);
            if (!result)
                cout << "Фильмов по запросу не найдено\n";
            else
                cout << "Назад\n";
            _getch();
            break;
        }
 
        default :
            break;
    }
} // end of Program::menuFindChoise(int choise)
 
void Program::printMenu() const
{
    system("cls"); // очистка экрана
    cout << "Что желаете сделать:\n"
         << "1. Вывести список всех фильмов\n"
         << "2. Добавить новый фильм\n"
         << "3. Удалить фильм\n"
         << "4. Меню поиска\n"
         << "5. Сохранить в файлы\n"
         << "6. Загрузить из файлов\n"
         << "0. Выход\n"
         << "\nВаш выбор: ";
}
 
void Program::printMenuFind() const
{
    system("cls"); // очистка экрана
    cout << "Вы находитесь в меню поиска фильмов\n"
         << "Что желаете сделать:\n"
         << "1. Искать по названию\n"
         << "2. Искать по жанру\n"
         << "3. Искать по году выпуска\n"
         << "4. Искать по герою\n"
         << "0. Выход\n"
         << "\nВаш выбор: ";
}
 
void Program::printFilms() const
{
    if (counter == 0)
    {
        cout << "\a\nСписок пуст, для начала заполните его\n";
        _getch();
        return;
    }
    system("cls");
    for (int i=0; i < counter; i++)
        films[i].print(); // для каждого элемента вызываем метод print
 
    cout << "\nНазад";
    _getch(); // пауза
}
 
void Program::addFilm()
{
    system("cls"); // очистка экрана
    cout << "Вы находитесь в меню добавления фильма\n"
         << "Если вы сюда вошли по ошибке, то введите \'exit\'\n";
    // временные переменные
    string name, genre, tmp;
    int mark, year;
    vec_str characters;
    cout << "Введите название фильма: ";
    cin.ignore();
    getline(cin, name);
    if (name == "exit") // если желаем выйти
        return;
    cout << "Введите жанр фильма: ";
    getline(cin, genre);
    do
    {
        cout << "Введите оценку фильма по 10-бальной школе: ";
        cin >> mark;
        if (mark < 0 || mark > 10)
            cout << "\aОшибка ввода. Введите число в диапазоне от 0 до 10\n";
    } while (mark < 0 || mark > 10);
    cout << "Введите год выпуска: ";
    cin >> year;
    cin.ignore(); // пропускаем символ '\n' оставшийся в потоке
 
    // пока считали строку и она не пустая
    cout << "Введите список основных киноактеров:\n"
         << "(Ввод заканчивается пустой строкой)\n";
    while(getline(cin, tmp) && !tmp.empty())
        characters.push_back(tmp); // добавляем в список героев
 
    // добавляем новый фильм в список
    films[counter++] = Film(name, genre, mark, year, characters);
} // end of Program::addFilm()
 
void Program::delFilm()
{
    if (counter == 0)
    {
        cout << "\a\nСписок пуст, для начала заполните его\n";
        _getch();
        return;
    }
    system("cls"); // очистка экрана
    cout << "Вы находитесь в меню добавления фильма\n"
         << "Если вы сюда вошли по ошибке, то введите \'exit\'\n";
    string name;
    cout << "Введите название фильма: ";
    cin.ignore();
    getline(cin, name);
    if (name == "exit") // если желаем выйти
        return;
 
    bool result = false; // нашли ли данный фильм
    for (int i=0; i < counter; i++)
        if (films[i].getName() == name)
        {
            // меняем местами с последним
            swap(films[counter-1], films[i]);
            counter--; // и уменьшаем счетчик
            result = true;
        }
    cout << (result ? "Фильм удален" : "Фильм не найден");
    _getch();
}
 
bool Program::findByName(const std::string& name)
{
    bool yes = false; // если нашли
    for (int i=0; i < counter; i++)
        if (films[i].getName() == name) // если совпадение по ключу
        {
            if (!yes) // если в первый раз
            {
                system("cls");
                cout << "Результат поиска:\n";
                yes = true;
            }
            films[i].print();
        }
    return yes;
}
 
bool Program::findByGenre(const std::string& genre)
{
    bool yes = false; // если нашли
    for (int i=0; i < counter; i++)
        if (films[i].getGenre() == genre) // если совпадение по ключу
        {
            if (!yes) // если в первый раз
            {
                system("cls");
                cout << "Результат поиска:\n";
                yes = true;
            }
            films[i].print();
        }
    return yes;
}
 
bool Program::findByYear(const int year)
{
    bool yes = false; // если нашли
    for (int i=0; i < counter; i++)
        if (films[i].getYear() == year) // если совпадение по ключу
        {
            if (!yes) // если в первый раз
            {
                system("cls");
                cout << "Результат поиска:\n";
                yes = true;
            }
            films[i].print();
        }
    return yes;
}
 
bool Program::findByCharacter(const std::string& character)
{
    bool yes = false; // если нашли
    for (int i=0; i < counter; i++)
    {
        // если поиск не дошел до конца, то будет истина
        bool result = find(films[i].getCharacters().begin(),
                           films[i].getCharacters().end(),
                           character) != films[i].getCharacters().end();
        if (result) // если совпадение
        {
            if (!yes) // если в первый раз
            {
                system("cls");
                cout << "Результат поиска:\n";
                yes = true;
            }
            films[i].print();
        }
    }
    return yes;
}
 
void Program::writeInFiles()
{
    if (counter == 0)
    {
        cout << "\a\nСписок пуст, для начала заполните его\n";
        _getch();
        return;
    }
 
    // создаем переменные для записи в определенные файлы
    ofstream out_comedies("comedies.txt"),
             out_dramas("dramas.txt"),
             out_horrors("horrors.txt"),
             out_thrillers("thrillers.txt"),
             out_fantastic("fantastic.txt"),
             out_other("other.txt");
 
    for (int i=0; i < counter; i++)
    {
        string genre = films[i].getGenre(); // узнаем жанр
        if (genre == "comedy")
            out_comedies << films[i];
        else if (genre == "drama")
            out_dramas << films[i];
        else if (genre == "horror")
            out_horrors << films[i];
        else if (genre == "thriller")
            out_thrillers << films[i];
        else if (genre == "fantastic")
            out_fantastic << films[i];
        else // если не подошел ни один из жанров
            out_other << films[i];
    }
 
    // обозначаем конец записей (дополнительная пустая строчка)
    out_comedies  << '\n';
    out_dramas    << '\n';
    out_horrors   << '\n';
    out_thrillers << '\n';
    out_fantastic << '\n';
    out_other     << '\n';
    // закрываем файлы
    out_comedies.close();
    out_dramas.close();
    out_horrors.close();
    out_thrillers.close();
    out_fantastic.close();
    out_other.close();
}
 
 
void Program::readFromFiles()
{
    for (vec_str_cit cit = files.begin(); cit != files.end(); ++cit)
    {
        ifstream ifs(cit->c_str());
        if (!ifs)
            cout << "File " << *cit << " not found\n";
 
        // считываем фильмы в контейнер, увеличивая счетчик при каждой итерации
        for (Film tmp; !ifs.eof() && ifs >> tmp; )
            if (counter < MAX_FILMS)
                films[counter++] = tmp;
        ifs.close();
    }
}
Добавлено через 32 секунды
А в ваших свитчах черт ногу сломает, как видите, не я один не хочу в них разбираться
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.06.2013, 23:02     почему когда вводишь пунк 2 не появляется решение #27
Цитата Сообщение от easyfrag Посмотреть сообщение
дак он мне 0 считает
Проблема в том, что считает, или в том, что не выводит?
Цитата Сообщение от alsav22 Посмотреть сообщение
Только сделайте n типа double, а то данные теряются
Добавлено через 10 минут
И соответствующие изменения сделайте в параметрах функций, куда n передаётся.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2013, 10:42     почему когда вводишь пунк 2 не появляется решение
Еще ссылки по теме:

C++ Почему появляется предупреждение о переводе типов?
Почему когда в скобках я пишу int ошибка ? C++
C++ почему когда ты ввел 6, не выдалась фраза что можно вводить только 1, 2 или 3

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
13.06.2013, 10:42     почему когда вводишь пунк 2 не появляется решение #28
Цитата Сообщение от easyfrag Посмотреть сообщение
std::wcout << L"введите n : ";
Цитата Сообщение от easyfrag Посмотреть сообщение
printf("\nЗадание №10\n\n");
* * printf("Даны числа a1=b1=1 и натуральное n.\n");
Цитата Сообщение от easyfrag Посмотреть сообщение
setlocale(LC_ALL,"Russian");
Цитата Сообщение от easyfrag Посмотреть сообщение
cout << "Введите n : ";
- я бы поотбивал вам руки за такое!
Конечно может не выводиться даже при верном решении. Слеплены в кучу разные методы вывода std::wcout << L"введите n : "; выводит на русском для
C++
1
setlocale(LC_CTYPE,".866");
. Ощущение такое что код слеплен из кучи разнородных кусков взятых из чьих то проектов. Плохо очень плохо всё создано!
Yandex
Объявления
13.06.2013, 10:42     почему когда вводишь пунк 2 не появляется решение
Ответ Создать тему
Опции темы

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