PDA

View Full Version : [C]Domande su Array e sottoprogrammi


stgww
22-05-2007, 16:25
Ciao,
1 - non ho capito cosa significa nei sottoprogrammi i "sottoprogrammi senza valore di ritorno e senza parametri di ingresso " e di conseguenza cosa significhi con valori di ritorno e parametri di ingresso.

2 - cosa sono gli Array e come si usano all'interno del linguaggio (sintassi)

Mi potete aiutare?
Grazie

yorkeiser
22-05-2007, 16:50
1) è quello che leggi: sono procedure (blocchi di codice) a cui non viene passato alcun parametro e che a loro volta non ritornano valori al codice chiamante. Ad esempio, in c potresti avere una procedura del tipo:

void procedura().

Come vedi dalla definizione, la procedura non prende parametri (non ci sono parametri tra le due parentesi) e non ne ritorna (void).

2) http://it.wikipedia.org/wiki/Array

stgww
22-05-2007, 17:02
Per gli array siamo così e cosà....

Per i sottoprogrammi: ma cosa significa "non prendere parametri" ?
E quando può essere utile che gli dica di restituire il valore?

yorkeiser
22-05-2007, 17:25
Per gli array siamo così e cosà....
Per i sottoprogrammi: ma cosa significa "non prendere parametri" ?

A volte, la routine che chiami non ha bisogno di valori d'ingresso (parametri) con cui lavorare, altre volte ne necessita. Ad esempio, una routine che calcola la somma di due numeri avrà probabilmente bisogno di due parametri in ingresso (ovvero i due numeri che vuoi sommare). Al contrario, se hai una routine che deve fare una cosa statica e sempre uguale, o comunque indipendente dai valori che hai nel corpo del programma principale, non hai bisogno di passarle parametri. Ad esempio, se la tua routine deve soltanto stampare a schermo la scritta "Ciao mondo", non c'è motivo che tu gli passi parametri dall'esterno. I parametri puoi vederli come una sorta di valori di ingresso di cui la routine ha bisogno per fare delle operazioni,

[E quando può essere utile che gli dica di restituire il valore?

Quando hai bisogno di riutilizzare il valore calcolato dalla routine nel corpo del chiamante. Nell'esempio della somma, probabilmente avrai bisogno di ritornare la somma dei due numeri, calcolata nella procedura, al chiamante, per utilizzarla per altre operazioni (ad esempio stamparla a video). Nell'esempio della stampa a video di "Ciao mondo", potresti benissimo non ritornare nulla al chiamante. Su questo punto, ti basta cercare da qualche parte la differenza tra procedure (che appunto sono routine che non ritornano valori al chiamante) e funzioni (che invece ritornano un valore)

Schematicamente:
parametro = input della procedura
valore restituito = output della procedura

Sta a te, in fase di progettazione, a definire i giusti input e output delle singole routine

stgww
22-05-2007, 17:51
Ora ho capito il teorico, ma guarda questo programma:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//variabili globali
char ancora;
float a, b, c, x1, x2, delta;
//function calcolaDelta()
void calcolaDelta(){
delta= pow(b,2) - 4*a*c;
return;
}
//function scriviSoluzioni()
void scriviSoluzioni(){
if(delta < 0)
printf("\nnon esistono soluzioni\n");
else{
x1= (-b -sqrt(delta))/(2*a);
x2= (-b +sqrt(delta))/(2*a);
printf("\nle soluzioni sono %10.2f %10.2f\n", x1, x2);
}
return;
}
//function risolviPrimoGrado()
void risolviPrimoGrado(){
if((b==0)&&(c==0))
printf("\nhai inserito tre coefficienti nulli\n");
else
if(b==0)
printf("\nnon ci sono soluzioni possibili\n");
else{
x1= -c/b;
printf("\nequazione di primo grado con soluzione x1 = %10.2f\n", x1);
}
return;
}
//funtion main()
int main(int argc, char *argv[]){
do{
system("cls");
//acquisisci coefficienti
printf("inserisci coefficiente a\n");
scanf("%f", &a);
printf("\ninserisci coefficiente b\n");
scanf("%f", &b);
printf("\ninserisci coefficiente c\n");
scanf("%f", &c);
//se secondo grado calcola delta e soluzioni
//altrimenti primo grado
if(a != 0){
calcolaDelta();
scriviSoluzioni();
}else
risolviPrimoGrado();

printf("ancora? (s/n)\n");
ancora= getche();
}while(ancora=='s');
system("PAUSE");
return 0;
}


Il primo sottoprogramma è calcola delta, ma delta poi lo devo riutilizzare in calcola soluzioni, come mai allora non restituisce niente?
Grazie per l'aiuto:)

vizzz
22-05-2007, 18:23
perchè sta usando variabili globali!

stgww
22-05-2007, 20:59
perchè sta usando variabili globali!

Ok, l'avevo pensato, ma non ne ero sicuro;)
Ora l'unica cosa che non capisco è come vadano usati gli array, riuscite a spiegarmelo?

vizzz
22-05-2007, 21:14
Ok, l'avevo pensato, ma non ne ero sicuro;)
Ora l'unica cosa che non capisco è come vadano usati gli array, riuscite a spiegarmelo?

cosa non ti è chiaro?

stgww
22-05-2007, 21:24
Mi sembra di aver capito che gli array siano degli insiemi di variabili.
es :tipobase array(numero di variabili)
ma non ho capito una volta dichiarate come faccio a d usarle, che vantaggio ho rispetto a usare 30 variabili diverse ad esempio e in che senso è legato al ciclo For ??
P.S Anche la sintassi come richiamarle come darli dei valori non mi è chiara
THX a lot

vizzz
22-05-2007, 21:53
Mi sembra di aver capito che gli array siano degli insiemi di variabili.
es :tipobase array(numero di variabili)
ma non ho capito una volta dichiarate come faccio a d usarle, che vantaggio ho rispetto a usare 30 variabili diverse ad esempio e in che senso è legato al ciclo For ??
P.S Anche la sintassi come richiamarle come darli dei valori non mi è chiara
THX a lot

un array è una "collezione organizzata di oggetti" del tipo che dichiari.
i vantaggi nell'uso degli array sono molteplici...pensa alle tue 30 variabili di tipo int che devi inizializzare a 0, oppure caricare con valori immessi dall'utente.
dovresti fare un inizializzazione o lettura per ogni variabile, mentre con un array puoi automatizzare la cosa.

piccolo esempio....

int array[30];

for (i = 0; i < 30; i++)
array[i] = 0;


con 30 variabili avresti dovuto inizializzarle una per una.

edit: dai un occhio qui:
http://programmazione.html.it/guide/lezione/1099/cosa-sono-gli-array/