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.
|