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

Упростить код - C++

Восстановить пароль Регистрация
 
anonimious
13 / 13 / 2
Регистрация: 17.10.2011
Сообщений: 54
30.10.2011, 14:32     Упростить код #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
#include <iostream>
#include <time.h>
#include <conio.h>
using namespace std;
void main(){
       srand(unsigned(time(NULL)));
       setlocale(LC_ALL,"rus");
       int size1, size2; char sw; bool f1=false;
       cout<<"Введите размер первого массива "; cin>>size1;
       cout<<"Введите размер второго массива "; cin>>size2;
       int *mas1=new int[size1]; int *mas2=new int[size2];
       int *mas3=new int[size1+size2];
       for(int i=0;i<size1;i++) mas1[i]=rand()%90+10;
       for(int i=0;i<size2;i++) mas2[i]=rand()%90+10; cout<<endl;
       //for(int i=0;i<size1;i++) cout<<mas1[i]<<' '; cout<<endl;
       //for(int i=0;i<size2;i++) cout<<mas2[i]<<' '; cout<<endl<<endl;
       cout<<"Что с ними нужно сделать?\n"<<endl;
       cout<<"a-вывести элементы обоих массивов\n";
       cout<<"b-вывести общие элементы обоих массивов\n";
       cout<<"c-вывести элементы первого массива, которые не входят во второй\n";
       cout<<"d-вывести элементы вторoго массива, которые не входят в первый\n";
       cout<<"e-вывести не общие элементы\n\n";
        sw=getch();
        switch(sw){
            case 'a':{
                for(int i=0;i<size1;i++) cout<<mas1[i]<<' '; cout<<endl;
                for(int i=0;i<size2;i++) cout<<mas2[i]<<' '; cout<<endl; break;}
            case 'b':{
                for(int i=0;i<size1;i++)
                    if(mas1[i]==mas2[i]) cout<<mas1[i]<<endl; f1=true; break;}
            case 'c':{
                for(int i=0;i<size1;i++)
                    for(int j=0;j<size2;j++)
                        if(mas1[i]!=mas2[j]) {cout<<mas1[i]<<' '; break;}
                        cout<<endl; break;}
            case 'd':{
                for(int i=0;i<size2;i++)
                    for(int j=0;j<size2;j++)
                        if(mas2[i]!=mas1[j]) {cout<<mas2[i]<<' '; break;}
                        cout<<endl; break;}
            case 'e':{
                for(int i=0;i<size1;i++)
                    for(int j=0;j<size2;j++)
                        if(mas1[i]!=mas2[j]) {mas3[i]=mas1[i]; break;}
                for(int i=0;i<size2;i++)
                    for(int j=0;j<size2;j++)
                        if(mas2[i]!=mas1[j]) {mas3[i+size1]=mas2[i]; break;}
                for(int i=0;i<(size1+size2);i++)
                    for(int j=0;j<(size1+size2);j++)
                        if(mas3[i]!=mas3[j]) {cout<<mas3[i]<<' '; break;}
                cout<<endl; break;}
            default : {cout<<"Неправильный выбор\n";}}
       delete []mas1; delete []mas2; delete []mas3;
       if(f1) cout<<"Общих элементов нет"<<endl;}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2011, 14:32     Упростить код
Посмотрите здесь:

Помогите упростить код? C++
C++ Упростить код
Упростить код C++
упростить код C++
C++ Упростить код
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
30.10.2011, 15:29     Упростить код #2
Какую задачу этот код решает ( не хочу углубляться )?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.10.2011, 15:30     Упростить код #3
Только если более читабельным сделать. По коду вроде нечего упрощать.
main должно возвращать значение, соответственно быть int, а не void.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
30.10.2011, 15:34     Упростить код #4
Я бы делал через STL ( вектор и множество ). Получилось бы короче...
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.10.2011, 15:36     Упростить код #5
Цитата Сообщение от Mиxaил Посмотреть сообщение
Я бы делал через STL
Не вариант, т.к.
Цитата Сообщение от anonimious Посмотреть сообщение
используя уровень знаний как в оригинале
anonimious
13 / 13 / 2
Регистрация: 17.10.2011
Сообщений: 54
30.10.2011, 15:48  [ТС]     Упростить код #6
Mиxaил, описано же
C++
1
2
3
4
5
6
cout<<"Что с ними нужно сделать?\n"<<endl;
           cout<<"a-вывести элементы обоих массивов\n";
           cout<<"b-вывести общие элементы обоих массивов\n";
           cout<<"c-вывести элементы первого массива, которые не входят во второй\n";
           cout<<"d-вывести элементы вторoго массива, которые не входят в первый\n";
           cout<<"e-вывести не общие элементы\n\n";
Deviaphan, работа в VS2010, там так можно

