[C++] Consiglio esercizi array con 1 funzione
Salve, scrivo per chiedere qualche consiglio "didattico" su esercizi che potrei fare per esercitarmi per l'esame di Elementi di Informatica. Gli esercizi da fare sono array (sia vettori che matrici) con 1 sottoprogramma (o funzione o subroutine, come preferite). Vi scrivo qui qualcuno che ho già fatto, ma ne cerco degli altri (metto in spoiler):
Grazie!
Grazie!

Risposte
Il C++ non definisce il tipo matrice a meno che il numero delle colonne non sia fissato. Vi è quindi una certa arbitrarietà su come vadano risolti questi problemi. Devi definirli dinamicamente?
Non è difficile tirare fuori nuovi esercizi su array e matrici. Qualsiasi funziona matematica definita su questi oggetti è in effetti adatta ad essere usata come esercizio. Per fare alcuni esempi: determinante, norme di diverso tipo, massimi, minimi, quartili, medie, mediane.. Sono poi possibili alcuni "giochi" da cui prendere ispirazione: calcolare il punteggio di una mano di poker, mastermind, Gioco del quindici.. Altri esempi sono la generazione di matrici particolari: matrici magiche, matrici con pattern particolari.. Si può poi provare a fare funzioni di ordinamento o che calcolano delle partizioni o permutazioni o altro. Insomma.. c'è l'imbarazzo della scelta.
Ciao, innanzitutto grazie per i suggerimenti. Si, sono da definire dinamicamente.
Ho qualche problema a sviluppare con sottoprogrammma gli esercizi che richiedono di cancellare una riga/colonna di una matrice e ottenere la matrice ridotta, lo riesco a fare solo con il programma principale come lo metto qui sotto. Sono io che non ci riesco o non si può fare?
Ho qualche problema a sviluppare con sottoprogrammma gli esercizi che richiedono di cancellare una riga/colonna di una matrice e ottenere la matrice ridotta, lo riesco a fare solo con il programma principale come lo metto qui sotto. Sono io che non ci riesco o non si può fare?

#include <iostream> #include <stdlib.h> using namespace std; // Legge una matrice, elimina una colonna e stampa la matrice ridotta. int main () { float mat[10][10]; int m, n, i, j, x; cout<< "Quante righe ha la tua matrice? (max 10)" <<endl; cin>>m; cout<< "Quante colonne ha la tua matrice? (max 10)" <<endl; cin>>n; if (m>0&&m<=10&&n>0&&n<=10) { for (i=1;i<=m;i++) { for (j=1;j<=n;j++) { cout<< "Dammi l'elemento alla posizione " <<i<<" "<<j<<endl; cin>>mat[i][j]; } } cout<< "Quale colonna vuoi cancellare? " <<endl; cin>>x; for (i=1;i<=m;i++) { for (j=x;j<=n-1;j++) { mat[i][j]=mat[i][j+1]; } } cout<< "La matrice e' " <<endl; for (i=1;i<=m;i++) { for (j=1;j<=n-1;j++) { cout<<mat[i][j]<<" "; } cout<<endl; } cout<<endl; } else { cout<< "Numero di elementi non accettabile " <<endl<<endl; } system ("pause"); return 0; }
Non hai definito l'array dinamicamente.
"vict85":
Non hai definito l'array dinamicamente.
Si hai ragione, comunque partendo dal programma unico sono riuscito a sviluppare sia l'eliminazione di una riga che l'eliminazione di una colonna di una matrice con subroutine.
Ora sto cercando di fare questo esercizio:
ma non so come impostare la ricerca dell'elemento. Ho provato a sviluppare una funzione con l'algoritmo della ricerca binaria (spero e credo si chiami così) ma mi dà dei valori sballati, come ad esempio che il valore è presente 85476214 volte

Spero qualcuno possa aiutarmi. Perdonate le imprecisioni nell'uso della terminologia

La ricerca binaria funziona solo su array ordinati. Comunque non devi ordinare, devi semplicemente fare un ciclo sugli elementi e aumentare un contatore in base al numero di ripetizioni che trovi.
Ho provato a fare in questo modo ma non riesco ad ottenere ciò che voglio... Se qualcuno potesse correggere il codice e spiegarmi cosa sbaglio gli sarei estremamente grato.
#include <iostream> #include <stdlib.h> using namespace std; /*Progettare e realizzare un programma principale che legge una vettore V con n elementi di tipo reale. Inoltre legge un valore X di tipo reale. V ed X sono i parametri di input di una subroutine (CONTA) che conta quante volte è presente X tra gli elementi del vettore V. Il contatore è il parametro di uscita e viene stampato dal programma principale. */ void CONTA (float V[300], float X, float C) { int i,n; C=0; for(i=1;i<=n;i++) { if (V[i]==X) { C=C+1; } } } int main () { int n, i, C; float V[300], X; cout<<"Scegliere il numero di elementi del vettore, MAX 300"<<endl; cin>>n; if(n<300&&n>0) { for(i=1;i<=n;i++) { cout<<"Dammi l'elemento "<<i<<endl; cin>>V[i]; } cout<<"Dammi l'elemento da cercare nel vettore V"<<endl; cin>>X; CONTA (V, X, C); cout<<"L'elemento selezionato e' presente nel vettore "<<C<<" volta/e"<<endl; } else { cout<<"Numero di elementi non previsto"<<endl; } system("Pause"); return 0; }
Non errori gravi sia in conta che nel main. Vieni da altri linguaggi?
In ogni caso i cicli devono partire da 0, una variabile che conta dovrebbe essere di tipo intero e una funzione che ritorna void dovrebbe avere almeno un puntatore o un reference tra i parametri (a meno che ci siano variabili globali).
Il problema del tuo codice è che sostanzialmente non fa niente. Prova a fare un programma che passa una variabile intera ad una funzione e la ritorna sommata di 1 se è maggiore di 5.
In ogni caso i cicli devono partire da 0, una variabile che conta dovrebbe essere di tipo intero e una funzione che ritorna void dovrebbe avere almeno un puntatore o un reference tra i parametri (a meno che ci siano variabili globali).
Il problema del tuo codice è che sostanzialmente non fa niente. Prova a fare un programma che passa una variabile intera ad una funzione e la ritorna sommata di 1 se è maggiore di 5.