Problema con Pause e Funzioni

di il
5 risposte

Problema con Pause e Funzioni

Ciao ragazzi! Martedì ho un esame di programmazione ed ho riscontrato un problema con questo programma:


Lo scopo del programma è leggere una matrice ed un intero N in imput, e stampare un array di interi in cui siano memorizzati i valori presenti esattamente N volte nella matrice.

Tutto funziona bene finchè N è 2 o più, tuttavia quando N=1 il programma funziona ma non si ferma, quindi non riesco a leggere i risultati.

La cosa inspiegabile è che aggiungendo un system("pause") PRIMA DI INVOCARE LA FUNZIONE, il programma funziona anche con N=1.

Perchè?!?!?!

Qui è il programma NON FUNZIONANTE PER N=1
#include<iostream>
#define dim 5
using namespace std;

bool alreadyhere (int a[],int x,int pos)
{ for (int i=0;i<pos;i++)
     {if (a[i]==x)
          {return true;
          }
     }
 return false;
}

int findimention (int m[dim][dim], int r)
{int d=0;
int cont =0;
for (int i=0;i<dim;i++)
  {for (int j=0;j<dim;j++)
      {cont=0;
       for (int a=0;a<dim;a++)
          {for (int b=0;b<dim;b++)
              {if (m[i][j]==m[a][b])
                  {cont ++;
                  }
              } 
          }
       if (cont==r)
           {d++;
           }
       }
  }
return d/r;
}

int* repeated (int m[dim][dim], int r)
{int* k=new int[findimention(m,2)];
int count=0;
int pos=0;
for (int i=0;i<dim;i++)
  {for (int j=0;j<dim;j++)
     {count =0;
      for (int a=0;a<dim;a++)
          {for (int b=0;b<dim;b++)
            {if(m[i][j]==m[a][b])
                {count ++;
                }
            } 
           }
      if (count == r && alreadyhere(k ,m[i][j], pos) == false)
         {k[pos]=m[i][j];
         pos++;
         }
      }
  }
return k;
}

void stamp (int* v, int z)
{for (int i=0;i<z;i++)
   {cout<<"\nElement"<<i+1<<"--->"<<v[i];
    }
}


int main ()
{int a[][dim]= {{13,13,14,22,8},{3,17,9,21,16},{33,27,44,51,17},{8,1,-3,22,4},{2,0,17,-9,-3}};
cout<<"Function REPEATED\n\n\nInsert number of repetitions--->";
int N;
cin>>N;
stamp ( repeated(a,N),findimention(a,N));     
system ("Pause");
return 0;
}
SPIEGO LE FUNZIONI:
alreadyhere controlla che un valore che andrebbe inserito nel vettore non sia già presente
findimention serve a trovare la dimensione del vettore che sarà stampato
repeated è la funziona che controlla le ripetizioni, e se un numero è ripetuto N volte e non è già presente nel vettore (controllando con alreadyhere) lo inserisce nel vettore
stamp è una funzione di stampa..




SE INVECE IL PROGRAMMA LO SCRIVO COSI' , FUNZIONA ANCHE PER N=1
...
int main()
{...
... 
system ("Pause"); // --->SE AGGIUNGO QUESTA PAUSA TUTTO VA BENE
stamp ( repeated(a,rep),findimention(a,rep));     
system ("Pause");
Qualcuno può aiutarmi?

5 Risposte

  • Re: Problema con Pause e Funzioni

    Percaso usi dev-c++?
    perchè al 99% è quello il problema,ho copiato e incollato il codice ,tolto il system pause alla fine,inserito uno e tutto è andato a meraviglia.
    Non sarà mica che tutte le volte che dico che quell'ide è una ciofeca ho ragione?
    Scaricati CODE::BLOCKS
  • Re: Problema con Pause e Funzioni

    Saranno gli occhi stanchi ma a quale

    N

    ti riferisci??
  • Re: Problema con Pause e Funzioni

    Ragazzi era colpa del DEV c++, l' ho messo su codeblocks e funziona perfettamente....
    E' da stamattina alle 10 che sto impazzendo, maledetto DEV....

    Grazie mille della risposta!!!


    .. comunque l' N sarebbe "rep" nel programma!
  • Re: Problema con Pause e Funzioni

    stepp92 ha scritto:


    .. comunque l' N sarebbe "rep" nel programma!
    Ah ... dovevo solo immaginarlo ... (ma la sfera è a riparare ...)
  • Re: Problema con Pause e Funzioni

    Il fatto è che l' ho postato su un forum inglese anche, con rep che sta per repetition, e nel copiare in italiano sostituendo N con rep ho dimenticato di modificarlo nel main, ora provvedo a correggere in ogni caso!
Devi accedere o registrarti per scrivere nel forum
5 risposte