Discussione Ufficiale Programmiamo con Inforge | Esercitazione 04 in C | Livello intermedio

Una Discussione Ufficiale punta a raccogliere tutte le informazioni su un argomento o un fatto di attualità, con costanti aggiornamenti da parte del creatore e dei partecipanti.

Not an engineer

Moderatore
31 Ottobre 2011
2,715
100
1,204
1,091
Ultima modifica:
main.png


Programmiamo con Inforge | Presentazione

Ad oggi, sul web, si trovano moltissime guide sui vari linguaggi di programmazione e sulle loro molteplici applicazioni. Tuttavia, chi si approccia a queste risorse, non sempre riesce a mettere in pratica ciò che ha appreso. Al fine di limitare queste mancanze, nasce Programmiamo con Inforge.

In questa rubrica potrai scrivere codice per la risoluzione di alcuni problemi legati alla programmazione, mettendo in pratica quanto stai apprendendo dalla teoria oppure mostrando le tue abilità e competenze nel campo dell’informatica.


Partiamo dalle basi del C

In questa guida puoi trovare i testi per studiare e approfondire il C: I migliori libri per imparare e approfondire il C
In questa discussione puoi trovare le risposte alle domande più frequenti su come scrivere codice in C: Frequently asked questions: da dove si parte?


Esercitazione 04 in C | Livello intermedio | [Morra cinese]

La concorrenza è una caratteristica dei sistemi di elaborazione nei quali può verificarsi che un insieme di processi o sotto-processi sia in esecuzione nello stesso istante (un'importante classe di sistemi informatici nei quali gli aspetti di concorrenza sono fondamentali è quella dei sistemi operativi)
L'esercitazione si compone di 1 esercizio nel quale ti sarà richiesto di creare il gioco "Morra cinese".



Soluzioni

Per rendere l'esercitazione più interessante, non verrà pubblicata alcuna soluzione! Spetterà a te scrivere la tua versione del codice e pubblicarla in questo thread così che possa essere valutata dai moderatori e dalla community; il modo migliore per imparare!

Conclusioni

Pubblica la soluzione ottimale per risolvere gli esercizi e ricorda che puoi confrontarti con il resto della community in questo thread, chiedere aiuto o aiutare gli altri ;)
 
Ultima modifica da un moderatore:
non so che scrivere, voglio solo vedere l'esercizio
Messaggio unito automaticamente:

raga io l'ho fatto ma non so come fare questa parte:
Con riferimento ad un processo padre (P) ed ha due processi figli (F1)(F2), ad ogni round, i processi figli dovranno comunicare la propria arma al processo padre (P), il quale decreterà il vincitore.
il mio codice è questo:
C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[]) {

    register int win1player=0;
    register int win2player=0;
    for(int i=0;i<=3;i++) {
        //0=sasso
        //1=carta
        //2=forbice
        int arma=0;
        printf("Buongiorno player benvenuto al %d round\nScegli un arma tra le seguenti disponibili:\nSasso-[0]\nCarta-[1]\nForbice-[2]\ninput: ",i);
        scanf("%d",&arma);
        srand(time(0));
        int arma2player=rand()%3;
        if (arma2player==0 && arma==2) {
            printf("Ha vinto player 2\n");
            win2player++;
            printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
        } else if (arma2player==2 && arma==0) {
            printf("ha vinto player 1\n");
            win1player++;
            printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
        } else if (arma2player==2 && arma==1) {
            printf("Ha vinto player 2\n");
            win2player++;
            printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
        } else if (arma2player==1 && arma==2) {
            printf("Ha vinto player 1\n");
            win1player++;
            printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
        } else if (arma2player==1 && arma==0) {
            printf("Ha vinto player 2\n");
            win2player++;
            printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
        } else if (arma2player==0 && arma==1) {
            printf("Ha vinto player 1\n");
            win1player++;
            printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
        } else if(arma==arma2player) {
            printf("Pareggio!\n");
            win1player++;
            win2player++;
            printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
        } else {
            printf("Qualcosa non ha funzionato\n");
        }

    }
    if (win1player>win2player) {
        printf("La partita è stata vinta dal player 1\n");
        printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
    } else if (win1player<win2player) {
        printf("La partita è stata vinta dal player 2\n");
        printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
    } else if (win1player==win2player) {
        printf("La partita è terminata in pareggio!\n");
        printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
    } else {
        printf("Qualcosa non ha funzionato");
    }


    return 0;
}
 
non so che scrivere, voglio solo vedere l'esercizio
Messaggio unito automaticamente:

