Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
#1

Маршрутная перестановка. Замена switch-case - C++

18.05.2014, 18:17. Просмотров 667. Ответов 0
Метки нет (Все метки)

Здравствуйте. Программа уже написана и работает, но препод сказал, что нужно заменить switch-case. Подскажите, как эффективнее можно это сделать?

Задача программы закодировать и раскодировать текст.

Вот код:
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
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
using namespace std;
int main()
{   setlocale (LC_ALL, "RUS");
    fstream F,G;
    int c,N,M,q,P,j,v=0,k;
    cout<<"ВВЕДИТЕ"<<endl<<"1 для зашифровки текста"<<endl<<"2 для расшифровки текста"<<endl;
    cin>>c;
    switch(c)
    {       case 1: //Если выбрано шифрование
                    {   string t;
                        F.open("Вход1.txt");
                        G.open("Выход1.txt",ios::out);
                                while (!F.eof())
                                {   getline (F,t);
                                    cout<<"Начальная строка:"<<"'"<<t<<"'"<<endl;
                                    cout<<"Введите размер таблицы MxN. N=";
                                    cin>>N;
                                    cout<<"M=";
                                    cin>>M;
                                    char S[N][M];
                                    int frame=t.length();
                                    P=N*M-frame;            //кол-во пустых клеток
                                    string space="";
                                    if(t.length()<N*M)      // пустые клетки заполняются пробелами
                                        for(int q=0;q<P;q++)
                                        {space+=" ";}
                                    t+=space;
                                    for(int i=0;i<N;i++)     //присвоение элементам матрицы значений строки
                                        {   for(int j=0;j<M;j++)
                                            {S[i][j]=(char)t[i*M+j];}
                                        }
                                    cout<<endl;
                                    while(v<N)              //вывод начальной матрицы
                                        {   for(int j=0;j<M;j++){
                                            cout<<S[v][j];}
                                            cout<<endl;
                                            v++;
                                        }
                                    v=0;
                                    cout<<endl;
                            
                                    cout<<endl<<"Зашифрованная строка: ";
                                    for(int j=0;j<M;j++)   //вывод и запись таблицы по столбцам сверху вниз
                                        {   for(int i=0;i<N;i++)
                                            {cout<<S[i][j];}
                                        }
                                        cout<<endl;
                                        int y=0,E;
                                        int a[M]; //массив из номеров столбцов
                                        cout<<"Введите ключ"<<endl;
                                        for(int i=0;i<M;i++)
                                            {  cin>>a[i];} //ввод чисел массива,т.е. порядок вывода столбцов
                                        cout<<"Зашифрованная строка : ";
                                        while(y<M)        //вывод и запись столбцов по заданному пользователем порядку
                                            {   E=a[y];
                                                for(int i=0;i<N;i++)
                                                {   cout<<S[i][E];
                                                    G<<S[i][E];
                                                }
                                                y++;
                                            }
                                }
                                F.close();
                                G.close();
                                break;
                    }
            case 2: //Если выбрано дешифрование
                    {   string t,z;
                        F.open("Выход1.txt");
                                while (!F.eof())
                                {   getline (F,t);
                                    cout<<"Начальная строка:"<<"' "<<t<<" '"<<endl;
                                    cout<<"Введите размер таблицы MxN. N=";
                                    cin>>N;
                                    cout<<"M=";
                                    cin>>M;
                                    char S[N][M];
                                    int a[M],y=0,E;
                                    cout<<"Введите порядок"<<endl;
                                    for(int i=0;i<M;i++)
                                        { cin>>a[i];}
                                        while(y<M
                                              )
                                            {   E=a[y];
                                                for(int i=0;i<N;i++)
                                                {   S[i][E]=(char)t[y*N+i];}
                                                y++;
                                            }
                               
                                        while(v<N)              //вывод готовой расшифрованной матрицы
                                        {   for(int j=0;j<M;j++)
                                            { cout<<S[v][j];}
                                                cout<<endl;
                                                v++;
                                        }
                                        cout<<endl;
                                        cout<<"Начальная строка:";
                                        for(int i=0;i<N;i++)  //вывод и запись таблицы по столбцам сверху вниз
                                        {   for(int j=0;j<M;j++)
                                            {cout<<S[i][j];}
                                        }
                                }
                                F.close();
                                break;
                    }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2014, 18:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Маршрутная перестановка. Замена switch-case (C++):

Оптимальная конструкция switch-case-while / while-switch-case - C++
Имеется конструкция типа: switch() { case 1: while() { ... }

Switch case внутри switch case - C++
Привет всем! Нужна помощь. Пишу калькулятор с консольным меню. Так вот, используется цикл while, внутри которого у меня switch...

switch-case, как писать в самом case - C++
Такс дело вот в чём,прога работает всё хорошо,вот только мне не нравится как записваю страны в кейсе,можно ли каким-нибудь образом писать в...

Switch + case - C++
Суть задания: Задан шифр книги из библиотеки в виде шестизначного целого числа. Определить к какому подразделу ...

case-switch - C++
Вот то задание что с case-switch надо сделать помогите знаю что задание дурное

Switch - case - C++
Доброго времени суток. Сделал меню по такой схеме: switch(a) { case 1: { case 1: case 2: switch(aa) ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2014, 18:17
Привет! Вот еще темы с ответами:

Switch - Case - C++
Составить программу, определяющую результат гадания на ромашке («любит–не любит– плюнет–поцелует–к сердцу прижмёт–к чёрту пошлёт»), взяв...

Switch-case - C++
Можно ли так писать? switch (simvol) { case (('(') or ('1') or ('2') or ('3') or ('4') or ('5') or ('6') or ('7') or ('8')...

switch case - C++
как в блок-схеме изображается switch case?

Switch - case - C++
Обязательно с использованием классов Есть задача. Дан массив вещественных чисел. а) Ко всем отрицательным элементам прибавить элемент...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.