Programma in c++

Agny19
salve,
ho fatto qst programma per calcolare il minimo di un array ma nn riesco a capire perchè non funzioni infatti mi restituisce sempre il valore 4
potreste aiutarmi a capire ql è l'errore grz mille ;D



 #include <iostream>

using namespace std;
void inserisci_vettore();
int min(int v[]);


int main (){
    
    int minimo,v[100],n;
    
    inserisci_vettore();
  
    minimo= min(v);



  system("pause");
}
        
        
void inserisci_vettore(){
             
   int i,n,v[100];
   
             cout<<"quanti numeri vuoi inserire"<<endl;
             cin>>n;
             for (i=0; i<n; i++){
          cout<<"inseriscii valori"<<endl;
          cin>>v[i];
                  }
                  }  
                  
int min(int v[]){
       int i,min,n;  
        min=v[0];
    for(i=0;i<n;i++){
                 if(v[i]<min){
                 min=v[i];
                 }
                 }
                     cout<<"il minimo è"<<min<<endl;
                 
          return min;
          }

Risposte
garnak.olegovitc1
Salve Agnypaky,
purtroppo io non ho studiato il C++ ma il C, ed con questo ti potrei dare i seguenti algoritmi:

RICERCA DI MASSIMO E MINIMO IN UN ARRAY MONO-DIMENSIONALE

Ricercare un massimo e un minimo all'interno di array significa confrontare tutti gli elementi con loro stessi, per fare ciò si farà ricorso ad una variabile ausiliaria che verrà assegnata all'elemento iniziale dell'array e varierà all'interno del ciclo – for ogni volta che incontra un valore più grande di essa. La ricerca viene fatta almeno dopo il caricamento dell'array. Gli algoritmi per la ricerca del massimo e del minimo sono i seguenti:

- RICERCA DI MASSIMO IN UN ARRAY MONO-DIMENSIONALE CON CARICAMENTO PER COLONNE

#include <stdio.h>

tipo 	nome_matrice [dimensione],max,num;
int 	k,colon;

void main(void)
{
	.
	.
	max=nome_matrice[0]; 
	for(k=0; k<colon; k++)
	{
		if(nome_matrice[k]>max)
		{
			max=nome_matrice[k];
            	}
	}
	printf("\n");
	printf("\n");
	printf("IL VALORE MASSIMO DELL'ARRAY E' %tipo", max);
	.
	.
}


- RICERCA DI MASSIMO IN UN ARRAY MONO-DIMENSIONALE CON CARICAMENTO PER RIGHE

#include <stdio.h>

tipo 	nome_matrice [dimensione],max,num;
int 	j,righ;

void main(void)
{
	.
	.
	max=nome_matrice[0]; 
	for(j=0; j<righ; j++)
	{
		if(nome_matrice[j]>max)
		{
			max=nome_matrice[j];
            	}
	}
	printf("\n");
	printf("\n");
	printf("IL VALORE MASSIMO DELL'ARRAY E' %tipo", max);
	.
	.
}


- RICERCA DI MINIMO IN UN ARRAY MONO-DIMENSIONALE CON CARICAMENTO PER COLONNE

#include <stdio.h>

int 	nome_matrice [dimensione],min,num;
int 	k,colon;

void main(void)
{
	.
	.
	max=nome_matrice[0]; 
	for(k=0; k<colon; k++)
	{
		if(nome_matrice[k]<min)
		{
			min=nome_matrice[k];
            	}
	}
	printf("\n");
	printf("\n");
	printf("IL VALORE MINIMO DELL'ARRAY E' %tipo", min);
	.
	.
}


- RICERCA DI MINIMO IN UN ARRAY MONO-DIMENSIONALE CON CARICAMENTO PER RIGHE

#include <stdio.h>

int 	nome_matrice [dimensione],min,num;
int 	j,righ;

void main(void)
{
	.
	.
	max=nome_matrice[0]; 
	for(j=0; j<righ; j++)
	{
		if(nome_matrice[j]<min)
		{
			min=nome_matrice[j];
            	}
	}
	printf("\n");
	printf("\n");
	printf("IL VALORE MINIMO DELL'ARRAY E' %tipo", min);
	.
	.
}

ed anche:

RICERCA DI MASSIMO E MINIMO IN UN ARRAY BI – DIMENSIONALE

Anche qui valgono le medesime osservazioni fatte per la ricerca di massimo e minimo in un array mono – dimensionale, ed la ricerca va fatta almeno dopo il caricamento dell'array.

RICERCA DI MASSIMO IN UN ARRAY BI – DIMENSIONALE

#include <stdio.h>

tipo	nome_matrice [dimensione][dimensione],max,num;
int 	j,k,colon,righ;