raga io l'ho fatto ma non so come fare questa parte:
Con riferimento ad un processo padre (P) ed ha due processi figli (F1)(F2), ad ogni round, i processi figli dovranno comunicare la propria arma al processo padre (P), il quale decreterà il vincitore.
il mio codice è questo:
C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[]) {

    register int win1player=0;
    register int win2player=0;
    for(int i=0;i<=3;i++) {
        //0=sasso
        //1=carta
        //2=forbice
        int arma=0;
        printf("Buongiorno player benvenuto al %d round\nScegli un arma tra le seguenti disponibili:\nSasso-[0]\nCarta-[1]\nForbice-[2]\ninput: ",i);
        scanf("%d",&arma);
        srand(time(0));
        int arma2player=rand()%3;
        if (arma2player==0 && arma==2) {
            printf("Ha vinto player 2\n");
            win2player++;
            printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
        } else if (arma2player==2 && arma==0) {
            printf("ha vinto player 1\n");
            win1player++;
            printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
        } else if (arma2player==2 && arma==1) {
            printf("Ha vinto player 2\n");
            win2player++;
            printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
        } else if (arma2player==1 && arma==2) {
            printf("Ha vinto player 1\n");
            win1player++;
            printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
        } else if (arma2player==1 && arma==0) {
            printf("Ha vinto player 2\n");
            win2player++;
            printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
        } else if (arma2player==0 && arma==1) {
            printf("Ha vinto player 1\n");
            win1player++;
            printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
        } else if(arma==arma2player) {
            printf("Pareggio!\n");
            win1player++;
            win2player++;
            printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
        } else {
            printf("Qualcosa non ha funzionato\n");
        }

    }
    if (win1player>win2player) {
        printf("La partita è stata vinta dal player 1\n");
        printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
    } else if (win1player<win2player) {
        printf("La partita è stata vinta dal player 2\n");
        printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
    } else if (win1player==win2player) {
        printf("La partita è terminata in pareggio!\n");
        printf("Punteggio totale:\nPlayer 1: %d\nPlayer 2: %d\n",win1player,win2player);
    } else {
        printf("Qualcosa non ha funzionato");
    }


    return 0;
}

Ciao, dovresti apportare qualche modifica al codice per farlo funzionare secondo le richieste.
Può tornarti utile dare uno sguardo al vecchio esercizio 3, secondo me: guarda ad esempio la soluzione di carlo9876.

In sostanza devi fare uso di fork() per creare un processo figlio.

Ah, nota un'altra cosa: la parola chiave "register" che utilizzi puoi anche ometterla; sarà il compilatore a scegliere se usare un registro o no (anche se la metti in realtà è a "sua" discrezione).
 
Anche io partecipo.
Messaggio unito automaticamente:

Perché non mettete la possibilità di farlo anche in altri linguaggi così più persone partecipano.
 
Alcuni esercizi sono dedicati alle basi del linguaggio; più avanti arriveranno le Challenges, dove non ci saranno limiti dovuti al linguaggio.

Comunque alcuni hanno pubblicato anche soluzioni in C++, quindi se vuoi usare altro come C#... fai pure.
 
Visualizza allegato 51802

Programmiamo con Inforge | Presentazione

Ad oggi, sul web, si trovano moltissime guide sui vari linguaggi di programmazione e sulle loro molteplici applicazioni. Tuttavia, chi si approccia a queste risorse, non sempre riesce a mettere in pratica ciò che ha appreso. Al fine di limitare queste mancanze, nasce Programmiamo con Inforge.

In questa rubrica potrai scrivere codice per la risoluzione di alcuni problemi legati alla programmazione, mettendo in pratica quanto stai apprendendo dalla teoria oppure mostrando le tue abilità e competenze nel campo dell’informatica.


Partiamo dalle basi del C

In questa guida puoi trovare i testi per studiare e approfondire il C: I migliori libri per imparare e approfondire il C
In questa discussione puoi trovare le risposte alle domande più frequenti su come scrivere codice in C: Frequently asked questions: da dove si parte?


Esercitazione 04 in C | Livello intermedio | [Morra cinese]

La concorrenza è una caratteristica dei sistemi di elaborazione nei quali può verificarsi che un insieme di processi o sotto-processi sia in esecuzione nello stesso istante (un'importante classe di sistemi informatici nei quali gli aspetti di concorrenza sono fondamentali è quella dei sistemi operativi)
L'esercitazione si compone di 1 esercizio nel quale ti sarà richiesto di creare il gioco "Morra cinese".


*** Testo nascosto: non può essere aggiunto alla citazione ***
*** Testo nascosto: non può essere aggiunto alla citazione ***

*** Testo nascosto: non può essere aggiunto alla citazione ***


Soluzioni

Per rendere l'esercitazione più interessante, non verrà pubblicata alcuna soluzione! Spetterà a te scrivere la tua versione del codice e pubblicarla in questo thread così che possa essere valutata dai moderatori e dalla community; il modo migliore per imparare!

Conclusioni

Pubblica la soluzione ottimale per risolvere gli esercizi e ricorda che puoi confrontarti con il resto della community in questo thread, chiedere aiuto o aiutare gli altri ;)
hi