Esercizio sul confronto delle righe C++

di il
5 risposte

Esercizio sul confronto delle righe C++

/* Input inserire due numeri interi n maggiore uguale 2, m maggiore uguale 2.
    1. acquisire vettore bidimensionale A[n][m];
    2, procedura che verifica che le righe di A memorizzano gli stessi elementi, non conta l'ordine. 1 se memorizza, 0 se non memorizza.
*/
Ecco la traccia dell'esercizio. Vorrei capire come fare, vi abozzo il codice che sicuramente è sbagliato in quanto mi esce sempre "Righe Differenti". Avevo pensato nella procedura a bloccare il primo ciclo delle righe, a fare un altro ciclo che ti controllasse ogni elemento della riga successiva, se il primo controllo è diverso dal secondo, quando trova un elemento differente, esce in output "Diversi". Il problema mio non è solo quello di andare nella riga sotto, ma anche quello dell'ordine, cioè riesco a controllare solo l'elemento [0][0] con [1][0], ad esempio.
Sono sotto esame di Progr. 1, e scusatemi l'ansia
/* Input due numeri interi n maggiore uguale 2, m maggiore uguale 2
    acqusire vettore bidimensionale A[n][m];
    procedura che verifica che le righe di A memorizzano gli stessi elementi
*/

#include <iostream>
using namespace std;
int acquisisco (int n);
void acquisisco_mat(int n, int m);
void procedura (int *punt, int n, int m);
int main (){
        int n= acquisisco (n);
        int m= acquisisco (m);
        int A[n][m];
        acquisisco_mat(n,m);
        int *punt = &A[0][0];
        procedura(punt, n,m);
return 0;
}

int acquisisco (int n){
    cout << "Inserisci un numero maggiore o uguale a 2: ";
    do {
            cin >> n;
            if (n<2){
                        cout << "Riprova."<<endl;
            }
    }
    while (n<2);
    return n;
}

void acquisisco_mat(int n, int m){
    int A[n][m];
    for (int i=0; i<n; i++){
        for (int j=0; j<m; j++){
            cout << "Elemento ["<<i<<"] ["<<j<<"]: ";
            cin >> A[i][j];
        }
    }
}

void procedura (int *punt, int n, int m){
        int verifico=0; int A[n][m];int c=0;
        for (int i=0; i<n; i++){
        for (int j=1+i; j<*(punt+i);j++){
        c=0;
        for (int k=0; k<i; k++){
                    if (A[i][k]!=A[j][k])
                    c++;
                    if (c==*(punt+i)){
                        verifico=1;
                        c=0;
            }
            }
            }
            }
        if (verifico)
                cout << "Stessi elementi" << endl;
            else
                cout << "Diversi elementi" << endl;
}

5 Risposte

  • Re: Esercizio sul confronto delle righe C++

    La funzione acquisisco non deve avere parametri, deve solo restituire il valore intero. La sua variabile deve essere locale.

    La funzione acquisisco_mat non deve lavorare su una matrice locale, ma su quella del main passata per argomento.

    La funzione procedura usa un array locale e un puntatore all'array esterno del main ... tutto sbagliato. Devi passare A alla funzione su cui lavorare e non usare array locali.
  • Re: Esercizio sul confronto delle righe C++

    Ok e allora casomai ti risultasse facile, puoi farmi solo la procedura 2 del programma che chiede la traccia?
  • Re: Esercizio sul confronto delle righe C++

    No, qui non si chiede il codice degli esercizi
  • Re: Esercizio sul confronto delle righe C++

    Diciamo che si chiede, ma non si dà

    Ragiona un attimo: come confronti due righe senza che l'ordine sia importante?
    r1={3,4,5}
    r2={5,4,3}
    ?
  • Re: Esercizio sul confronto delle righe C++

    Posso mettere in ordine le due righe e confrontare il numero di una riga con quello della riga sotto
Devi accedere o registrarti per scrivere nel forum
5 risposte