Istituto Tecnico Industriale "Enrico Fermi"

Help On Chat

[Ritorna all'elenco sessioni]

Chat del 9 Maggio 2019 dalle 17:49:10 alle 18:36:54

Stefano Salvi
Eccomi, con qualche minuto di rotardo...
Daniele SCARDOVELLI
Sera prof
Larissa BERNARDI
buonasera
Lara TANFOGLIO
ciao
Stefano Salvi
Buona sera a tutti. ossiamo partire!!!
Jaspreet SINGH
buona sera
Daniele SCARDOVELLI
prof per far finire un ciclo quando si va a capo si usa while(getchar()!=\'\n\'); ?
Larissa BERNARDI
prof ma scrivere for(i=0; vet[i]!=\'\0\';i++){} e for(i=0 ; vet[i] ; i++){} è uguale?
Stefano Salvi
Scardovelli: quello che hai scritto è un ciclo che legge (e scarta) tutti i caratteri rimanenti "sul buffer della tastiera" fino all\'a-capo. Serve dopo una scanf per evitare che, se il dato scritto dall\'utente non è quello che si aspetta, resti nel "buffer di tastiera" e venga riletto all\'infinito.
Lara TANFOGLIO
ho provato poco fa a fare un esercizio a caso con una funzione void che avrebbe dovuto scambiare i caratteri all\'interno di una stringa (ad esempio \'ciao\' diventa \'oaic\') coi puntatori mi può velocemente far vedere come si fa? perchè ho provato ma ho trovato difficoltà col puntatore che ogni volta non tornava all\'indirizzo della prima cella.
Jaspreet SINGH
Domanda: si fa così un puntatore a struct ? es: struct persona pippo ; persona *p; p=&pippo
Larissa BERNARDI
quindi in pratica il while(getchar()!=\'\n\'); serve per pulire il buffer e per controllare che inserisca un numero e non un carattere?
Stefano Salvi
Bernardi: mi concentro sulla condizione: vet[i]!=\'\0\' vuol dire il carattere i-esimo è diverso dal carattere il cui codice ASCII è 0, quindi corrisponde a vet[i]!=0, ma siccome la definizione di "vero" in C è "qualunque numero diverso da 0", allora è sicuramente uguale anche a vet[i]. Tutto questo perché risponderti solo "si" mi pareva poco professionale.
Larissa BERNARDI
va bene la ringrazio ahahah
Stefano Salvi
Singh: Si. Pippo è una variabile di tipo "struct persona", p è una variabile di tipo "puntatore a struct persona". Per inizializzare p, basta prendere lìindirizzo di pippo conl\'operatore &.
Jaspreet SINGH
ok
Larissa BERNARDI
prof ma io non ho capito perch l\'esercizio dello scambio di due variabile non può essere fatto senza puntatori..
Stefano Salvi
Bernardi: while(getchar()!=\'\n\'); serve a pulire il bufer di tastiera in modo che , nel caso ci fosse qualcosa di scorretto, verrebbe eliminato. Se non ci fosse stato qualcosa di scorretto, questo codice comunque non crea problemi, visto che l\'"a capo" lo trova comunque.
Larissa BERNARDI
okk grazie
Stefano Salvi
Bernardi: parliamo di SCAMBIO e non di COPIA, quindi hai una funzione che deve ritornare DUE risultati. Laretuen è una sola e non ci risolve il problema. L\'unica è metterle in mano le bariabili (non i loro valori, ma proprio le variabili come contenitori, quindi i puntatori alle variabili) e dire alla funzione "fai tu, queste sono le variabili, scambiamele".
Risuta chiaro coì?
Larissa BERNARDI
sisi grazie
Jaspreet SINGH
ma in una procedura se il vettore viene modificato anche nel main il contenuta del vettore si altera?
Stefano Salvi
Singh: durante l\'esecuzione di una funzione (in C leprocedure non esistono, al massimo le funzioni "void") il main è blocato in attesa che la funzione finisca, quindi non può modificare il vettore. La funzione invece può modificare il vettore e la main, quando riprenderà l\'esecuzione se lo troverà modificato. Spero di avere capito il senso della tia domanda.
Jaspreet SINGH
intendo se faccio funzione int funz(int vet[]){vet[0]=1} anche nel main vet[0]=1?
Stefano Salvi
Singh: si.
Daniele SCARDOVELLI
prof la "->" si mette solo se si usano i puntatori ad esempio *s->nome oppure si può fare anche con i vettori ad esempio vet[i]->nome
ovviamente nome sarà all\'interno di una struct
Larissa BERNARDI
profe io non riesco a capire i puntatori... cioe se io faccio p=&a; printf("inserisci un numero"); scanf("%d", p); -> printf("%d", *p) cosa stampa?
Stefano Salvi
Scardovelli: la "->" si usa solo con i puntatori a struct. Ad esempio se ho la struct qualcosa che coniente un camp int valore, ed un puntatore struct qualcosa *psq, posso scrivere (*psq).valore oppure più facilmente psq->valore. Se hai invece un array struct qualcosa vett[DIM], sei obbligato a scrivere vet[i].valore. Non puoi usare "->".
Daniele SCARDOVELLI
ok grazie
Stefano Salvi
Bernardi: il tuo codice stampa il valore che l\'ntente ha scritto. Tu hai una variabile intera int a ed una variabile puntatore ad intero int *p. Tu prendi l\'indirizzo di a con & e lo metti in p, quindi passi alla scanf l\'indirizzo di a, tramite il puntatore p inizializzato prima. Alla scanf va bene, perché le serve l\'indirizzo di una variabile. Per finire chiami la printf passandole il valore della variabile il cui indirizzo è nl puntatore p, quindi il valore di a, appena ionserito dalla scanf, e quindi lo stampi.
Lara TANFOGLIO
prof in risposta alla domanda che le ho posto prima, probabilmente non l\'ha vista...credo di esserci riuscita...void scambia(char *st, int N){ int i; char c; for(i=0;i<N/2;i++){ c=*(st+i); *(st+i)=*(st+N-i-1); *(st+N-i-1)=c; } }
void scambia(char *st, int N){ int i; char c; for(i=0;i<N/2;i++){ c=*(st+i); *(st+i)=*(st+N-i-1); *(st+N-i-1)=c; } }
non la manda vabbè
volevo solo sapere se è giusta
Stefano Salvi
Tanfoglio: il problema con i puntatori in questa funzione è che devi lavorare con le coppie. potrebbe essere: "void scambia(char *s, int n) { for (;n > 1; n -= 2; s += 2) { int p=*s; *s=*(s+1); *(s+1)=p; } } (cosi di getto, senza verificarla troppo).
Nel for ho messo un ; al posto di una , : n -= 2, s += 2 (l\'errorre in agguato!)
Lara TANFOGLIO
for(i=0;i<N/2;i++){c=*(st+i);*(st+i)=*(st+N-i-1);*(st+N-i-1)=c;} se scrivo il for così quindi è sbagliato?
ma porca miseria non va comunque ci rinuncio
grazie
Stefano Salvi
Non puoi copiare più righe... Mettila tutta su una riga e vedrai che va bene.
Lara TANFOGLIO
eh ho fatto non va comunque :(
Larissa BERNARDI
prof ma cosa cambia dallo scrivere *p e &p ?
Stefano Salvi
Beh, quella che ho scritto io ti è chiara?
Lara TANFOGLIO
no non capisco perchè si fa con le coppie
Stefano Salvi
Bernardi: *p vuole dire "prendi il valore di cui il PUNTATORE p contiene l\'indirizzo" mentre &p vuol dire "prendi l\'indirizzo della variabile p" (che è una costante, in quanto la variabile p nn va in giro).
Larissa BERNARDI
udio...
Stefano Salvi
Tanfoglio: il problema è "scambia ogni caratere pari con il successivo" quindi il carattere pari ed il suo successivo sono una COPPIA di celle tra le quali scambiare il valore.
Lara TANFOGLIO
provo a farlo per l\'ultima volta: for(i=0;i<N/2;i++){c=*(st+i); *(st+i))=*(st+N-i-1); *(st+N-i-1)=c;}
basta mi sparo
Cristian ROSSINI
Scusate il ritardo ho avuto dei problemi
Buonasera!
Stefano Salvi
Tanfoglio: con il copia - incolla non viene... riscrivilo (non dovrebbe essere lunghissimo).
Lara TANFOGLIO
l\'ho scritto io
Stefano Salvi
Rossini... stavamo salutandoci, ci hai trovato per un pelo...
Cristian ROSSINI
Già, scusi il ritardo
Stefano Salvi
Tanfolgio: immagino l\'abbia scritto in Geanu o in Dev e da li lo copi nella riga del browser. È questo che non funziona.
Lara TANFOGLIO
le prime due volte si, la terza no infatti non capisco
for(i=0;i<N/2;i++){c=*(st+i);*(st+i)=*(st+N-i-1); *(st+N-i-1)=c;}
Larissa BERNARDI
si lara ahhahhha
Lara TANFOGLIO
NIENTE
Fa lo stesso
Stefano Salvi
Tanfolgio, a questo pnto sono curioso, mandamelo per mail (al volo, sai l\'indirizzo)
Lara TANFOGLIO
ok va bene ahahha
Stefano Salvi
Pi ci salutiamo se no andiamo vero l\'ora...
Cristian ROSSINI
Prof un\'ultima cosa, avrei un dubbio riguardante gli Array di struct, in merito al loro utilizzo nei programmi
Stefano Salvi
Rossini, dimmi questo dubbio.
Niente, se il dubbio non esce, non so cosa risponderti.
Cristian ROSSINI
Gli utilizzi più frequenti quali situazioni possono riguardare? Nel senso, avendole usate pococi in che tipologie
Di esercizi andrebbero inserite
Mi perdoni la lentezza è che sto usando il cellulare avendo problemi al fisso
Stefano Salvi
Rossini: no, non riesco a risponderti ad una domanda così generica.
Tanfoglo: adesso è meglio che chiuda. Quando mi arriva la mail ti rispondo.
Cristian ROSSINI
Ok capisco, comunque consiste nel fondere insieme le conoscenze di Array applicandole alle struct in breve
Grazie lo stesso
Stefano Salvi
Ok, buona cena, buon riposo ed in bocca al lupo.

[Ritorna all'elenco sessioni]