Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - un piccolo aiuto
Forum - C/C++ - un piccolo aiuto

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
ermak (Normal User)
Newbie


Messaggi: 6
Iscritto: 13/01/2011

Segnala al moderatore
Postato alle 19:09
Giovedì, 13/01/2011
salve a tutti dovrei fare un elaborato in c che abbia le seguenti caratteristiche

Un ponte a corsia unica collega due villaggi: villaggio-Nord e villaggio-Sud. Gli agricoltori dei villaggi
utilizzano il ponte per il trasporto dei prodotti. Il ponte resta bloccato se un contadino diretto a nord e
uno diretto a sud vi salgono contemporaneamente. I contadini sono ostinati: non fanno mai marcia
indietro. Implementare un meccanismo che eviti lo stallo e stabilisca le regole di attraversamento.

si accettano consigli....

PM Quote
Avatar
Alex (Ex-Member)
Expert


Messaggi: 441
Iscritto: 15/08/2005

Segnala al moderatore
Postato alle 19:17
Giovedì, 13/01/2011
metti due sbarre una a nord e una a sud..
quando un contadino comincia ad andare sul ponte scatta una fotucellula che abbassa la sbarra d'allaltra parte..

trsducendolo in c, crei una variabile che tiene traccia se il ponte è occupato o no..

PM Quote
Avatar
ermak (Normal User)
Newbie


Messaggi: 6
Iscritto: 13/01/2011

Segnala al moderatore
Postato alle 19:56
Giovedì, 13/01/2011
mmm scusa potresti essere un pò + chiaro

PM Quote
Avatar
ramy1989 (Normal User)
Newbie


Messaggi: 10
Iscritto: 06/01/2011

Segnala al moderatore
Postato alle 20:03
Giovedì, 13/01/2011
Implementi una specie di semaforo:
Codice sorgente - presumibilmente C/C++

  1. bool nord=false;            //passano quelli diretti a sud
  2. nord=true;                     //adesso passano quelli diretti a nord



PM Quote
Avatar
ermak (Normal User)
Newbie


Messaggi: 6
Iscritto: 13/01/2011

Segnala al moderatore
Postato alle 20:15
Giovedì, 13/01/2011
il problema è che i semafori nn li abbiamo fatti
e posso usare solo i seguenti argomenti:
- Linguaggio C:

- tipi di dati (cap 6 --> "Linguaggio C McGrawHILL")

- cicli di selezione e di iterazione

                                   (cap 7-9 --> "Linguaggio C McGrawHILL")

- operatori (cap 8 --> "Linguaggio C McGrawHILL")

-  array e vettori (cap 10 --> "Linguaggio C McGrawHILL")

  -   funzioni (cap 11 --> "Linguaggio C McGrawHILL")

- stringhe (cap 13 --> "Linguaggio C McGrawHILL")

-  puntatori (cap 14 --> "Linguaggio C McGrawHILL")

- strutture (cap 16 --> "Linguaggio C McGrawHILL")

-  file (cap 17 --> "Linguaggio C McGrawHILL")

-  tipi derivati (cap 18 - 20 --> "Linguaggio C McGrawHILL")

-  liste e code (cap 21 --> "Linguaggio C McGrawHILL")

PM Quote
Avatar
Alex (Ex-Member)
Expert


Messaggi: 441
Iscritto: 15/08/2005

Segnala al moderatore
Postato alle 20:34
Giovedì, 13/01/2011
il semaforo è semplicemente una variabile che ti tiene conto dello stato del ponte (occupato,libero);
se hai fatto i tipi derivati puoi farti un enumerazione:
Codice sorgente - presumibilmente C/C++

  1. typedef enum {occupato, libero} stato;
  2. ...
  3. stato ponte;
  4. ponte=occupato;
  5. ponte=libero;



o se no usi una variabile int..0 vuol dire occupato, 1 vuol dire libero..

PM Quote
Avatar
ermak (Normal User)
Newbie


Messaggi: 6
Iscritto: 13/01/2011

Segnala al moderatore
Postato alle 20:48
Giovedì, 13/01/2011
mmm potresti gentilmente farmi una bozza di come dovrebbe essere...
cmq io avevo ipotizzato di fare un sistema a scelta dove andavo ad occupare o a liberare il ponte ogni qual volta serviva....

es.
MENU' PONTE.
1- occupa ponte
2- Libera ponte
3- vedi la coda
4- esci dal programma
......

PM Quote
Avatar
ermak (Normal User)
Newbie


Messaggi: 6
Iscritto: 13/01/2011

