Problema simpla de C

Acest forum este dedicat intrebarilor de programare care nu-si au locul in unul din celelalte forumuri
Post Reply
defender510
Junior
Junior
Posts: 2
Joined: 27 Jun 2012, 09:37
Judet: Bucureşti

Problema simpla de C

Post by defender510 » 27 Jun 2012, 09:56

Salut!

#include<stdio.h>

int main(){
int a[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n, i;
printf( "Introduceti un intreg intre 1 si 10: \n");
scanf("%d", &n);
for (i=0; i< n; i++)
switch (a)
{

case 5: printf("%d ", ++ i ) ;
case 10: printf("-%d ", ++ i );
default: printf("%d ", i );
}
return(0);
}
Introduc valoarea 10.
Programul va afisa:
"Introduceti un intreg intre 1 si 10:
0 1 2 3 5 -6 6 7 8 -10 10"
Nu reusesc sa inteleg de ce primul 6 este in cazul 10 :(
Aveti idee de ce se intampla asa?
Programul il puteti vedea si aici:http://codepad.org/BL6JDShq

Multumesc anticipat,
Alex



User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: Problema simpla de C

Post by bu7ch3r » 27 Jun 2012, 12:44

Pai pe langa switch si case mai trebuie sa pui si break;

Code: Select all

int main(){
int a[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n, i;
printf( "Introduceti un intreg intre 1 si 10: \n");
scanf("%d", &n);
for (i=0; i< n; i++)
switch (a[i])
{

case 5: 
{                                   //sa nu-ti fie frica sa pui si acolade
    printf("%d ", ++ i ) ;
    break;
}
case 10:
{
    printf("-%d ", ++ i );
    break;
}
default: 
{
    printf("%d ", i );
    break;//aici nu are rost, dar asa e sintaxa 
}
}
return(0);
}
Acum nu stiu ce vrei tu sa demonstrezi si ce logica vrei sa expui... Ce se afiseaza e corect.

Explicatie:
Ai vectorul a cu 10 elemente, de la indexul 0 pana la 9

parcurgi cu for: de la 0 la 9

i = 0 ;
il prinzi pe a---a[0]---care-i 1
iti intra pe default si afisezi 1

i = 1; //nu o sa scriu pasii lui for gen: se creste i cu valoarea de pas, se testeaza conditia (i<10) etc.. de fiecare data :)
il prinzi pe a---a[1]---care-i 2
iti intra pe default si afisezi 2

i = 2;
il prinzi pe a---a[2]---care-i 3
iti intra pe default si afisezi 3

i = 3;
il prinzi pe a---a[3]---care-i 4
iti intra pe default si afisezi 4

i = 4;
il prinzi pe a---a[4]---care-i 5
iti intra pe case 5 si face ++i , i devine 5 si il afiseaza - de asta nu iti apare 4 --- facand ++ i sari peste o iteratie. pentru ca ai ++ i si nu i++ intai se face incrementarea si apoi afisearea
Din cauza ca n-ai break iti intra ss pe case-ul cu 10
iar se face ++i si i-ul devine 6, se afiseaza -6
Din cauza ca n-ai break iti intra si pe default
il afiseaza pe i, i acum e 6 - se afiseaza 6

i acum devine 7
il prinzi pe a---a[7] care-i 8
iti intra pe default si afiseaza 7;

i acum devine 8
il prinzi pe a----a[8] care-i 9
iti intra pe default si iti afiseaza 8

i acum devine 9
il prinzi pe a----a[9] care-i 10;
iti intra pe case 10----face ++ i , i-ul devine 10---afiseaza -10
Din cauza ca n-ai break intra si pe default
i-ul e 10 afiseaza 10

in for i-ul creste cu o unitate si devine 11
se testeaza conditia i <10 si se sare din for...QED?
Cu stima,
Lupu Claudiu

defender510
Junior
Junior
Posts: 2
Joined: 27 Jun 2012, 09:37
Judet: Bucureşti

Re: Problema simpla de C

Post by defender510 » 27 Jun 2012, 17:59

Multumesc frumos pentru raspuns :whorship: ,uitasem de break;

Post Reply