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

    [C] incremento di vettori ad ogni chiamata di funzione

    Questo è "programma per la gestione dei posti a sedere di un aereo"...il mio problema è l'incremento dei due vettori delle rispettive funzioni (firstClass, economicClass), cioè ad ogni chiamata il vettore deve incrementare e memorizzare la posizione di cui è stato incrementato. Gli ho inizializzati il primo a 0 e il secondo a 6, so che ad ogni chiamata vengono inizializzati da quel punto, quindi vorrei capire con il vostro aiuto come risolvere questo intreccio...

    codice:
    #include <stdio.h>
    #define SIZE 10
    #define POSTIprima 5
    #define POSTIsecon 5
    void firstClass(int prima[], int size);
    void economicClass(int seconda[], int size);
    
    
    int main(){
        int scelta;
        
        int aereo[SIZE]; /* vettore posti aereoplano*/
        int azz; /*variabile per azzeramento vettore aereo*/
        int postiPri, postiSec; /*contatori posti a sedere*/
        
        
        /*azzera i posti a sedere dell'aereo*/
        for(azz = 0; azz < SIZE; azz++){
           aereo[azz] = 0;
        }
        
        
        printf("Premere [ 1 ] per la Prima Classe.\n");
        printf("Premere [ 2 ] per la Seconda Classe.\n");
        
        
        
           while(scelta > 0 || scelta <= 2){
              printf("\nPrego, selezionare una delle due preferenze = ");
              scanf("%d", &scelta);
              
              if(scelta == 1){
                 firstClass(aereo, SIZE);
                 aereo[azz++];
              }   else if
                     (scelta == 2){
                      economicClass(aereo, SIZE);
                      aereo[azz++];
                 }  else if (scelta != 1 || scelta != 2){
                          printf("\nLa preghiamo di selezionare una delle due preferenze = \n");
           
                       }
                       
                  }
           
           system("pause");
           return 0;
    
    }
    
    firstClass(int prima[], int size){
       
       prima[size++];
       
       printf("\nIl suo posto e' al numero %d della Prima Classe\n\n", size);
       
                   
    }
    economicClass(int seconda[], int size2){
       
       seconda[size2++];
       
       printf("\nil suo posto e' al numero %d della Seconda Classe\n\n", size2);
                      
    }

  2. #2
    Ciao, potresti essere un pò più chiaro? Non si capisce molto e il codice non aiuta.
    Cosa vuoi incrementare?

    Con queste:

    codice:
    aereo[azz++];
    oppure

    codice:
    prima[size++];
    cosa vorresti fare? Vorresti aumentare la dimensione dell'array?

    scelta non è inizializzato, quindi nel while, accedi ad un valore che sta in memoria, potrebbe essere qualsiasi cosa.

    scelta > 0 || scelta <= 2 non terminerà mai, un int è per forza tra (0, max(int)] u [min(int), 2].
    La condizione prevede un "and" se vuoi terminare il ciclo.

    codice:
    while(scelta > 0 && scelta <= 2) {
     //...
    }
    Sebbene il flusso non ti porti in

    codice:
    else if(scelta =! 1 || scelta =! 2)
    quando immetti in input 1 o 2, questa è logicamente sbagliata. Tutti gli interi sono diversi da 1 o 2. Ad esempio 1 non è diverso da 1, ma da 2 si. Stesso per 2. C'è un or, e ci andrebbe in and
    Se fai terminare il ciclo scrivendo l'and nel while, questa parte però non ha senso però

    Sempre parlando del while, l'utente deve poter inserire la propria scelta almeno una volta, quindi usa il do...while

    codice:
    do {
    //....
    } while(scelta > 0 && scelta <= 2)
    togliando l'else if che ti ho detto prima.
    Se invece non vuoi che termini il ciclo, togli la condizione (non avrebbe senso), così il programma continuerà fino a quando vuoi tu:

    codice:
    while(1) {
    //...
    else if(scelta != 1 && scelta != 2)
      printf("sbagliato");
    }
    Spero ti siano utili queste dritte.


  3. #3
    allora il programma deve terminare all'esaurimento dei posti che ne sarebbero 10, oltre a tutti i problemi della parte del main che mi hai fatto notare, a me servirebbe incrementare i vettori delle due funzioni ad ogni chiamata, cioè ad ogni posto assegnato...

    nel frattempo di una tua risposta smanetto sulle tue dritte....

  4. #4
    Vediamo se ho capito: il tuo aereo ha 10 posti. Probabilmente una parte sono per la prima e una parte sono per la seconda classe, date le costanti POSTIprima e POSTIsecon.
    Tu vuoi che ognuno faccia il biglietto, scegliendo la classe e nel vettore vorresti mettere un uno, indicando che quel posto è occupato. Giusto?

  5. #5
    anche tu hai studiato con D&D ?????? hai azzeccato perfettamente

  6. #6
    no, mi sa che sono sensitivo

    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>

    #define SIZE 10
    #define POSTIprima 5
    #define POSTIsecon 5

    int main(){
        
    int scelta;
        
        
    int aereo[SIZE]; /* vettore posti aereoplano*/    
        
    int postiPri 0postiSec 0/*contatori posti a sedere*/
          
        /*azzera i posti a sedere dell'aereo*/
        
    for(int i 0SIZEi++){
           
    aereo[i] = 0;
        }
            
        
    printf("Premere [ 1 ] per la Prima Classe.\n");
        
    printf("Premere [ 2 ] per la Seconda Classe.\n");
        
    printf("Premere [ 3 ] per lo stato dell'aereo.\n");
        
        do {
            
    printf("\nPrego, selezionare una delle due preferenze = ");
            
    scanf("%d", &scelta);
              
            if(
    scelta == 1)
            {    
                if(
    postiPri 5)
                {
                    
    aereo[postiPri postiSec] = 1;
                    
    printf("Grazie, viaggiatore #%d\n"postiPri+postiSec);                
                    
    postiPri++;                
                }
                else 
                    
    printf("Spiacente, posti in prima terminati\n");                
            }   
            else if (
    scelta == 2)
            {    
                if(
    postiSec 5)
                {
                    
    aereo[postiPri postiSec] = 1;
                    
    printf("Grazie, viaggiatore #%d\n"postiPri+postiSec);
                    
    postiSec++;
                }
                else 
                    
    printf("Spiacente, posti in seconda terminati\n");        
            }  
            else if(
    scelta == 3)
            {
                for(
    int i 0SIZEi++)
                    
    printf("%d | "aereo[i]);
                
    printf("\n");
            }
        } while(
    scelta && scelta <= 3);
           
        
    system("pause");
        return 
    0;

    Ogni volta che uno prenota un posto in prima classe, incremento la variabile postiPri, così tengo traccia di quanti viaggiatori ho (stesso per la seconda classe).
    Se ho 2 viaggiatori in prima e 4 in seconda, il prossimo biglietto libero (partendo da 0) sarà 2+4 = 6, no (i viaggiatori vanno da 0 a 5, 6 è libero)? Per questo faccio

    aereo[postiPri + postiSec] = 1;

    Prova a guardarlo, ti ci ritrovi? credo sia, bene o male (qualcosa ovviamente cambia) che avevi iniziato a fare tu.

    In questo esempio, l'uso dell'array non è necessario. Però prova a complicarlo un pò. Riesci ad implementare un sistema di annullamento dell'ordine? Un viaggiatore arriva, ti dice il numero del biglietto e tu annulli l'ordinazione (poni a 0 il relativo elem dell'array).
    Oppure puoi considerare le posizione 0,1,2,3,4 dell'array riservate alla prima classe e le posizione 5,6,7,8,9 riservate alla seconda classe...

  7. #7
    tu sei un PAZZO....mi piace davvero molto....per quanto riguarda la parte dell'annullamento non mi sento di farla a quest'ora preferirei iniziare un'altro esercizio....comunque sembrerebbe molto chiaro.....ah e grazie per avermi smontato tutto il programma!!!! ........

    adesso ho provato a mandarlo in esecuzione quello che non mi piace è che i passaggeri "sulla carta d'imbarco" (cioè sul output dopo la scelta) non sanno se vanno in prima o in seconda e non sanno a che posto sedersi, l'esercizio mi impone esplicitamente che la prima classe va dai posti 1 a 5 e la seconda da 6 a 10....

    provo a ragionarci un po....ma se hai già un ideuzza in mente....è ben accetta!!!!

  8. #8
    Si si, come ti dicevo io:

    Oppure puoi considerare le posizione 0,1,2,3,4 dell'array riservate alla prima classe e le posizione 5,6,7,8,9 riservate alla seconda classe...
    ovviamente puoi farcela tranquillamente da solo
    Se hai problemi, posta pure.

  9. #9
    gentilissimo....e complimenti per il portale....comunque ti do subito notizie della mia fine...quindi se tardo è perchè il mio pc si sta schiantando giù dal 4 piano

  10. #10
    grazie mille!

    Ti aspetto. Nel frattempo, riallacciandomi al tuo codice iniziale, se vuoi incrementare la pos di un array (magari passandolo ad un altra funzione) devi fare qualcosa del genere:

    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>

    void incr(int array[], int sizeint pos)
    {
        if(
    pos || pos >= size) return;
        
        
    printf("Prima: array[%d] = %d\n"pos, array[pos]);
        array[
    pos]++;
        
    printf("Dopo: array[%d] = %d\n\n"pos, array[pos]);
    }

    int main(){

        
    int array[] = {0123};
        
    int size 4;
        
        
    incr(array, size0);
        
    incr(array, size0);
        
    incr(array, size3);
        
        
    system("pause");
        return 
    0;


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 © 2024 vBulletin Solutions, Inc. All rights reserved.