Esercizi in c. HElp me!

piclar
Salve a tutti , mi servirebbe qualcuno che possa darmi una mano con il c...
Qualcuno potrebbe aiutarmi a realizzare i seguenti esercizi:
Realizzare una funzione in C che:
- effettui il confronto di due vettori di caratteri
- dati due vettori di numeri interi verifichi se sono uguali
- effettui una ricerca del massimo in un vettore di numeri interi di dimensione prefissata
- faccia il concatenamento di due vettori di caratteri
- conti gli elementi di un vettore
- effettui il calcolo della lunghezza di una stringa
- effettui l'inversione dei caratteri di una stringa
- effettui la fusione di due vettori
- conti le occorrenze di un determinato numero letto da tastiera
Sono esercizi separati che non riesco a fare...non è un unico esercizio...se qualcuno può darmi una mano...Grazie

Risposte
vict85
Il forum non nasce per fare esercizi, dovresti presentare delle idee di risoluzione. Anche perché sono cose abbastanza semplici una volta che capisci la logica del C.

Tra l'altro, sono per esserne sicuro che tu intenda proprio il C e non il C++, ma con vettore di interi intendi qualcosa del tipo
int a[10];
oppure qualcosa del tipo
vector<int> a(0, 10);
Non cambia molto comunque.

Siano \(\mathbf{a} = (a_0, a_1, a_2, \dotsc, a_n)\) e \(\mathbf{b} = (b_0, b_1, b_2, \dotsc, b_m)\) due vettori con \(a_i, b_j\in T\) per ogni \(i,j\). Questi ultimi sono uguali se \(n = m\) e se \(a_i =_T b_i\) per ogni \(0\le i\le n\).

A questo punto devi controllare entrambe le condizione se lavori con un vector e solo la seconda nel caso di vettori in stile C. In questo caso infatti non c'é un modo per sapere la dimensione del vettore e quindi la devi leggere in ingresso.

In generale comunque quasi tutti gli algoritmi richiesti hanno la forma
/* inizializzare qualche variabile di controllo */
for(int i = 0, i<n && /* condizioni variabili di controllo */, ++i)
{
  /* fai l'operazione dell'i-esimo passo*/
  
  /* se ci sono ed è necessario aggiorna le variabili di controllo */
}

Cerca di capire cosa devi mettere nei vari pezzi, dopo di che penserai a creare la funzione.