Добавлено через 2 минуты
Deviaphan, Если не трудно, приведите пример более читабельного
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.10.2011, 15:52     Упростить код #7
Цитата Сообщение от anonimious Посмотреть сообщение
работа в VS2010, там так можно
вы выложили код на общественное обозрение, а у меня MinGW и сдесь так нельзя!!!

Добавлено через 3 минуты
пример более читабельного кода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
switch(sw)
{
case 'a':
    for(int i = 0; i < size1; ++i)
        cout << mas1[i] << '\n';
 
    for(int i = 0; i < size2; ++i)
        cout << mas2[i] << '\n'; 
 
    break;
 
case 'b':
    for(int i = 0; i < size1; ++i)
    {
       if(mas1[i] == mas2[i]) 
           cout << mas1[i] << endl; 
    }
    f1 = true; 
    break;
//...
}
anonimious
13 / 13 / 2
Регистрация: 17.10.2011
Сообщений: 54
30.10.2011, 15:53  [ТС]     Упростить код #8
Jupiter, тогда
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
#include <iostream>
#include <time.h>
#include <conio.h>
using namespace std;
int main(){
       srand(unsigned(time(NULL)));
           setlocale(LC_ALL,"rus");
           int size1, size2; char sw; bool f1=false;
           cout<<"Введите размер первого массива "; cin>>size1;
           cout<<"Введите размер второго массива "; cin>>size2;
           int *mas1=new int[size1]; int *mas2=new int[size2];
           int *mas3=new int[size1+size2];
           for(int i=0;i<size1;i++) mas1[i]=rand()%90+10;
           for(int i=0;i<size2;i++) mas2[i]=rand()%90+10; cout<<endl;
           //for(int i=0;i<size1;i++) cout<<mas1[i]<<' '; cout<<endl;
           //for(int i=0;i<size2;i++) cout<<mas2[i]<<' '; cout<<endl<<endl;
           cout<<"Что с ними нужно сделать?\n"<<endl;
           cout<<"a-вывести элементы обоих массивов\n";
           cout<<"b-вывести общие элементы обоих массивов\n";
           cout<<"c-вывести элементы первого массива, которые не входят во второй\n";
           cout<<"d-вывести элементы вторoго массива, которые не входят в первый\n";
           cout<<"e-вывести не общие элементы\n\n";
                sw=getch();
                switch(sw){
                        case 'a':{
                                for(int i=0;i<size1;i++) cout<<mas1[i]<<' '; cout<<endl;
                                for(int i=0;i<size2;i++) cout<<mas2[i]<<' '; cout<<endl; break;}
                        case 'b':{
                                for(int i=0;i<size1;i++)
                                        if(mas1[i]==mas2[i]) cout<<mas1[i]<<endl; f1=true; break;}
                        case 'c':{
                                for(int i=0;i<size1;i++)
                                        for(int j=0;j<size2;j++)
                                                if(mas1[i]!=mas2[j]) {cout<<mas1[i]<<' '; break;}
                                                cout<<endl; break;}
                        case 'd':{
                                for(int i=0;i<size2;i++)
                                        for(int j=0;j<size2;j++)
                                                if(mas2[i]!=mas1[j]) {cout<<mas2[i]<<' '; break;}
                                                cout<<endl; break;}
                        case 'e':{
                                for(int i=0;i<size1;i++)
                                        for(int j=0;j<size2;j++)
                                                if(mas1[i]!=mas2[j]) {mas3[i]=mas1[i]; break;}
                                for(int i=0;i<size2;i++)
                                        for(int j=0;j<size2;j++)
                                                if(mas2[i]!=mas1[j]) {mas3[i+size1]=mas2[i]; break;}
                                for(int i=0;i<(size1+size2);i++)
                                        for(int j=0;j<(size1+size2);j++)
                                                if(mas3[i]!=mas3[j]) {cout<<mas3[i]<<' '; break;}
                                cout<<endl; break;}
                        default : {cout<<"Неправильный выбор\n";}}
           delete []mas1; delete []mas2; delete []mas3;
           if(f1) cout<<"Общих элементов нет"<<endl; return 0;}
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.10.2011, 16:01     Упростить код #9
Цитата Сообщение от anonimious Посмотреть сообщение
там так можно
То что это компилируется не значит, что так можно. Это противоречит стандарту. Программа должна возвращать код ошибки при завершении, для использования её в скриптах и т.п.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2011, 16:05     Упростить код
Еще ссылки по теме:

Упростить код C++
C++ Упростить код
Упростить код C++

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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
30.10.2011, 16:05     Упростить код #10
Цитата Сообщение от anonimious Посмотреть сообщение
Добрый день, подскажите, можно ли упростить код (используя уровень знаний как в оригинале)?
Можно, пропишите отдельно функции инициализации и вывода элементов массива, тогда дублировать циклы не надо. Вообще лучше всю программу на отдельные функции разбить. Зачем все лепить в одной функции.
Yandex
Объявления
30.10.2011, 16:05     Упростить код
Ответ Создать тему
Опции темы

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