E' passato un pò di tempo. Sto rifacendo gli esercizi, in particolare questo:
Siano dati in ingresso una matrice di numeri interi M e un valore intero K. Scrivere un programma che verifichi se esistono almeno due colonne di M i cui valori siano ordinati in modo crescente. Se tale condizione risulta verificata si provveda a fondere gli elementi di tali colonne in un vettore ordinato V: nel fare questa operazione si deve garantire che il vettore V contenga solo gli elementi che sono a distanza maggiore di K tra loro. Stampare infine la matrice M, indicare gli indici delle colonne a valori crescenti eventualmente trovate e, nel caso, il vettore V ottenuto.
Non capisco bene come interpretare la condizione "si deve garantire che il vettore V contenga solo gli elementi che sono a distanza maggiore di K tra loro. ". La richiesta secondo me è imprecisa. Sono in attesa di consigli grazie.
#include <iostream>
#include<math.h>
#include<stdlib.h>
using namespace std;
void imatrice(int nrig,int ncol,int M[][100])
{
for(int i=0;i<nrig;i++)
{
cout<<"\n";
for(int j=0;j<ncol;j++)
{
cout<<"Inserisci l'elemento posto alla riga "<<i+1<<" e colonna "<<j+1<<"\n";
cin>>M[i][j];
}
}
}
void omatrice(int nrig,int ncol,int M[][100])
{
for(int i=0;i<nrig;i++)
{
cout<<"\n";
for(int j=0;j<ncol;j++)
{
cout<<" "<<M[i][j]<<" ";
}
}
}
void ivettore(int dim,int V[])
{
for(int i=0;i<dim;i++)
{
cout<<"Inserisci l'elemento "<<i+1<<" ";
cin>>V[i];
}
}
void ovettore(int dim,int V[])
{
for(int i=0;i<dim;i++)
{
cout<<" "<<V[i];
}
}
bool colonna_crescente(int nrig,int ncol,int M[][100],int col)
{
for(int i=0;i<nrig-1;i++)
{
if(M[i][col]<M[i+1][col])
{
if(i+1==nrig-1)
return true;
}
else
return false;
}
}
void filtra_vettore(int dim,int V[],int dis)
{
for(int i=0;i<dim-1;i++)
{
while(abs(V[i]-V[i+1])<=dis)
{
if(i==dim-2)
{
dim=dim-2;
cout<<"Il vettore che contiene solo gli elementi distanti più di "<<dis<<" è\n";
ovettore(dim,V);
exit(0);
}
for(int j=0;j<dim-2;j++)
{
V[i+j]=V[i+j+2];
}
dim=dim-2;
if(dim<=1)
{
cout<<"Il vettore che contiene solo gli elementi distanti più di "<<dis<<" è\n";
ovettore(dim,V);
exit(0);
}
}
}
}
int main()
{
int M[100][100];
cout<<"\nNumero righe matrice ";
int nrig;
cin>>nrig;
cout<<"\nNumero colonne ";
int ncol;
cin>>ncol;
imatrice(nrig,ncol,M);
cout<<"\nHai inserito la matrice ";
omatrice(nrig,ncol,M);
int col;
int col_cresc[ncol];
int i=-1;
for(int col=0;col<ncol;col++)
{
if(colonna_crescente(nrig,ncol,M,col))
{
cout<<"\nLa colonna "<<col+1<<" è crescente.";
++i;
col_cresc[i]=col;
}
else
{
cout<<"\nLa colonna "<<col+1<<" non è crescente.";
}
}
if(i+1>=2) //i+1 rappresenta il numero di colonne crescenti
cout<<"\nEsistono almeno 2 colonne crescenti.";
else
cout<<"\nNon esistono almeno 2 colonne crescenti.";
int fusione_colcresc[100];
int dim=nrig*(i+1);
int l=-1;
for(int j=0;j<=i;j++)
{
for(int k=0;k<nrig;k++)
{
l++;
fusione_colcresc[l]=M[k][col_cresc[j]];
}
}
cout<<"\nIl vettore ottenuto dalla fusione delle colonne crescenti è\n";
ovettore(dim,fusione_colcresc);
int dis;
cout<<"\nLa distanza tra gli elementi deve essere maggiore di.......\n";
cout<<"Scegli un valore ";
cin>>dis;
cout<<"Il vettore che contiene solo gli elementi distanti più di "<<dis<<" è\n";
filtra_vettore(dim,fusione_colcresc,dis);
ovettore(dim,fusione_colcresc);
}