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

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

Восстановить пароль Регистрация
 
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
09.07.2011, 20:01     3адача на массивы ( не вышло ) #1
задача для тренировки из книги, делал, делал но блин как меня бесят эти массивы но все равно хочу знать как они работают. вот задача
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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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адача на массивы ( не вышло )
Ответ Создать тему
Опции темы

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