Programma c++ su array

di il
30 risposte

Programma c++ su array

Allora ragazzi mi sto spaccando la testa su questo programma mi dice:
Dato un array x di interi di dimensione logica n verificare se:
i numeri che occorrono in x, occorrono in x lo stesso numero di volte.
esempio: se l'array è fatto così ={1,5,-2,5,-2,4,4,1} mi restituisce vero
altrimenti se fosse fatto così ={3,-5,4,-5} mi restituisce falso

il mio problema come si può capire è trovare un algoritmo per la risoluzione di questo problema

ci ho provato ma niente
ecco qui il mio programma


#include<iostream>

using namespace std;

int main()
{
const int DIM=14;
int x[DIM];
int n=0;
bool finito=false;
do
{
cout<<"Inserire i valori di numeri interi dell'array o -1 per interrompere\n";
cin>>x[n];
finito=x[n]==-1;
if(!finito)
n++;

}while(!finito && n<DIM);

for(int i=0;i<n;i++)
{
for(int k=1;k<i;k++)
{
if(x=x[i+k])
cout<<x;
else
return 0;
}
}


return 0;
}


credo che la prima parte compreso il ciclo do-while sia corretto(in quanto mi serve sia per leggere i vari valori che do in input e anche per fermarmi tramite la variabile booleana finito
il problema è che non riesco a strutturare il for
ovvero non riesco a risolvere l'algoritmo

30 Risposte

  • Re: Programma c++ su array

    Il problema è un altro: Qualsiasi cosa noi scriviamo tu non rispondi dopo. Come credi di crescere così se non dici quello che non ti è chiaro?
    cmq io procederei così:
    0. Crea un struct così
    
    struct
    {
       int numero;
       int volte;
    }
    
    1. Leggi l'input e a quanto vedo l'hai fatto. Una precisazione solo
    
    finito = (x[n] == -1); //è + capibile e gli spazi sono gratis.
    
    2. Crea un arrary di questo struct di dimensione max DIM.
    3. Ogni valore di X non inserito nell'array di struct lo metti in una cella vuota incrementando il campo volte a 1.
    4. Se trovi un valore di X già inserito nell'array di struct incrementi il campo volte.
    5. Attraversi l'array di struct e vedi se tutti i campi volte sono uguali se si ritorna true, altrimenti false.
  • Re: Programma c++ su array

    Lo struct nn l'ho ancora fatto
  • Re: Programma c++ su array

    skynet ha scritto:


    Il problema è un altro: Qualsiasi cosa noi scriviamo tu non rispondi dopo.
    Già, fa lo stesso in un altro forum, postando per di più gli stessi problemi.
  • Re: Programma c++ su array

    Allora la soluzione è + semplice anche se di complessità O(n^2).
    Scandisci il vettore e mentre scandisci togli gli elementi che sono uguali a x[0]. Tieni conto delle volte che hai incontrato un elemento = x[0]. alle fine togli anche x[0].Quindi in soldoni:
    
    Passo 1:
    {1,5,-2,5,-2,4,4,1}
    Alla ricerca di tutti gli elementi = x[0] quindi = a 1
    Dopo la ricerca hai il numero di volte = 2 e il vettore risultante così
    {5,-2,5,-2,4,4}
    Prossegui alla ricerca del x[0] che in questo caso è il 5
    volte è sempre = 2 e il vettore risultante così
    {-2,-2,4,4}
    Adesso cerchi sempre x[0] ma che diventa il -2
    volte è sempre = 2 e il vettore resta così:
    {4,4}
    Adesso cerchi sempre x[0] ma che diventa il 4
    volte è sempre = 2 e il vettore resta così:
    {}
    Vettore vuoto, il numero di volte non è mai cambiato. Ricerca finita con true.
    
  • Re: Programma c++ su array

    stan ha scritto:


    skynet ha scritto:


    Il problema è un altro: Qualsiasi cosa noi scriviamo tu non rispondi dopo.
    Già, fa lo stesso in un altro forum, postando per di più gli stessi problemi.
    Secondo te perche non li posto la soluzione ma solo l'algoritmo? Quì è diventato ndo coio coio.
  • Re: Programma c++ su array

    skynet ha scritto:


    0. Crea un struct così
    [...]
    Perchè hai messo il punto 0? Mica è un array
  • Re: Programma c++ su array

    Perche mi è venuta dopo. Pigrizia
  • Re: Programma c++ su array

    Ora ci provo e vi faccio sapere
    grazie mille
  • Re: Programma c++ su array

    L'algoritmo l'ho capito ora ma ho due problemi
    uno a livello di programmazione, è che non so come trovare il numero di volte con cui è presente il valore x[0] nell'array

    secondo problema è che se un numero è presente tre volte e tutti gli altri due volte come faccio a scrivere che mi dia errore?
  • Re: Programma c++ su array

    
    per ogni i in x con i che parte da 1 a lunghezza x 
     se x di i uguale a x di 0
      incremento numero di volte.
    
    a fine ciclo: 
    se numero di volte è diverso da numero di volte precedente
      stampo array non valido
     altrimenti elimino gli elementi con valore uguale a x di 0 e poi elimino anche x di 0.
    
    ricomincio da capo finché l'array non rimane vuoto.
    
  • Re: Programma c++ su array

    Ragazzi ma utilizzando le funzioni come si fa
    non riesco proprio a capire
    se qualcuno può aiutarmi e dirmi quante funzioni devo utilizzare
    mi da una mano a scrivere il codice
  • Re: Programma c++ su array

    Riesci ma a concludere un discorso o ne apri sempre dei nuovi. Impara a camminare prima di imparare a correre. Poi non sappiamo mai dove'è che ti sei fermato, cosa non capisci ecc. Le tue domande sono sempre: come si fa, mi date una mano a scrivere il codice. Ti è stato già dimostrato che qui nessuno scriverà una riga di codice se prima non provi che hai fatto qualche tentativo.
  • Re: Programma c++ su array

    Hai ragione mi sono scordato di mettere il codice

    se qualcuno avesse msn e ha una decina di minuti per spiegarmi meglio qualche problema riguardo questo algoritmo e le funzioni in generale mi farebbe un gran piacere

    #include<iostream>
    using namespace std;
    int occorrenze(int [], int , int);
    int main()
    {
    const int DIM=100;
    int a[DIM];
    int n=0;
    int dimensione_logica=0;

    int num;
    bool test=true;
    cout<<"Inserire dei numeri o una lettera per terminare"<<endl;
    while(test && n<DIM)
    {
    cin>>num;
    if(!cin.fail())
    {
    a[n]=num;
    n++;
    }
    else
    test=false;
    }
    dimensione_logica=n;
    cout<<endl<<"la dimensione logica è uguale a "<<n<< endl;

    int x;
    cout<<"Inserisci un numero e verifica quante volte ci sta nell'array";
    cin>>x;
    }
    int occorrenze(int a[], int n, int x)
    {
    int i;
    int contatore =0;
    for(i=0;i<n;i++)
    if(a==x)
    contatore++;
    return contatore;
    }

    bool funzione(int a[], int n)
    {
    bool condizione=true;
    int i=1;
    int occ=occorrenze(a,n,a[0]);
    while(i<n && condizione)
    {
    if(occ!=occorrenze(a,n,a))
    condizione=false;
    i++;
    }
    return condizione;
    }




    ***non riesco ad usare proprio le funzioni
  • Re: Programma c++ su array

    Metti a posto questo:
    
    int occorrenze(int a[], int n, int x)
    {
    int i;
    int contatore =0;
    for(i=0;i<n;i++)
           if(a==x)
                contatore++;
    return contatore;
    } 
    
    a è un array di int non un int.

    Puoi chiamare la funzione occorenze dal main così:
    
    int quanteVolte = occorrenze(a,n,x);
    
Devi accedere o registrarti per scrivere nel forum
30 risposte