Torna indietro   Hardware Upgrade Forum > Software > Programmazione

I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers
MSI continua ad investire nel proporre schermi pensati per rispondere alle esigenze dei videogiocatori, utilizzando la quinta generazione di tecnologia QD-OLED sviluppata da Samsung. Il modello MPG 341CQR QD-OLED X36 è lpultima novità al debutto in concomitanza con il CES 2026, uno schermo curvo di ampia risoluzione pensato per i videogiocatori più esigenti
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-03-2008, 18:30   #1
Xizor
Member
 
L'Avatar di Xizor
 
Iscritto dal: Dec 2006
Messaggi: 185
[C++] Passaggio di una struttura di array in una function.

Codice:
#include<iostream.h>
#define n 16
int main(){
int i,a;
struct classe {
       char nome[30];
       char cognome[30];
       char nascita[10];
       char luogo[20];
       };
typedef struct classe studente;
studente classe[n];
cout<<"Inserisci nome, cognome , data e luogo di nascita di "<<n<<" persone\n";
for(i=0;i<n;i++){
                 cout<<"Nome "<<i+1<<":"<<"\n";
                 cin>>classe[i].nome;
                 cout<<"Cognome "<<i+1<<":"<<"\n";
                 cin>>classe[i].cognome;
                 cout<<"Anno di nascita "<<i+1<<":"<<"\n";
                 cin>>classe[i].nascita;
                 cout<<"Luogo di nascita "<<i+1<<":"<<"\n";
                 cin>>classe[i].luogo;
}
cout<<"Inserisci il nome della persona che vuoi cercare"<<"\n";
cin>>classe[a].nome;
for(i=0;i<n;i++){
if(classe[a].nome==classe[i].nome){
cout<<"Ricerca compiuta con successo\n";
cout<<"Nome: "<<classe[a].nome<<" Cognome: "<<classe[a].cognome<<" Anno di nascita: "<<classe[a].nascita<<" Luogo di nascita: "<<classe[a].luogo<<"\n";
}
else {
     a++;
     }
}
system("pause");
return 0;
}
Salve a tutti, io cercavo di passare in una function un array,di uno di quelli all'interno della struttura (ad esempio "cognome") e poi lavorarci lì. Come devo fare il prototipo della funzione ?? E la chiamata? Grazie.

Ultima modifica di Xizor : 06-03-2008 alle 18:44.
Xizor è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2008, 18:42   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Per favore, potresti rieditare con
CODE
invece che con
QUOTE
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2008, 19:26   #3
m.distrutti
Member
 
L'Avatar di m.distrutti
 
Iscritto dal: Sep 2007
Messaggi: 207
Quote:
Originariamente inviato da Xizor Guarda i messaggi
Salve a tutti, io cercavo di passare in una function un array,di uno di quelli all'interno della struttura (ad esempio "cognome") e poi lavorarci lì. Come devo fare il prototipo della funzione ?? E la chiamata? Grazie.
se dentro la funzione gestisci un array di char qualsiasi non penso ti interessi sapere che quell'array faccia parte di una struct nel corpo della funzione, sei tu durante la chiamata che ti preoccupi di tale cosa

void funzione(char* nome);

per poi chiamarla con : funzione(classe[a].nome)

cmq mi ha incuriosito mo ci do un occhiata per vedere se e' possibile specificare quello che richiedi :P
m.distrutti è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2008, 19:37   #4
Xizor
Member
 
L'Avatar di Xizor
 
Iscritto dal: Dec 2006
Messaggi: 185
Quote:
Originariamente inviato da m.distrutti Guarda i messaggi
se dentro la funzione gestisci un array di char qualsiasi non penso ti interessi sapere che quell'array faccia parte di una struct nel corpo della funzione, sei tu durante la chiamata che ti preoccupi di tale cosa

void funzione(char* nome);

per poi chiamarla con : funzione(classe[a].nome)

cmq mi ha incuriosito mo ci do un occhiata per vedere se e' possibile specificare quello che richiedi :P

Ho provato a fare così:

Codice:
#include<iostream.h>
#define n 16
int main(){
void prova (char* nome);
int i,a;
struct classe {
       char nome[30];
       char cognome[30];
       char nascita[10];
       char luogo[20];
       };
typedef struct classe studente;
studente classe[n];
cout<<"Inserisci nome, cognome , data e luogo di nascita di "<<n<<" persone\n";
for(i=0;i<n;i++){
                 cout<<"Nome "<<i+1<<":"<<"\n";
                 cin>>classe[i].nome;
                 cout<<"Cognome "<<i+1<<":"<<"\n";
                 cin>>classe[i].cognome;
                 cout<<"Anno di nascita "<<i+1<<":"<<"\n";
                 cin>>classe[i].nascita;
                 cout<<"Luogo di nascita "<<i+1<<":"<<"\n";
                 cin>>classe[i].luogo;
}
prova(classe[a].nome)
system("pause");
return 0;
}

