Ciao a tutti, è la prima volta che scrivo, non sono un frequentatore abituale di forum anche perchè solitamente cerco di risolvere i problemi da me prima di "disturbare" altri utenti ma questa volta mi sono deciso ad iscrivermi anche perchè sono molto motivato ad avvicinarmi al mondo della programmazione e mi pare di aver capito che il fai da te in questo campo non è cosa facile, ed allora un po di umiltà e via..
Ho cominciato con la guida di C presente sul sito, devo dire veramente ben strutturata e di facile comprensione.
I primi 20 capitoli me li sono fumati anche grazie a qualche rimembranza dai tempi del ITI.
Premetto che la mia motivazione nasce dalla pura curiosità/passione per questa disciplina, non lo faccio ne per motivi didattici ne tanto meno per possibili opportunità lavorative(anche se..magari in futuro..
).
Ora, dopo aver ripassato le prime istruzioni basilari a me tanto care e con le quali mi son sempre divertito a crear programmini che non avevano nulla a che fare con cio che mi veniva richiesto all'epoca, inizio a scontrarmi con le prime difficoltà..
1)Nella fattispecie comincio con il linkare una porzione di codice che viene presentata nella "Guida C" al capitolo 20(http://programmazione.html.it/guide/...ile-for-break/) che non mi è molto chiara, non tanto per quanto riguarda le istruzioni di iterazione in se ma piu che altro rispetto ad una istruzione di controllo che prevede un operatore logico:
[...]presentiamo un semplice codice in cui si legge un numero da tastiera che volgiamo sia compreso tra 0 e 100, se tale valore risulta essere negativo, si esce dal ciclo, mentre se è maggiore di cento si richiede di inserire un valore valido; se il valore è tra 1 e 100, si stampa a video il suo quadrato, se è zero si esce:
codice:
int valore;
while (scanf("%d", &valore) == 1 && valore != 0)
{
if (valore < 0)
{
printf("Valore non consentiton");
break;
/* esce dal ciclo */
}
if (valore > 100)
{
printf("Valore non consentiton");
continue;
}
int quadrato = valore * valore;
printf("%d n", quadrato);
}
Il mio dubbio riguarda il boldato, secondo la mia interpretazione il ciclo while dovrebbe uscire solo nel momento in cui la condizione rappresentata da (valore==1 && valore!= 0) diventa falsa, ma in questo caso non dovrebbe essere consentito solo un valore di input=1 ?
In tutti gli altri casi l'operatore AND non dovrebbe restituire false?
Quindi per come lo percepisco io, il programma non funzione per quello che è stato progettato, cosa mi sfugge?
2)Ne approfitto che chiedere un ulteriore chiarimento inerente ad un altro capitolo onde evitare di aprire un altro 3d dato che mi rendo conto che ai piu potrebbe risultare fin troppo noioso leggere discussioni simili...
Dal Capitolo 24: (http://programmazione.html.it/guide/...2/le-funzioni/)
[...]In C, quando si passano gli argomenti (variabili) alle funzioni, bisogna prestare attenzione al passaggio di array ad una o più dimensioni; la regola dice che la prima dimensione dell'array può non essere specificata, mentre la seconda e le altre devono esserlo. Un esempio chiarirà meglio il concetto:
codice:
void stampa_array_uni(int dim, int array_uni[])
{
int i;
for(i=0; i < dim; i++)
{
printf("%d ", array_uni[i]);
}
}
void stampa_array_bid(ind dimx, int dimy, int array_bid[][6]);
{
int i, j;
for(i=0; i < dimx; i++)
{
for(j=0; j < dimy; j++)
{
printf("%d ", array_uni[i][j]);
}
printf("n");
}
}
Ho provato simulare queste istruzioni mentalmente(ancora devo avvicinarmi ad un IDE
) e proprio non riesco a comprendere il fatto del perchè la seconda dimensione dell'array va per forza dichiarata..
Mi spiego meglio; i parametri che servono a dimensionare l'array non sono gia specificati dagli argomenti della funzione (dimx, dimy)?
Quel "[6]" che viene specificato è un numero messo li a caso o ha un senso?
La seconda dimensione non dovrebbe acquisire il valore della variabile dimy tramite l'iterazione data dal ciclo for nidificato?
Mi scuso per essermi dilungato un po troppo ma ce la sto mettendo tutta e ci tengo davvero ad essere il piu preciso possibile ed a farmi capire..
Grazie a chiunque vorrà rispondermi.