Segnala al moderatore
Postato alle 11:35
Domenica, 16/01/2011
salve in questi giorni ho pensato per implementare il progetto e alla fine sono riuscito a farlo tramite la gestione di una lista ordinata utilizzando una lista lineare per implementare una pila
comunque ecco il codice che ho scritto fino ad oggi



Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. struct agricoltore {
  4.     int inf;
  5.     struct agricoltore *pun;
  6.     };
  7. void gestione_lista(void);
  8. struct agricoltore *inserimento(struct agricoltore *);
  9. struct agricoltore *eliminazione(struct agricoltore *);
  10. void visualizzazione(struct agricoltore *);
  11.  
  12. main() {
  13.  
  14.      gestione_lista();
  15.      }
  16. void gestione_lista(void) {
  17.     struct agricoltore *punt_lista = NULL;
  18.     int scelta = -1;
  19.     char pausa;
  20.         while(scelta!=0) {
  21.     printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
  22.     printf("\t\t*********GESTIONE DEL PONTE***********\n");
  23.     printf("\n\n\n\t\t\t 1. Per inserire un agricoltore");
  24.     printf("\n\n\t\t\t 2. Per eliminare un agricoltore");
  25.     printf("\n\n\t\t\t 3. Per visualizzare la coda");
  26.     printf("\n\n\t\t\t 0. Per finire");
  27.     printf("\n\n\n\t\t\t\t Scegliere una opzione: ");
  28.     scanf("%d", &scelta);
  29.     printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
  30.         switch(scelta) {
  31.             case 1: punt_lista = inserimento(punt_lista);
  32.                 break;
  33.             case 2: punt_lista = eliminazione(punt_lista);
  34.                 break;
  35.             case 3: visualizzazione(punt_lista);
  36.                     printf("\n\nQualsiasi tasto per continuare...");
  37.                     scanf("%c%c", &pausa, &pausa);
  38.                 break;
  39.  
  40.                 }
  41.                     }
  42.                         }
  43.         /* Visualizzazione della lista */
  44. void visualizzazione(struct agricoltore *p) {
  45.     struct agricoltore *paus = p;
  46.         printf("*****LEGENDA*****\n 0 - villaggio nord \n 1 - villaggio sud\n ");
  47.         printf("\npunt_lista---> ");
  48.             while(paus!=NULL) {
  49.                     printf("%d---> ", paus->inf);
  50.                     paus = paus->pun; }
  51.             printf("NULL");
  52.             }
  53. /* Inserimento del valore passato dall'utente nella lista mantenendo l'ordinamento */
  54. struct agricoltore *inserimento(struct agricoltore *p) {
  55.     struct agricoltore *p0, *p1;
  56.     int n,posizione;
  57.         /* Creazione agricoltore */
  58.         p0 = (struct agricoltore *)malloc(sizeof(struct agricoltore));
  59.             do {    printf("\nInserisci il villaggio di appartenenza\n 0 - villaggio nord \n 1 - villaggio sud\n");
  60.                     scanf("%d", &n);
  61.                     } while(n>1);
  62.  
  63.                 p0->inf = n;
  64.  
  65.                if(p==NULL) {
  66.         /* Se la lista è vuota, l'agricoltore */
  67.                                 p = p0; /* diventa il primo e unico della lista */
  68.                                         p->pun = NULL; }
  69.                 else {
  70.                         if(p->inf > p0->inf) {
  71.                                      /* Se il valore dell'agricoltore è */
  72.                                          p0->pun = p; /* inferiore al primo l'agricoltore */
  73.                                          p = p0; /* diventa il primo della lista */
  74.                                        }
  75.                 else { /* Ricerca della posizione di inserimento */
  76.                         p1 = p; posizione = 0;
  77.                             while(p1->pun!=NULL && posizione!=1) {
  78.                                     if(p1->pun->inf < p0->inf) p1 = p1->pun;
  79.                                         /* Scorre in avanti p1 */
  80.                                         else posizione = 1; /* Interrompe lo scorrimento */
  81.                                             }
  82.     p0->pun = p1->pun; /* Connessione all'agricoltore successivo */
  83.     p1->pun = p0; /* Connessione dall'agricoltore precedente */
  84.         }
  85.             }
  86.                 return(p); /* Ritorno del puntatore all'inizio della lista */
  87.  
  88.                         }
  89.                         /* Eliminazione dell'agricoltore richiesto dalla lista ordinata */
  90. struct agricoltore *eliminazione(struct agricoltore *p) {
  91.     struct agricoltore *paus = p;
  92.     struct agricoltore *p1 = p, *p2;
  93.     struct agricoltore e;
  94.     int posizione = 0;
  95.     char pausa;
  96.              printf("*****LEGENDA*****\n 0 - villaggio nord \n 1 - villaggio sud\n ");
  97.         printf("\npunt_lista---> ");
  98.             while(paus!=NULL) {
  99.                     printf("%d---> ", paus->inf);
  100.                     paus = paus->pun; }
  101.             printf("NULL");
  102.  
  103.         printf("\n\n\nQuale agricoltore vuoi fare passare?\n ");
  104.         scanf("%d", &e.inf);
  105.             if(p1!=NULL) {
  106.                             /* Se la lista è vuota fine */
  107.                             if(p1->inf == e.inf) {
  108.                                 /* Se è il primo da eliminare */
  109.                                 p2 = p1; p = p->pun;
  110.                                 /* si modifica il puntatore alla testa */
  111.                                 free(p2);
  112.                                     return(p);
  113.                                         }
  114.             else { /* Ricerca dell'agricoltore da eliminare */
  115.                     while(p1->pun!=NULL && posizione!=1) {
  116.                                     if(p1->pun->inf!=e.inf) p1 = p1->pun; /* Scorre in avanti p1 */
  117.                                             else { posizione = 1; /* Interrompe lo scorrimento */
  118.                                                     p2 = p1->pun; p1->pun = p1->pun->pun; /* Eliminazione agricoltore */
  119.                                                             free(p2); /* Libera la memoria */
  120.                                                                     return( p );
  121.                     }
  122.                                 }
  123.                                             }
  124.                                                         }
  125. if(!posizione) {
  126.         printf("\nElemento non incontrato nella lista ");
  127.         scanf("%c%c", &pausa, &pausa);
  128.             }
  129.             return(p);
  130.                 }




adesso vorrei creare una 4 e 5  funzione tipo elimin_nord e elimin_sud, le quali mi scorrono la lista ed eliminano tutti gli elementi uguali
es. tutti gli gli 0 o tutti gli 1.:)
attendo vostri consigli...:hail::hail:


Ultima modifica effettuata da ermak il 16/01/2011 alle 15:45
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 14:56
Domenica, 16/01/2011
non c'entra assolutamente con la domanda, ma "LEGGENDA" non ha lo stesso significato di "LEGENDA"....penso che nelle printf tu volessi riferirti al secondo termine, no? :_doubt:

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo