Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [c++] Spostamento di un valore all'interno di un array

    Salve avrei una rogna con questo programma, in pratica lo scopo del programma è quello di infilare un 1 a caso in una delle celle dell'array e fare in modo che l'utente debba decidere se spostarlo di una cella a destra o a sinistra senza sapere dove sia precisamente, il programma deve dargli un messaggio d'errore se si tenta di spostare l'1 fuori dall'array.
    Il programma va in loop infinito indipendentemente dalla scelta dando in continuazione l'output d'errore

    codice:
    //Spostamento valore in array, il programma randomizzerà la posizione del numero 1 all'interno di un array di grandezza 8 
    //e permetterà di spostarlo di una cella verso destra o verso sinistra tranne quando questo si troverà su uno dei due limiti
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    int main()
    {
        int riga[]= {0,0,0,0,0,0,0,0};//vettore "vuoto" di 8 elementi
        int i,p,a; //i:indice, p:variabile per determinare la posizione casuale dell'1, a:variabile d'appoggio
        char dir;//variabile che prende la scelta dell'utente
        srand(time(0));
        p=rand()%8;
        riga[p]=1;
        cout<<"Verso quale direzione vuoi spostare il valore? \"d\" per destra \"s\" per sinistra \n";
        cin>>dir;
        for (i=1;i<=8;i++){//ciclo per controllare le 8 celle
                           while(riga[i]=1){
                                            if(dir=='s' && i !=1){
                                                                 a=riga[i];
                                                                 riga[i]=0;
                                                                 riga[i-1]=a;}
                                            else{cout<<"il valore si trova sul limite inferiore e non e' possibile spostarlo verso sinistra \n!";}
                                            if(dir=='d' && i !=8){
                                                                 a=riga[i];
                                                                 riga[i]=0;
                                                                 riga[i+1]=a;}
                                            else{cout<<"il valore si trova sul limite superiore e non e' possibile spostarlo verso sinistra \n!";}}}
                                                     
        
        system ("pause");
        }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319

    Moderazione

    Quando si posta il codice si usano i tag CODE, non i tag QUOTE (che servono a fare citazioni di altri post). Ho corretto io.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    riga[8] non esiste
    ma se tu lasci il for in quel modo va a controllarla
    la condizione dovrebbe essere i<8 non i<=8

    edit: anche il while è sbagliato
    while (riga[i ]=1) non è un confronto, è un assegnazione. Che per di più varrà sempre come true

    edit2: anche gli else sono sbagliati, o almeno lo sono i messaggi di errore al loro interno
    infatti (e prendo come esempio il primo ma al secondo si applica lo stesso ragionamento) ti dovrebbe dire che "il valore si trova sul limite inferiore blabla" anche se non si trova li ma la variabile dir è diversa da s
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

  4. #4
    Originariamente inviato da Celebron
    edit2: anche gli else sono sbagliati, o almeno lo sono i messaggi di errore al loro interno
    infatti (e prendo come esempio il primo ma al secondo si applica lo stesso ragionamento) ti dovrebbe dire che "il valore si trova sul limite inferiore blabla" anche se non si trova li ma la variabile dir è diversa da s
    Si si, è proprio li che loopa
    provo a dare uno sguardo agli else

  5. #5
    [Parzialmente OT]Fare questo programma con un singolo int e gli operatori di shift binario sarebbe più semplice.[/Parzialmente OT]
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    loopa negli else per colpa del while, devi correggere il modo in cui hai implementato il ciclo

    while( qualcosa = 1) è equivalente ad un while(true)
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

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.