void main(void)
{
	.
	.
	max=nome_matrice[0][0];
	for(j=0; j<righ; j++)
	{
		for(k=0; k<colon; k++)
		{
			if(nome_matrice[j][k]>max)
			{
				max=nome_matrice[j][k];
			}
		}
	}
	printf("\n");
 	printf("\n");
	printf("IL VALORE MASSIMO DELL'ARRAY E' %tipo", max);
	.
	.
}

RICERCA DI MINIMO IN UN ARRAY BI – DIMENSIONALE

#include <stdio.h>

tipo	nome_matrice [100][100],min,num;
int 	j,k,colon,righ;

void main(void)
{
	.
	.
	min=nome_matrice[0][0];
	for(j=0; j<righ; j++)
	{
		for(k=0; k<colon; k++)
		{
			if(nome_matrice[j][k]<min)
			{
				min=nome_matrice[j][k];
			}
		}
	}
	printf("\n");
 	printf("\n");
	printf("IL VALORE MINIMO DELL'ARRAY E' %tipo", min);
	.
	.
}


Spero di averti aiutato.
Cordiali saluti

P.S.=Da quello che ho letto a riguardo del C++, ti posso dire che non dovresti avere difficoltà a tradurre interlinearmente da un algoritmo in C ad uno in C++. Che libro usi per il C++?

Agny19
sisi nn ce tanta differenza tra c e c++ ;) riesco a tradurre da sola senza nessun libro .... cmq grz lo stesso ho trovato l'errore e ke dovevo aggiungere una banalissima variabile nella funzione .....x una piccolissima cosa nn messa sballa tt :D

garnak.olegovitc1
Salve Agnypaky,
sono contento che tu abbia trovato l'errore.
Cordiali saluti

vict85
"garnak.olegovitc":
Salve Agnypaky,
purtroppo io non ho studiato il C++ ma il C, ed con questo ti potrei dare i seguenti algoritmi:


Il C++ compila quasi qualsiasi codice C90 mentre ha alcune differenze con il C99. In alcune cose è più permissivo in altre è più restrittivo. Su alcune cose come i const ha un comportamenti leggermente diversi.

Nel caso del codice che hai scritto ho notato che hai usato una variabile globale. Vediamo come comportarsi nel caso di variabili locali.

#include <iostream>

typedef int value_t;

unsigned int const crea_vettore(value_t *);

value_t const min_vettore(value_t * const, unsigned int const);

void cancella_vettore(value_t * ptr) {
    delete[] ptr;
}

int main ()
{
    value_t * ptr;

    unsigned int const n = crea_vettore(ptr);

    std::cout << min_vettore(ptr, n) << std::endl;

    cancella_vettore(ptr);
    
    return 0;
}

unsigned int const crea_vettore(value_t * ptr) 
{
    unsigned int n;

    std::cout << "Quanti numeri vuoi inserire?" << std::endl;
    std::cin >> n;

    ptr = new value_t[n];

    for(unsigned int i=0; i<n; ++i){
        std::cout<<"Immetti il "<< i+1 << " valore." << std::endl;
        std::cin>>ptr[i];
        std::cout << std::endl;
    }
    return n;
}

value_t const min_vettore(value_t * const ptr, unsigned int const n) {

    value_t min = ptr[0];
    for(unsigned int i=1; i<n; ++i) {
        if(ptr[i] < min)
            min=ptr[i];
    }
    
    return min;
}


I const li puoi ignorare se ti confondono. Gli std:: sono invece per evitare l'using namespace std; (ci sono dei vantaggi a non usarlo).

Un modo alternativo è inoltre quello di passare l'array alla funzione invece del puntatore e non usare l'allocazione dinamica. O anche usare i vector.

garnak.olegovitc1
Salve vict85,
sono ben consapevole delle sue osservazioni, ma non sapendo la sua preparazione mi sono limitato ad algoritmi di base, seppur modificabili in altri migliori. Preferisco, anche, una procedura bottom up, e sono contento che mi proponi algoritmi più funzionale da un punto di vista della computazione ed automazione.

P.S.=Comunque la ringrazio per le sue delucidazioni, al momento opportuno ne terrò conto

vict85
Immaginavo che sapessi usare l'allocazione dinamica (anche se quella è una cosa in cui generalmente i programmatori C usano funzioni diverse rispetto al C++). Il codice era per completezza rispetto a Agnypaky anche perché il suo codice peccava un po' in termini di comprensione della validità di una variabile.

Ti ho quotato solo per informarti un po' di più delle differenza tra C e C++ che non sapevo quanto ne sapevi. In pratica solo per dire che potevi anche semplicemente mettere il codice senza dire che era C e non C++. Solo il primo paragrafo era riferito a te. Il resto era per lui.

garnak.olegovitc1
Salve vict85,
mi scuso per non avere capito chi era il destinatario del tuo messaggio, comunque il mio era un complimento nei tuoi confronti sia che tu ti riferissi a me che a qualcun'altro, e te li rifaccio molto volentieri. :smt023
Cordiali saluti

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.