Programma in c
buongiorno devo calcolare l'output di questo programma ma non riesco a capire che funzione svolge s=-s potete aiutarmi:
#include
int main()
{
int i, j;
double s = 1 ;
int M [][4]= { {0, 'a', 0, 'b'},
{'c', 0, 'd', 0},
{0, 'e', 0, 'f'},
{'g', 0, 'h', 0} };
for ( i = 0; i < 4; i++){
s = -s ;
for(j = 0; j < 4; j++)
if(s > 0)
printf(" %d %d\n", i, j);
}
return 0;
}
#include
int main()
{
int i, j;
double s = 1 ;
int M [][4]= { {0, 'a', 0, 'b'},
{'c', 0, 'd', 0},
{0, 'e', 0, 'f'},
{'g', 0, 'h', 0} };
for ( i = 0; i < 4; i++){
s = -s ;
for(j = 0; j < 4; j++)
if(s > 0)
printf(" %d %d\n", i, j);
}
return 0;
}
Risposte
Quella espressione cambia il segno della variabile [inline]s[/inline]. Non mi sembra che ti serva sapere altro. Nota che il segno non cambia all'interno del ciclo più interno e quindi il for e l'if "commutano" (ovvero puoi portare l'if fuori dal ciclo).
A parte questo, il questa sezione si richiede di inserire il codice all'interno del tag code
A parte questo, il questa sezione si richiede di inserire il codice all'interno del tag code
[code][/code]
"vict85":
Quella espressione cambia il segno della variabile [inline]s[/inline]. Non mi sembra che ti serva sapere altro. Nota che il segno non cambia all'interno del ciclo più interno e quindi il for e l'if "commutano" (ovvero puoi portare l'if fuori dal ciclo).
A parte questo, il questa sezione si richiede di inserire il codice all'interno del tag code[code][/code]
Quindi se i = 0 e e s=1 di conseguenza J=0 ma 1 è maggiore di 0 quindi stampa 0,0?
Non direi. Se i = 0, s diventa -1, quindi entra nel ciclo negativo e non viene stampato nulla. Quindi i diventa 1, s diventa 1 e entra nel ciclo positivo...
"vict85":
Non direi. Se i = 0, s diventa -1, quindi entra nel ciclo negativo e non viene stampato nulla. Quindi i diventa 1, s diventa 1 e entra nel ciclo positivo...
Ma quindi s cambia ad ogni ciclo?
Secondo te? Cosa comprendi di quel codice?
Per comodità te l'ho riscritto qui, formattato ed eliminando inutili distrazioni (in particolare ho mosso la dichiarazione delle variabili dei cicli nel ciclo stesso, ho eliminato [inline]M[/inline] perché non veniva utilizzata, ho dichiarato [inline]s[/inline] come intero perché assume solo i valori \(\displaystyle 1 \) e \(\displaystyle -1 \), ho toldo il [inline]return 0;[/inline] perché è implicito e aggiunto il [inline]void[/inline] nel main perché più esplicito ).
Quello che intendevo prima è che il codice precedente è equivalente a:
o anche a
Cosa succederebbe se invece avessi il seguente?
Ovviamente esiste un codice equivalente che non necessita della variabile [inline]s[/inline]. Ti invito a cercarlo.
Per comodità te l'ho riscritto qui, formattato ed eliminando inutili distrazioni (in particolare ho mosso la dichiarazione delle variabili dei cicli nel ciclo stesso, ho eliminato [inline]M[/inline] perché non veniva utilizzata, ho dichiarato [inline]s[/inline] come intero perché assume solo i valori \(\displaystyle 1 \) e \(\displaystyle -1 \), ho toldo il [inline]return 0;[/inline] perché è implicito e aggiunto il [inline]void[/inline] nel main perché più esplicito ).
#include <stdio.h> int main(void) { int s = 1; for (int i = 0; i < 4; i++) { s = -s; for (int j = 0; j < 4; j++) { if (s > 0) { printf(" %d %d\n", i, j); } } } }
Quello che intendevo prima è che il codice precedente è equivalente a:
#include <stdio.h> int main(void) { int s = 1; for (int i = 0; i < 4; i++) { s = -s; if (s > 0) { for (int j = 0; j < 4; j++) { printf(" %d %d\n", i, j); } } } }}
o anche a
#include <stdio.h> int main(void) { int s = 1; for (int i = 0; i < 4; i++) { s = -s; if (s == 1) { for (int j = 0; j < 4; j++) { printf(" %d %d\n", i, j); } } } }
Cosa succederebbe se invece avessi il seguente?
#include <stdio.h> int main(void) { int s = 1; for (int i = 0; i < 4; i++) { if (s == 1) { for (int j = 0; j < 4; j++) { printf(" %d %d\n", i, j); } } s = -s; } }
Ovviamente esiste un codice equivalente che non necessita della variabile [inline]s[/inline]. Ti invito a cercarlo.
"vict85":
Secondo te? Cosa comprendi di quel codice?
Per comodità te l'ho riscritto qui, formattato ed eliminando inutili distrazioni (in particolare ho mosso la dichiarazione delle variabili dei cicli nel ciclo stesso, ho eliminato [inline]M[/inline] perché non veniva utilizzata, ho dichiarato [inline]s[/inline] come intero perché assume solo i valori \(\displaystyle 1 \) e \(\displaystyle -1 \), ho toldo il [inline]return 0;[/inline] perché è implicito e aggiunto il [inline]void[/inline] nel main perché più esplicito ).
#include <stdio.h> int main(void) { int s = 1; for (int i = 0; i < 4; i++) { s = -s; for (int j = 0; j < 4; j++) { if (s > 0) { printf(" %d %d\n", i, j); } } } }
Quello che intendevo prima è che il codice precedente è equivalente a:
#include <stdio.h> int main(void) { int s = 1; for (int i = 0; i < 4; i++) { s = -s; if (s > 0) { for (int j = 0; j < 4; j++) { printf(" %d %d\n", i, j); } } } }}
o anche a
#include <stdio.h> int main(void) { int s = 1; for (int i = 0; i < 4; i++) { s = -s; if (s == 1) { for (int j = 0; j < 4; j++) { printf(" %d %d\n", i, j); } } } }
Cosa succederebbe se invece avessi il seguente?
#include <stdio.h> int main(void) { int s = 1; for (int i = 0; i < 4; i++) { if (s == 1) { for (int j = 0; j < 4; j++) { printf(" %d %d\n", i, j); } } s = -s; } }
Ovviamente esiste un codice equivalente che non necessita della variabile [inline]s[/inline]. Ti invito a cercarlo.
Allora i=0 e j=0 non lo stampa perché s risulta uguale a -1 ma perché stampa i=1 e j=0 ?
Ogni istruzione all'interno di un ciclo è eseguita ogni volta che il ciclo viene eseguito. Per esempio, cosa stampa a video questo codice?
#include <stdio.h> int main( void ) { int s = 1; for( int i = 0; i != 4; ++i ) { s = -s; if( s > 0 ) { printf( "%c", 'a' ); } else { printf( "%c", 'b' ); } } printf( "\n" ); }
"vict85":
Ogni istruzione all'interno di un ciclo è eseguita ogni volta che il ciclo viene eseguito. Per esempio, cosa stampa a video questo codice?
#include <stdio.h> int main( void ) { int s = 1; for( int i = 0; i != 4; ++i ) { s = -s; if( s > 0 ) { printf( "%c", 'a' ); } else { printf( "%c", 'b' ); } } printf( "\n" ); }
scusa ma anche in questo caso s = -1 quindi -1<0 quindi non stampa nulla perché non ce un incremento di s
ma nel mio caso avviene cosi :allora io so che s=-1 quindi tutti gli i=0 non li stampa perché s risulta minore di 0, poi s=1 quindi 1>0 e stampa tutti quelli con i=1 poi s=-1 quindi non stampa tutti quelli che hanno coordinata i=2 e poi s=1 e stampa tutti quelli con i=3
Vorrei farti notare che:
[list=1][*:1hjbjhqt]C'è un [inline]else[/inline],[/*:m:1hjbjhqt]
[*:1hjbjhqt]l'istruzione [inline]s=-s[/inline] viene eseguita 4 volte (una per esecuzione del ciclo).[/*:m:1hjbjhqt]
[*:1hjbjhqt][inline]printf("\n");[/inline] viene sempre eseguita. [/*:m:1hjbjhqt][/list:o:1hjbjhqt]
Quindi il codice che ti ho scritto stampa a video:
Nel tuo problema, il ciclo più interno stampa solo le righe di indice dispari. Ovvero:
Cosa stampa a video questo?
e questo?
[list=1][*:1hjbjhqt]C'è un [inline]else[/inline],[/*:m:1hjbjhqt]
[*:1hjbjhqt]l'istruzione [inline]s=-s[/inline] viene eseguita 4 volte (una per esecuzione del ciclo).[/*:m:1hjbjhqt]
[*:1hjbjhqt][inline]printf("\n");[/inline] viene sempre eseguita. [/*:m:1hjbjhqt][/list:o:1hjbjhqt]
Quindi il codice che ti ho scritto stampa a video:
baba
Nel tuo problema, il ciclo più interno stampa solo le righe di indice dispari. Ovvero:
1 0 1 1 1 2 1 3 3 0 3 1 3 2 3 3
Cosa stampa a video questo?
#include <stdio.h> int main( void ) { int s = 2; printf("%d, ", s); s += s; printf("%d, ", s); s += s; printf("%d, ", s); s += s; printf("%d, ", s); s += s; printf("%d, ", s); s += s; printf("%d, ", s); s += s; printf("%d\n", s); }
e questo?
#include <stdio.h> int main( void ) { int s = 1; for( int i = 0; i != 4; i++) { printf("%d, ", s); s += s; } printf("%d\n"); }