Programmino in C
Ciao a tutti
Scrivere un frammento di codice in c che permetta all'utente di popolare gli elementi di una matrice quadrata 10x10, aventi indici la cui somma sia dispari e il cui prodotto pari.
ho fatto cosi:
.......
for(i=0; i
for(j=0; j
array[j] = 0;
if(i%2 ==0){
printf("inserire valore[%d%d]", i++, j++)
scanf("%d", &a[j]);}
else if(i%2 !=0)
printf("valore [%d%d]", i*j)
scanf("%d", &a[j]);}
mi sono perso
Scrivere un frammento di codice in c che permetta all'utente di popolare gli elementi di una matrice quadrata 10x10, aventi indici la cui somma sia dispari e il cui prodotto pari.
ho fatto cosi:
.......
for(i=0; i
if(i%2 ==0){
printf("inserire valore[%d%d]", i++, j++)
scanf("%d", &a[j]);}
else if(i%2 !=0)
printf("valore [%d%d]", i*j)
scanf("%d", &a[j]);}
mi sono perso


Risposte
mi sembrerebbe che la condizione dell'if dovrebbe essere del tipo
(i+j e' dispari) and (i*j e' pari)
(i+j e' dispari) and (i*j e' pari)
Perchè nella riga
printf("inserire valore[%d%d]", i++, j++)c'è l'incremento di i e j?
"Pivot":
Ciao a tutti
Scrivere un frammento di codice in c che permetta all'utente di popolare gli elementi di una matrice quadrata 10x10, aventi indici la cui somma sia dispari e il cui prodotto pari.
ho fatto cosi:
.......
for(i=0; ifor(j=0; j array[j] = 0;
if(i%2 ==0){
printf("inserire valore[%d%d]", i++, j++)
scanf("%d", &a[j]);}
else if(i%2 !=0)
printf("valore [%d%d]", i*j)
scanf("%d", &a[j]);}
mi sono perso![]()
Questo codice ha parecchi problemi...
Prima di tutto credo tu non abbia compreso il funzionamento del printf, secondo mancano dei ';' e terzo sono sbagliate le condizioni. Ma perché hai messo la & prima di a[j]? E perché usi 2 array diversi? Io cambio queste cose, nel caso siano necessarie correggi.
1) La descrizione del printf la trovi in una altra discussione in questa sessione (l'ho appena scritta e se non sbaglio è stata aperta sempre da te) quindi non lo ripeto. In generale
printf("valore [%d%d]", i*j)non ha senso perché per il compilatore printf ritiene di avere 2 variabili opzionali mentre lì ce n'è scritta solo 1. Quindi devi mettere una virgola tra i e j. In ogni caso non capisco quale sia lo scopo della moltiplicazione tra i due valori.
2 e 3)
metto una versione corretta (presumo non l'ho testata) con i commenti per la correzione
for(i=0; i<SIZE; ++i) { for(j=0; j<SIZE; ++j) { /* sposto array[i][j] = 0; dentro l'ultimo else. Se invece non ha nulla a che fare con a[][] tienilo qui e cambia tutti gli array[i][j] con a[i][j] o, ma non credo abbia senso, con &a[i][j] */ if (((i+j)%2 ==1)&&((i*j)%2==0)) { /* Questa condizione è quella richiesta come ha detto codino75 */ printf("inserire valore di array[%d][%d]\n", i, j); scanf("%d\n", array[i][j]); } else array[i][j] = 0; } }
I \n sono per gusto estetico.
_____________________________COMMENTO_______________________________________
$a+b = 2k+1$
Deve per forza aversi che uno è pari e l'altro è dispari. Infatti $2n + 2m = 2(n+m)$ e $2n + 1 + 2m + 1 = 2(n+m) + 2 = 2(n+m+1)$.
definisco $a=2n, b=2m+1$ per qualche n ed m.
$ab = 2n(2m + 1) = 2(2mn + n)$
Quindi la prima condizione implica la seconda (ma non viceversa).
Quindi il tuo codice può essere ulteriormente ridotto come:
for(i=0; i<SIZE; ++i) { for(j=0; j<SIZE; ++j) { if ((i+j)%2 ==1)) { printf("inserire valore di array[%d][%d]\n", i, j); scanf("%d\n", array[i][j]); } else array[i][j] = 0; } }
o, dato come funziona l'if, in
for(i=0; i<SIZE; ++i) { for(j=0; j<SIZE; ++j) { if ((i+j)%2)) { printf("inserire valore di array[%d][%d]\n", i, j); scanf("%d\n", array[i][j]); } else array[i][j] = 0; } }
Grazie 1000