void prova (char* nome){
int a,i;
cout<<"Inserisci il cognome della persona che vuoi cercare"<<"\n";
cin>>classe[a].nome;
for(i=0;i<n;i++){
if(classe[a].nome==classe[i].nome){
cout<<"Ricerca compiuta con successo\n";
cout<<"Nome: "<<classe[a].nome<<" Cognome: "<<classe[a].cognome<<" Anno di nascita: "<<classe[a].nascita<<" Luogo di nascita: "<<classe[a].luogo<<"\n";
             }
}
return;
}
Mi dice "classe undeclared" nella funzione prova.
Xizor è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2008, 19:51   #5
..::DAVE::..
Senior Member
 
L'Avatar di ..::DAVE::..
 
Iscritto dal: Nov 2006
Città: Mantova
Messaggi: 468
Quote:
Originariamente inviato da Xizor Guarda i messaggi
Ho provato a fare così:

Codice:
void prova (char* nome)
Mi dice "classe undeclared" nella funzione prova.
perche gli passi un char* non un classe*
..::DAVE::.. è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2008, 19:58   #6
Xizor
Member
 
L'Avatar di Xizor
 
Iscritto dal: Dec 2006
Messaggi: 185
Quindi? Credo di non aver capito esattamente quello che intendi.
Xizor è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2008, 20:31   #7
m.distrutti
Member
 
L'Avatar di m.distrutti
 
Iscritto dal: Sep 2007
Messaggi: 207
Quote:
Originariamente inviato da Xizor Guarda i messaggi
Ho provato a fare così:
Mi dice "classe undeclared" nella funzione prova.
il codice ha un bel po di errori sia di logica che di implementazione, dentro prova te vuoi ricercare un nome dentro l'array della struct e non stai usando mai il parametro nome della funzione , inoltre acquisisci nell'array nome il nome che vuoi ricercare rischiando di perdere un nome gia salvato(in un indice a mai inizializzato :S, il C a differenza di linguaggi come Java e Visual Basic non inizializza a zero le variabili), in piu mi hai dichiarato il prototipo di funzione dentro il main

PS: avendo dichiarato classe[] dentro il main sarebbe impossibile ricercarlo dalla funzione prova siccome il suo scope e' dentro il main :S :S

ora ti faccio una mia versione velocemente cosi capisci meglio

Ultima modifica di m.distrutti : 06-03-2008 alle 20:33.
m.distrutti è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2008, 20:45   #8
Xizor
Member
 
L'Avatar di Xizor
 
Iscritto dal: Dec 2006
Messaggi: 185
Quote:
Originariamente inviato da m.distrutti Guarda i messaggi
il codice ha un bel po di errori sia di logica che di implementazione, dentro prova te vuoi ricercare un nome dentro l'array della struct e non stai usando mai il parametro nome della funzione , inoltre acquisisci nell'array nome il nome che vuoi ricercare rischiando di perdere un nome gia salvato(in un indice a mai inizializzato :S, il C a differenza di linguaggi come Java e Visual Basic non inizializza a zero le variabili), in piu mi hai dichiarato il prototipo di funzione dentro il main

PS: avendo dichiarato classe[] dentro il main sarebbe impossibile ricercarlo dalla funzione prova siccome il suo scope e' dentro il main :S :S

ora ti faccio una mia versione velocemente cosi capisci meglio
ok grazie.

perdonami, ho appena iniziato le strutture con le function in c++
Xizor è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2008, 20:45   #9
m.distrutti
Member
 
L'Avatar di m.distrutti
 
Iscritto dal: Sep 2007
Messaggi: 207
Codice:
#include <iostream.h>
#include <string.h>
#define n 2

struct classe {
       char nome[30];
       char cognome[30];
       char nascita[10];

       char luogo[20];
       };
typedef struct classe studente;
void prova (studente*);

studente classe[n];

int main(){
	int i;

cout<<"Inserisci nome, cognome , data e luogo di nascita di "<<n<<" persone\n";
for(i=0;i<n;i++){
                 cout<<"Nome "<<(i+1)<<":"<<"\n";
                 cin>>classe[i].nome;
                 cout<<"Cognome "<<(i+1)<<":"<<"\n";
                 cin>>classe[i].cognome;
                 cout<<"Anno di nascita "<<(i+1)<<":"<<"\n";
                 cin>>classe[i].nascita;
                 cout<<"Luogo di nascita "<<(i+1)<<":"<<"\n";
                 cin>>classe[i].luogo;
}
prova(classe);
getch();
//system("pause");
return 0;
}

void prova (studente* classe){
	char* ricerca;
	cout<<"Inserisci il nome da ricercare";
   cin>>ricerca;
   for(int i = 0;i < n;i++){
   	if(strcmpi(ricerca, classe[i].nome) == 0)
      	cout<<"ricerca compiuta con successo";
   }
}
ok ora va, l'errore che ti dava prima era probabilmente dovuto al fatto che la variabile che usavi (appunto classe) l'avevi dichiarata all'interno del main, percio non essendoci nessun altra variabile classe dichiarata il cui scope potesse essere raggiunto dalla funzione prova ti diceva che non era dichiarata

