Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Piccolo problema su questo programma in c++

    Ciao a tutti.
    Stavo facendo un programma che mi è stato assegnato a scuola, in pratica dato un vettore (di dim. max 100) devo caricarci dentro una certa quantità di numeri (prefissato dall' utente) dopodichè deve creare in automatico altri 2 vettori, uno in cui devono andare i numeri >= del valore di una variabile data all' inizio (nel mio caso è k) e l' altro con i valori minori della variabile (k).
    Ecco cosa ho fatto:
    codice:
    #include <cstdlib>
    #include <iostream>
    #include <math.h>
    #define max 100
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int vet[max],i,vetm[max],m=0,vetmin[max],min=0,n,k;
        
        cout<<"Inserisci il valore da assegnare a K"<<endl;
        cin>>k;
        
        do{
        cout<<"Inserisci la dimensione del vettore."<<endl;
        cin>>n;
        }
        while (n<1 || n>100);
        
        for (i=0;i<n;i++)
        {
        cout<<"Inserisci il numero da inserire nel vettore"<<endl;
        cin>>vet[i];
        }
        
        for (i=0;i<n;i++)
        {
        if (vet[i]>=k)
        {
        vet[i]=vetm[m];
        m++;
        }
        else
        {
        vet[i]=vetmin[min];
        min++;
        }
        }
        
        cout<<"I valori maggiori uguali a K sono "<<vetm[m]<<endl;
        cout<<"Mentre quelli minori sono "<<vetmin[min]<<endl;
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    A compilare si compila ma a quanto pare vengono risultati sballati.
    Dove ho sbagliato?
    Grazie per le risposte.

  2. #2
    non capisco perchè assegni a vet i valori di vetm e vetmin
    scusa non dovresti fare l'esatto contrario?

  3. #3
    xD si hai ragione il bello che prima avevo fatto il contrario e mi sembrava di aver sbagliato e li ho messi cosi ok ora modifico e riprovo vi faccio sapere.

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Piccolo problema su questo programma in c++

    Originariamente inviato da AssAss1n
    codice:
     
        
        cout<<"I valori maggiori uguali a K sono "<<vetm[m]<<endl;
        cout<<"Mentre quelli minori sono "<<vetmin[min]<<endl;
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    A compilare si compila ma a quanto pare vengono risultati sballati.
    Dove ho sbagliato?
    Premessa:
    1. È inutile usare il tag CODE se il codice non è indentato, non si capisce nulla
    2. Mai, MAI usare system.

    Detto questo, tu vuoi mostrare tutti gli elementi di vetm e vetmin (che nomi orribili), giusto? Nel codice che hai scritto però stai mostrando solo un elemento. Ti servono due cicli: uno per iterare gli elementi di vetm e uno per gli elementi di vetmin (visto che possono avere lunghezze differenti).
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    A me il codice sembra apposto.
    Potresti postare un esempio di "risultato sballato" ?

    P.S.: Con quei cout stampi solo l' m esimo numero del vettore, devi fare un ciclo.

  6. #6
    Originariamente inviato da Celebron
    non capisco perchè assegni a vet i valori di vetm e vetmin
    scusa non dovresti fare l'esatto contrario?
    LOL era talmente una cosa scontata che non me n'ero accorto

  7. #7
    Originariamente inviato da Celebron
    non capisco perchè assegni a vet i valori di vetm e vetmin
    scusa non dovresti fare l'esatto contrario?
    Ci ho provato ma non funge.
    codice:
    #include <cstdlib>
    #include <iostream>
    #include <math.h>
    #define max 100
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int vet[max],i,a[max],m=0,b[max],min=0,n,k;
        
        cout<<"Inserisci il valore da assegnare a K"<<endl;
        cin>>k;
        
        do{
        cout<<"Inserisci la dimensione del vettore."<<endl;
        cin>>n;
        }
        while (n<1 || n>100);
        
        for (i=0;i<n;i++)
        {
        cout<<"Inserisci il numero da inserire nel vettore"<<endl;
        cin>>vet[i];
        }
        
        for (i=0;i<n;i++)
        {
        if (vet[i]>=k)
        {
        a[m]=vet[i];
        m++;
        }
        else
        {
        b[min]=vet[i];
        min++;
        }
        }
        
        cout<<"I valori maggiori uguali a K sono "<<a[m]<<endl;
        cout<<"Mentre quelli minori sono "<<b[min]<<endl;
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Ho modificato il nome dei due vettori da creare "a" e "b" (piu semplice non potevo xD).
    Cioè io ho pensato nel secondo for di controllare se l' elemento dell' indice di vet fosse >= di k se cosi fosse assegno quel determinato indice all' indice di a e dopo incrementarlo, e viceversa (else).
    Il problema sta che nei risultati finali viene una cosa del tipo :
    I valori maggiori uguali a K sono 878784459
    Mentre quelli minori sono 87875454

  8. #8
    Quindi dovrei fare un ciclo dopo l' ultimo for che mi visualizzi gli elementi dei vettori, mmm provo e vi faccio sapere.

  9. #9
    Originariamente inviato da AssAss1n
    Quindi dovrei fare un ciclo dopo l' ultimo for che mi visualizzi gli elementi dei vettori, mmm provo e vi faccio sapere.
    Beh certo. Se scrivi a[min] visualizzerai sicuramente un numero casuale, perchè dopo l'ultimo inserimento lo incrementi, quindi visualizzi il numero che si trova dopo l'ultimo numero minore (un valore che si trovava in quei 2 byte di memoria, visto che non hai inizializzato il vettore a 0)

  10. #10
    codice:
    #include <cstdlib>
    #include <iostream>
    #include <math.h>
    #define max 100
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int vet[max],i,a[max],m=0,b[max],min=0,n,k,j,y;
        
        cout<<"Inserisci il valore da assegnare a K"<<endl;
        cin>>k;
        
        do{
        cout<<"Inserisci la dimensione del vettore."<<endl;
        cin>>n;
        }
        while (n<1 || n>100);
        
        for (i=0;i<n;i++)
        {
        cout<<"Inserisci il numero da inserire nel vettore"<<endl;
        cin>>vet[i];
        }
        
        for (i=0;i<n;i++)
        {
        if (vet[i]>=k)
        {
        a[m]=vet[i];
        m++;
        }
        else
        {
        b[min]=vet[i];
        min++;
        }
        }
        
        for (y=0;y<m;y++)
        {
        cout<<"I valori maggiori uguali a K sono "<<a[m]<<endl;
        }
        
        for (y=0;y<min;y++)
        {
        cout<<"Mentre quelli minori sono "<<b[min]<<endl;
        }
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Ho aggiunto altri 2 clicli per visualizzare gli ultimi 2 vettori in pratica nel terzo for viene fatta l' elaborazione del vettore principale con i vari passaggi e alla fine di questo cilco for, m e min avranno assunto il particolare valore che sarebbe proprio la lunghezza dei due vettori, e cosi ho fatto gli ultimi for per la visualizzazzione.
    C'è ancora qualcosa che non va cioè le stringhe (quelle dei due vettori) sono giustamente il valore di k però i risultati sono sempre sballati...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.