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?