ora alla funzione passi lo struct , nella funzione acquisisci da tastiera un char* per la tua ricerca e il confronto lo fai case insensitive con la funzione strcmpi

la funzione ti restituisce un valore corrispondente alla differenza degli ultimi caratteri(intesi come valori in byte) confrontati percio se e' zero vuol dire che ha confrontato due byte uguali, due carattri uguali per intenderci

^_^

Ultima modifica di m.distrutti : 06-03-2008 alle 20:48.
m.distrutti è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2008, 20:54   #10
Xizor
Member
 
L'Avatar di Xizor
 
Iscritto dal: Dec 2006
Messaggi: 185
Quote:
Originariamente inviato da m.distrutti Guarda i messaggi
Codice:
#include <iostream.h>
#include <string.h>
#define n 2

struct classe {
       char nome[30];
       char cognome[30];
       char nascita[10];

       char luogo[20];
       };
typedef struct classe studente;
void prova (studente*);

studente classe[n];

int main(){
	int i;

cout<<"Inserisci nome, cognome , data e luogo di nascita di "<<n<<" persone\n";
for(i=0;i<n;i++){
                 cout<<"Nome "<<(i+1)<<":"<<"\n";
                 cin>>classe[i].nome;
                 cout<<"Cognome "<<(i+1)<<":"<<"\n";
                 cin>>classe[i].cognome;
                 cout<<"Anno di nascita "<<(i+1)<<":"<<"\n";
                 cin>>classe[i].nascita;
                 cout<<"Luogo di nascita "<<(i+1)<<":"<<"\n";
                 cin>>classe[i].luogo;
}
prova(classe);
getch();
//system("pause");
return 0;
}

void prova (studente* classe){
	char* ricerca;
	cout<<"Inserisci il nome da ricercare";
   cin>>ricerca;
   for(int i = 0;i < n;i++){
   	if(strcmpi(ricerca, classe[i].nome) == 0)
      	cout<<"ricerca compiuta con successo";
   }
}
ok ora va, l'errore che ti dava prima era probabilmente dovuto al fatto che la variabile che usavi (appunto classe) l'avevi dichiarata all'interno del main, percio non essendoci nessun altra variabile classe dichiarata il cui scope potesse essere raggiunto dalla funzione prova ti diceva che non era dichiarata

ora alla funzione passi lo struct , nella funzione acquisisci da tastiera un char* per la tua ricerca e il confronto lo fai case insensitive con la funzione strcmpi

la funzione ti restituisce un valore corrispondente alla differenza degli ultimi caratteri(intesi come valori in byte) confrontati percio se e' zero vuol dire che ha confrontato due byte uguali, due carattri uguali per intenderci

^_^
Grazie 1000! Però un ultima cosa...getch a cosa serve?? Per caso devo inserire una nuova libreria per includerlo? Perchè mi dice "getch undeclared".
Xizor è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2008, 21:07   #11
m.distrutti
Member
 
L'Avatar di m.distrutti
 
Iscritto dal: Sep 2007
Messaggi: 207
Quote:
Originariamente inviato da Xizor Guarda i messaggi
Grazie 1000! Però un ultima cosa...getch a cosa serve?? Per caso devo inserire una nuova libreria per includerlo? Perchè mi dice "getch undeclared".
omg scusami, in pratica getch(); e' della libreria <conio.h>
acquisisci un carattere e per come l'ho scritto io in pratica serve a non far sparire la finestra dopo l'esecuzione da un compilatore visuale come il mio dato che e' in attesa di questa acquisizione come ultimissima istruzione del programma

e' in pratica lo stesso motivo per il quale usi system(etc...)

ihih

togli il commento a system("PAUSE"); ed elimina elimina getch() che mi son dimenticato di togliere pure quella riga oltre conio

sono piu abituato a programmare puramente in c io >_<

Ultima modifica di m.distrutti : 06-03-2008 alle 21:10.
m.distrutti è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2008, 09:20   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Per favore prima di consigliare funzioni non standard come getch specifichiamolo chiaramente.
getch NON appartiene allo standard C, è una estensione che fu introdotta da Borland e NON c'è in tutti i compilatori o ambienti di sivluppo. Quindi se si vuole usare una funzione non standard in un ambiente scolastico è bene pensarci tante volte ed alla fine non usarla
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
Lo smartphone da comprare oggi è ...
2 super caricatori multipli da 600W o 22...
La Russia prosegue lo sviluppo di reatto...
Roscosmos: da quest'anno ci potrà...
Amazon, tutte le offerte e qualche novit...
Sedie gaming in offerta su Amazon: desig...
Scope elettriche in offerta Amazon: mode...
Ricarica EV fino a 22 kW spendendo poco:...
Costa solo 139€ ma fa tutto: Lefant M330...
Amazon Haul spinge sul risparmio: sconti...
Oral-B iO in offerta su Amazon: maxi sco...
I cosmonauti avrebbero riparato tutte le...
Artemis II: la NASA conferma il lancio d...
Il CEO di Embrak Studios difende l'uso d...
Il Trump Phone è sempre più un mistero: ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:17.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v