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

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

Войти
Регистрация
Восстановить пароль
 
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
#1

3адача на массивы ( не вышло ) - C++

09.07.2011, 20:01. Просмотров 331. Ответов 4
Метки нет (Все метки)

задача для тренировки из книги, делал, делал но блин как меня бесят эти массивы но все равно хочу знать как они работают. вот задача
3адача на массивы ( не вышло )
3адача на массивы ( не вышло )

вот накидал, но или я туплю или не знаю я в тупике, прошу помочь доделать задачу ...
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
// xz.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"");
    const int size = 10;
    int mas[ size ] = { 0 };
    int place;
 
    cout << "Вветиде, пожалуйта, 1 для \"курящих\"\n";
    cout << "Вветиде, пожалуйта, 2 для \"некурящих\"\n";
    cin >> place;
    
    for ( int range = 0; range < 10; range++ )
    {
    if ( place == 1 || place == 2 )
    {
        switch( place )
        {
        case 1 :
            for ( int i = 0; i < 5; i++ )
            {
                mas[ i ] = 1;
                if ( mas[ i ] == 1 )
                {
                    cout << "Не хотите место в салоне для курящих ? \n";
                    cout << "Введите 1 если да, 2 если нет\n";
                    cin >> place;
                    for ( int q = 0; q < 5; q++ )
                        if ( mas[ q ] == 0 )
                            mas[ q ] = 1;
                }
            }
            break;
        case 2 :
            for ( int j = 6; j < 10; j++ )
                mas[ j ] = 1;
            break;
        default :
            break;
        }
    }
    else 
        cout << "вы ошыблись !\n";
    }
    //for ( int a = 0; a < size; a++ )
        //if ( mas[ a ] == 1 )
 
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2011, 20:01     3адача на массивы ( не вышло )
Посмотрите здесь:

массивы в С++ C++
массивы C++
C++ Массивы
Массивы C++
C++ Массивы с++
Массивы C++
Сколько автобусов вышло на линию? C++
массивы C++
Массивы C++
C++ Разложение числа на k простые и его степени чтобы при перемножений вышло число n
C++ массивы
C++ Массивы с++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
09.07.2011, 20:06  [ТС]     3адача на массивы ( не вышло ) #2
тупо не знаю как сделать проверку массива заполнен он или нет, найти что-то в массиве могу а проверить или выделить я не знаю .. подскажите как это сделать ( только без MFC, STL и прочих библиотек ... )
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
09.07.2011, 20:23     3адача на массивы ( не вышло ) #3
лучше если ты напишешь функцию проверки наличия и выделения мест пассажирам. тогда код станет гораздо понятнее и проще.

проверка наличия мест у тебя в условии написана - если в диапазоне 1-5 (для не курящих) или 6-10 (для курящих) есть нулевой элемент, значит это место свободно.

и еще:
C++
1
2
3
4
5
mas[ i ] = 1;
                                if ( mas[ i ] == 1 )
                                {
                                        ............
                                }
явно ошибка. ты указываешь, что место занято, и тут же предлагаешь место в салоне для курящих. ты сначала должен проверить свободно ли место i. если оно не свободно, то продолжить обход мест в салоне, и только если ни одного места не нашлось - предложить место в другом салоне, где все так же повторить.
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
09.07.2011, 20:30  [ТС]     3адача на массивы ( не вышло ) #4
Цитата Сообщение от Paporotnik Посмотреть сообщение
лучше если ты напишешь функцию проверки наличия и выделения мест пассажирам. тогда код станет гораздо понятнее и проще.

проверка наличия мест у тебя в условии написана - если в диапазоне 1-5 (для не курящих) или 6-10 (для курящих) есть нулевой элемент, значит это место свободно.

и еще:
C++
1
2
3
4
5
mas[ i ] = 1;
                                if ( mas[ i ] == 1 )
                                {
                                        ............
                                }
явно ошибка. ты указываешь, что место занято, а потом тут же начинаешь проверять свободно ли оно.
я должен это
C++
1
2
3
4
if ( mas[ i ] == 1 )
                                {
                                        ............
                                }
заменить на ?
C++
1
2
3
4
if ( mas[ i ] != 0 )
                                {
                                        ............
                                }
вы можете мне накидать пару набросков чтоб нормально разобраться, а то я с массивами ну ппс как не дружу и это плохо
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
09.07.2011, 21:17     3адача на массивы ( не вышло ) #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
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
#include <iostream>
using namespace std;
 
enum ticket_state {SMOKE,NOSMOKE,QUEST,NOPLACE};
int invite();
int is_free_in_nosmoke(int*);
int is_free_in_smoke(int*);
int print_info(int,ticket_state);
 
int main(){
    int plane[10]={0,0,0,0,0, 0,0,0,0,0};
    int option,place;
    while (option=invite()) {
        switch (option) {
        case 1: if (place=is_free_in_smoke(plane)) {
                   print_info(place,SMOKE);
                   break;}
                if (!(print_info(0,QUEST))) {
                   print_info(0,NOPLACE);
                   break;
                }
        case 2: if (place=is_free_in_nosmoke(plane)) print_info(place,NOSMOKE);
                else print_info(0,NOPLACE);
        case -1: break;
        }
    }
 
}
 
//приглашение для нового пассажира. возвращает цифру, если ввод правильный, иначе -1.
int invite () {
    int option;
    cout<<"vvedite 1 dlya kuryashih"<<endl<<"vvedite 2 dlya nekuryashih"<<endl<<"vvedite 0 dlya vihoda"<<endl;
    cin>>option;
    if (option>=0 && option<=2) return option;
    cout<<"neverniy vvod"<<endl;
    return -1;
}
 
//если есть место у курящих, возвращаем его номер. иначе 0.
int is_free_in_smoke(int plane[10]) {
    for (int i = 0; i < 5; i++)
        if (!plane[i]) {
            plane[i]=1;
            return i+1;
        }
    return 0;
}
 
//если есть место у некурящих, возвращаем его номер. иначе 0.
int is_free_in_nosmoke(int plane[10]) {
    for (int i = 5; i < 10; i++)
        if (!plane[i]) {
            plane[i]=1;
            return i+1;
        }
    return 0;
}
 
//в зависимости от аргумента st выводит нужную инфу о билете, либо отсутствии мест,
//либо предложение сменить салон
int print_info(int place,ticket_state st) {
    int option;
    switch (st) {
       case SMOKE: cout<<"mesto "<<place<<" v salone dlya kuryashih"<<endl;
              break;
       case NOSMOKE: cout<<"mesto "<<place<<" v salone dlya nekuryashih"<<endl;
                break;
       case QUEST: cout<<"jelaete mesto v salone dlya nekuryashih? 1-da, 2-net"<<endl;
              cin>>option;
              switch (option) {
                 case 1: return 1;
                 case 2: return 0;
                 default: return 0;
              }
       case NOPLACE: cout<<"sleduyushiy polet cherez 3 chasa"<<endl;
                break;
    }
}
работает в точности с условием задачи. т.е. если занят салон для некурящих, то НЕ будет предложен салон для курящих. что надо изменить, чтоб это условие работало, думаю, сам поймешь
Yandex
Объявления
09.07.2011, 21:17     3адача на массивы ( не вышло )
Ответ Создать тему
Опции темы

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