piclar
Sono esercizi di un esame sinceramente...sono alle prime armi e non so proprio da dove iniziare...infatti chiedevo aiut proprio per poter capire le risoluzioni di qualcuno. grazie cmq :(

piclar
vettori di caratteri e stringhe di caratteri sono la stessa cosa?

vict85
"piclar":
vettori di caratteri e stringhe di caratteri sono la stessa cosa?


In C la risposta è ‘quasi’ si. La differenza sta nel fatto che un vettore di caratteri non ha necessariamente il terminatore '\0'. In pratica cambia solo il modo in cui tu ci lavori.

Ti faccio un modo per il caso di vettori di interi. Sta a te provare a fare la funzione dei caratteri.

/*
*  La funzione ritorna un valore intero, il risultato è 0 se i due vettori sono uguali, 
*  il risultato è positivo se vec1 è maggiore di vac2 secondo l'ordine lessicografico, 
*  il risultato è negativo altrimenti
*/
int confronta_vettori_int( int * vec1, int * vec2,  int unsigned n)
{ 
  int r = 0;
  for(int i = 0; i<n && (r == 0); ++i)
  {
    r = vec1[i] - vec2[i];
  }
  return r;
}


Nel caso di vettori di char è pressoché identico, il caso delle stringhe invece non prendi $n$ come input ma devi tenere conto di '\0'. Prova a scrivere qui la tua versione.

piclar
CALCOLO DELLA LUNGHEZZA DI UNA STRINGA
int main( ){
int= i;
i=0;
while(miastringa=' \0'{
i++;
}
printf(" La lunghezza della stringa è%d", i);
}

CONFRONTO DI DUE VETTORI DI CARATTERI
int main( ){
char s1[10]= "mamma";
char s2[10]= "ciao";
int c;
c=string (s1,s2);
if (c==0){
printf (" le due stringhe sono uguali");
} else if (c<0){
printf ("s1 } else {
printf ("s1>s2");
}
return 0;
}

Sono corretti questi due esercizi????

vict85
Devi creare delle ‘funzioni’, perciò non il main(). Comunque immagino tu non abbia neanche provato a compilarlo.

"piclar":
CALCOLO DELLA LUNGHEZZA DI UNA STRINGA
int main( ){
int= i;
i=0;
while(miastringa[i]=' \0'{
i++;
} 
printf(" La lunghezza della stringa è%d", i);
}


Al di là dell'intestazione noto vari errori:
[list=1][*:1tcaaev0]Hai dimenticato di chiudere la tonda nella riga
while(miastringa[i]=' \0'{
[/*:m:1tcaaev0]
[*:1tcaaev0] Nella stessa riga hai scritto = al posto di ==. Il primo è un'assegnazione, il secondo è un confronto. Di fatto il tuo codice ‘azzera’ la stinga e crea potenzialmente danni dovuti al valore di '\0' e alla sua interpretazione come vero e falso.[/*:m:1tcaaev0]
[*:1tcaaev0] Dovresti evitare di usare il printf per ogni funzione. A livello professionale viene usato principalmente per motivi di debug.[/*:m:1tcaaev0][/list:o:1tcaaev0]

"piclar":

CONFRONTO DI DUE VETTORI DI CARATTERI
int main( ){
char s1[10]= "mamma";
char s2[10]= "ciao";
int c;
c=string (s1,s2);
if (c==0){
printf (" le due stringhe sono uguali");
} else if (c<0){
printf ("s1<s2");
} else {
printf ("s1>s2");
}
return 0;
}


Sono corretti questi due esercizi????


Cos'é string(s1,s2)? Una funzione di qualche libreria non standard? Esiste una funzione dello standard che ti fa il confronto di stringhe ma è utile saperne implementare una. Quindi riprova, con una funzione e non all'interno del main().

piclar
Non lo so fare...ecco perchè avevo chiesto aiuto...già mi è stato difficile scrivere il codice su...

piclar
Cmq la parentesi e il doppio uguale sono stati errori di trascrizione mentre nel secondo esercizio con S1 e S2 indico stringa 1 e stringa 2

vict85
Lo avevo capito. Sinceramente penso che dovresti cercare qualche manuale o dispensa e seguirla passo passo. Sul primo immaginavo fossero errori di trascrizione/disattenzione.

Ti assicuro che i tuoi esercizi sono semplici, io posso anche mostrarti il codice ma se non capisci la logica che sta dietro ai vari tipi del C non ti serve a nulla.

Incominciamo dal mio codice per il confronto. Prova a descrivere a parole tue cosa fa la funzione che ho scritto e che cosa fa ogni singola riga. Inoltre prova a spiegare perché funziona.

piclar
Si lo so però ora come ora mi serve vedere la risoluzione di questi esercizi.. magari poi più in là mi fornisco di manuali e provo a capirne qualcosa anche se ci ho provato ma non riesco proprio a entrare nella logica...

apatriarca
[xdom="apatriarca"]In questo forum non si forniscono soluzioni ad esercizi. Soprattutto se la persona che ne fa richiesta non dimostra alcun interesse ad imparare, ma solo a passare l'esame. Dovresti inoltre fare uso del tag CODE (se scrivi il post con l'editor completo trovi un pulsante sopra l'area di testo chiamato Code).[/xdom]

Se questi esercizi sono per te troppo difficili, forse dovresti provare con esercizi più semplici. Per esempio:
1. Scrivere un programma che legge 5 numeri da console e li stampa separati da virgole. Per contenere i numeri li devi memorizzare in un array.
2. Scrivere una funzione che restituisce la somma di due numeri.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.