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

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

Войти
Регистрация
Восстановить пароль
 
satisfactor
0 / 0 / 0
Регистрация: 11.01.2010
Сообщений: 51
#1

Логическая ошибка инициализации двумерного массива - C++

19.03.2014, 02:40. Просмотров 213. Ответов 2
Метки нет (Все метки)

Если массив statistics инициализировать
C++
1
 statistics[21][2] = {0};
, то столбцы массива statistics (те, которых 2, т.е. statistics[строка][столбец]) после прохождения цикла for (строка 26) меняются местами. Почему?

Рабочий вариант без инициализации:
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 1000
 
/* Prototypes */
int roll( void );
int rollDice( void );
int summarize( const int b[], int p );
void craps(int result[]);
 
/* enumerated constants representing the status of the game*/
enum Status { CONTINUE, WON, LOST };
 
/* Function main begins program execution */
int main( void )
{
    int i; /* counter */
    int results[ SIZE ][ 2 ];
    int wins [ 21 ] = {0};
    int loses [ 21 ] = {0};
    int statistics [ 21 ][ 2 ]; /* [i][0] loses in i games; [i][1] wins in i games */
 
    srand( time( NULL ) ); /* use time as a seed */
 
    for ( i = 0; i < SIZE; i++ ){
        craps( results[i] );
 
        if ( results[i][1] <= 20 )
            statistics[ results[ i ][ 1 ] ][ results[ i ][ 0 ] ]++;
        else
            statistics[ 0 ][ results[ i ][ 0 ] ]++;
    }
 
    printf("Win statistics:\n");
    printf("%5s%5s%5s\n","throws","wins","loses");
 
    for ( i = 1; i < 21; i++ )
    {
        printf("%5d%5d%5d\n", i, statistics[i][1], statistics[i][0] );
 
        if (i == 20 )
            printf("%5s%5d%5d\n", ">20", statistics[0][1], statistics[0][0] );
    }
 
 
    printf( "\nWin chance is %.2f", (float)summarize(wins, 21)/SIZE);
 
    return 0; /* indicates successful completion of the program */
} /* End main */
 
/* Functions */
int rollDice( void )
{
    int die1; /* first die */
    int die2; /* second die */
    int workSum; /* sum of dies */
 
    die1 = roll(); /* select a random value */
    die2 = roll(); /* select a random value */
    workSum = die1 + die2;/* summarize first and second die */
 
    /*printf("Player rolled %d + %d = %d\n", die1, die2, workSum ); /* display the result */
 
    return workSum; /* return the sum of dies */
}
 
int roll( void )
{
    return (1 + ( rand() % 6 ));
}
 
void craps (int result[])
{
    static int sum; /* sum of dies */
    static int myPoint; /* player's point */
    int iterations = 1; /* number of dice roll */
 
    enum Status gameStatus; /* contains CONTINUE, WON or LOST */
 
    sum = rollDice(); /* first cast of dies */
 
    /* determine the status of the game */
    switch( sum )
    {
        /* winning on the first roll */
        case 7:
        case 11:
            gameStatus = WON;
            break;
 
        /* lose on the first roll */
        case 2:
        case 3:
        case 12:
            gameStatus = LOST;
            break;
 
        /* remember point */
        default:
            gameStatus = CONTINUE;
            myPoint = sum;
            /*printf( "Point is %d\n", myPoint );*/
            break; /* not required */
    } /* end switch */
 
    /* while the game goes on */
    while ( gameStatus == CONTINUE )
    {
        iterations++ ;
        sum = rollDice(); /* cast dies again */
 
        /* determine the status of the game */
        if ( sum == myPoint ) /* winning by the point throw */
            gameStatus = WON;
        else
            if ( sum == 7 ) /* lose - player threw 7 */
                gameStatus = LOST;
    }
 
    /* Display the message about winning or losing */
    if ( gameStatus == WON )
        result[0] = 1;
    else
        result[0] = 0;
 
    result[ 1 ] = iterations;
}
 
int summarize( const int b[], int p )
{
    /* base case */
    if ( p == 1 )
        return b[ 0 ];
    else
        return b[ p - 1] + summarize( b, p - 1);
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2014, 02:40     Логическая ошибка инициализации двумерного массива
Посмотрите здесь:

Ошибка инициализации двумерного массива - C++
//Нужен массив 3х3; enum colorMap {null = 0, yellow, green, blue, violet, red }; class Foo { int map; Foo() { ...

Ошибка инициализации двумерного массива в классе - C++
Ошибка инициализации двумерного массива в классе Текст ошибки: Error 13 error C2536: 'Polibiy::Polibiy::a' : cannot specify explicit...

Функция инициализации двумерного массива нулевыми элементами - C++
написать функцию инициализации двумерного массива нулевыми элементами использовать функцию для двух массивов A(10*10) B(2*50)

Создание функции инициализации двумерного массива строк через указатель - C++
Здравствуйте,имеется двумерный массив: in_data_up=_T(&quot;00&quot;); in_data_up=_T(&quot;01&quot;); ...

Дописать программу инициализации двумерного массива в классе заданными элементами - C++
Добрый день!!! Уже третий день не могу инициализировать ДВУМЕРНЫЙ массив в классе ЗАДАННЫМИ ЭЛЕМЕНТАМИ, буду очень признателен за любую...

Непонятная ошибка при инициализации дин. массива - C++
Вылетает на memset'е с ошибкой записи. Что неправильно? int i = 0; int j = 0; int k = 0; BYTE ***Bitmap = (BYTE...

Ошибка нарушения прав доступа при чтении по адресу, возникающая при инициализации трехмерного массива - C++
Очень нужна ваша помощь! Я уже не знаю что тут можно сделать. Код части программы, где вылазит ошибка ниже. Коротко о проблеме: я...

Ошибка при вводе двумерного массива - C++
Здравствуйте! Нужно: 1. Написать программу с использованием двумерного массива для сохраниния данных о месячных продажах книжек...

Ошибка заполнения динамического двумерного массива - C++
При заполнении массива mas происходит выход за границы массива. По ходу исполнения программы данные записываются в ячейки и т.д. Судя по...

Обработка двумерного массива(ошибка в сортировке) - C++
Ребят 2 вопроса, но самый главный заключается в сортировке.Подскажите пожалуйста где ошибся, я уже не могу найти, это бред какой-то... ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.03.2014, 05:54     Логическая ошибка инициализации двумерного массива #2
Цитата Сообщение от satisfactor Посмотреть сообщение
столбцы массива statistics (те, которых 2, т.е. statistics[строка][столбец]) после прохождения цикла for (строка 26) меняются местами.
Это как видите?
satisfactor
0 / 0 / 0
Регистрация: 11.01.2010
Сообщений: 51
19.03.2014, 09:26  [ТС]     Логическая ошибка инициализации двумерного массива #3
уже понял свою ошибку...
Yandex
Объявления
19.03.2014, 09:26     Логическая ошибка инициализации двумерного массива
Ответ Создать тему
Опции темы

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