Programmino in C

Pivot1
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 :evil: :evil:

Risposte
codino75
mi sembrerebbe che la condizione dell'if dovrebbe essere del tipo

(i+j e' dispari) and (i*j e' pari)

Cheguevilla
Perchè nella riga
printf("inserire valore[%d%d]", i++, j++) 
c'è l'incremento di i e j?

vict85
"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; 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 :evil: :evil:


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;
    }
}

Pivot1
Grazie 1000

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.