Bonjour,

Au moment d'initialiser la structure hall de type level dans le main, quand je l'affiche, j'ai des valeurs différentes de ce qui devrait être ! Si je l'affiche c'est parce que je me suis rendu compte qu'il y avait une erreur dans les résultats. Et ça viendrait donc bien d'ici.

Pourtant j'ai fais attention d'avoir toujours le même type de variable quand je fais le calcul.

C'est dans cette fonction que je fais le calcul

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
void initLevelStructure( level hall, float fieldNumbers )
{
    float j = (1.+0.05*fieldNumbers);
 
    unsigned int i;
    for ( i=0 ; i<=10 ; i++ )
    {
        hall.village[i] =  25000.*(float)i*j;
        hall.town[i]    =  50000.*(float)i*j;
        hall.city[i]    =  75000.*(float)i*j;
        hall.capitol[i] = 100000.*(float)i*j;
    }
}
Qu'est ce que j'ai raté ?

Merci d'avance

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
139
140
141
142
143
144
145
146
147
148
149
150
151
#include <stdio.h>
#include <stdlib.h>
 
typedef struct
{
    float village[10];
    float town[10];
    float city[10];
    float capitol[10];
}level;
 
void initLevelStructure( level hall, float fieldNumbers )
{
    float j = (1.+0.05*fieldNumbers);
 
    unsigned int i;
    for ( i=0 ; i<=10 ; i++ )
    {
        hall.village[i] =  25000.*(float)i*j;
        hall.town[i]    =  50000.*(float)i*j;
        hall.city[i]    =  75000.*(float)i*j;
        hall.capitol[i] = 100000.*(float)i*j;
    }
}
 
float getTaxRate ( level hall, unsigned int hallLevel, unsigned int armysPower )
{
    float taxRate[10];
    taxRate[0] = 0;
    taxRate[1] = 0.0096;
    taxRate[2] = 0.0204;
    taxRate[3] = 0.0324;
    taxRate[4] = 0.0456;
    taxRate[5] = 0.06;
    taxRate[6] = 0.0756;
    taxRate[7] = 0.0924;
    taxRate[8] = 0.1104;
    taxRate[9] = 0.1296;
    taxRate[10] = 0.15;
 
    if ( hallLevel == 1 )
    {
        int i;
        for ( i=0 ; i<10 ; i=i+2 )
        {
            if ( hall.village[i] <= (float)armysPower && (float)armysPower < hall.village[i+1] )
            {
                printf("\n %f && %f => %f", hall.village[i], hall.village[i+1], taxRate[i]);
                return taxRate[i];
            }
        }
    }
 
    else if ( hallLevel == 2 )
    {
        int i;
        for ( i=0 ; i<10 ; i=i+2 )
        {
            if ( hall.town[i] <= (float)armysPower && (float)armysPower < hall.town[i+1] )
            {
                return taxRate[i];
            }
        }
    }
 
    else if ( hallLevel == 3 )
    {
        int i;
        for ( i=0 ; i<10 ; i=i+2 )
        {
            if ( hall.city[i] <= (float)armysPower && (float)armysPower < hall.city[i+1] )
            {
                return taxRate[i];
            }
        }
    }
 
    else if ( hallLevel == 4 )
    {
        int i;
        for ( i=0 ; i<10 ; i=i+2 )
        {
            if ( hall.capitol[i] <= armysPower && armysPower < hall.capitol[i+1] )
            {
                printf("\n %f && %f => %f", hall.village[i], hall.village[i+1], taxRate[i]);
                return taxRate[i];
            }
        }
    }
 
    else
    {
    printf("\n ERREUR : Valeur incorrecte pour le niveau du village\n");
    return -100000;
    }
}
 
unsigned int getMaintenancesCost ( level hall, unsigned int armysPower, unsigned int hallLevel, unsigned int sphinxNumbers, float tenancierBonus )
{
    float taxRate = getTaxRate( hall, hallLevel, armysPower );
 
    return (unsigned int)(taxRate*armysPower*( 1-(tenancierBonus+sphinxNumbers*0.05) ));
}
 
int main(void)
{
    system("title Calcul cout maintenance par _00");
    system("mode con cols=50 lines=35");
    unsigned int hallLevel    = 0;
    unsigned int armysPower   = 0;
    float fieldNumbers = 0;
    unsigned int sphinxNumbers = 0;
    float tenanciersBonus = 0;
 
    printf("\n_________________________________________________\n");
    printf("\n Conseil du Village -> 1 ");
    printf("\n Mairie             -> 2 ");
    printf("\n Hotel de ville     -> 3 ");
    printf("\n Capitol            -> 4 ");
    printf("\n\n - Niveau de la ville ? ");
    scanf("%d", &hallLevel );
    printf("\n_________________________________________________\n\n");
    printf(" - Puissance de l'armee ? ");
    scanf("%d", &armysPower );
    printf("\n_________________________________________________\n\n");
    printf(" - Nombre de champs ? ");
    scanf("%f", &fieldNumbers );
    printf("\n_________________________________________________\n\n");
    printf(" - Nombre de sphinxs ? ");
    scanf("%d", &sphinxNumbers );
    printf("\n_________________________________________________\n\n");
    printf(" - bonus tenancier ? ");
    scanf("%f", &tenanciersBonus );
    printf("\n_________________________________________________\n\n");
 
    level hall;
    initLevelStructure( hall, fieldNumbers );
 
    int i;
    for ( i=0 ; i<=10 ; i++ )
    {
        printf("\n v = %d ", (int)hall.capitol[i]);
    }
 
 
 
    printf(" MAINTENANCE = %d or", getMaintenancesCost ( hall, armysPower, hallLevel, sphinxNumbers, tenanciersBonus ) );
    printf("\n_________________________________________________\n\n");
 
    return 0;
}