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++ - Qualcuno mi può aiutare a svolgere questa verifica in c++
Forum - C/C++ - Qualcuno mi può aiutare a svolgere questa verifica in c++

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


Messaggi: 3
Iscritto: 16/04/2020

Segnala al moderatore
Postato alle 16:48
Giovedì, 16/04/2020
Verifica di Informatica
Scrivere nel linguaggio C++ il codice che implementi un software atto a realizzare il gioco di un labirinto. Il gioco sarà tale che due giocatori potranno sfidarsi e scambiarsi i ruoli di volta in volta. Pertanto, un giocatore potrà disegnare un labirinto mentre l'altro giocatore dovrà risolvere il labirinto.
Requisiti:
1. Il labirinto sarà costituito da una matrice 'm x n' di caratteri '#' che delimiteranno le aree che non sarà possibile percorrere. 2. Il percorso sarà fatto di caratteri spazio vuoto ' '. 3. Indicare il punto di partenza del labirinto con la lettera S. 4. Indicare il punto di arrivo con la lettera A. 5. Indicare con un asterisco * il percorso fatto per risolvere il labirinto. 6. Indicare con la lettera @ quando si sbaglia e bisogna tornare indietro. 7. Indicare alla fine il numero di errori commessi, ossia quante lettere @ sono presenti.
Inoltre, dalla premessa fatta si evince che il gioco sarà costituito di due componenti logiche simili, ma distinte:
1. Nella prima componente sarà implementato un codice che servirà per disegnare il labirinto, usando le 4 frecce per indicare la direzione nel quale tracciare il percorso. 2. Nella seconda componente sarà implementato il codice che servirà per risolvere il labirinto. Il giocatore percorra' il labirinto usando le 4 frecce per indicare la direzione. Il gioco funzionerà sul prompt dei comandi, e sarà implementato usando solo le funzionalità sino ad ora viste.  
Di seguito, sono descritte alcune funzionalità specifiche che saranno utili al fine di implementare un software funzionante.
1. La cattura del segnale da tastiera delle quattro frecce. Le quattro frecce potrebbero essere individuate da 4 lettere, che possiamo usare per poter decidere la direzione in cui muoverci. Es: si potrebbero usare le lettere:  o A (65) per indicare SINISTRA o D (68) per indicare DESTRA o W (87) per indicare SU o S (83) per indicare GIU Allo stesso modo è possibile catturare le 4 frecce, ma in questo caso occorrerà un ulteriore accorgimento. Le frecce come le lettere hanno dei corrispondenti valori numerici:  o 75 per indicare SINISTRA o 77 per indicare DESTRA o 72 per indicare SU o 80 per indicare GIU
2. Per evitare che l'utente debba premere invio tutte le volte che si clicca sulla freccia o sul carattere corrispondente, occorrerà usare il comando _getch(), per poter leggere il carattere corrente. Es: char input_utente =  _getch();

3. Usare il commando system("cls"); per pulire il promp dei comandi dalle digitazioni precedenti. Senza tale comando, il software funzionerà comunque, ma si vedrà un testo che scorre, mentre con il comando "system(cls);" si darà l'idea di vedere il labirinto come una immagine statica.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:20
Giovedì, 16/04/2020
E la verifica di informatica te la dobbiamo fare noi?

Thread da chiudere di filata..


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 22:31
Giovedì, 16/04/2020
Testo quotato

Postato originariamente da nessuno:

E la verifica di informatica te la dobbiamo fare noi?

Thread da chiudere di filata..  



Mi sembra giusto... però così ci togli il divertimento... facciamo così...
Scarsoinformatico ... butta giù qualche linea di codice, un idea, i tuoi dubbi e le tue certezze.
Qui sicuramente trovi qualche anima pia che ti aiuta, ovvio se tu (Scarsoinformatico) non ti sforzi e non dai contributi, non avrai niente in cambio
G.


Ibis redibis non morieris in bello
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 0:32
Venerdì, 17/04/2020
Se ti hanno dato un esercizio così, significa che di programmazione ne devi già sapere abbastanza da scrivere un tuo programma.
Se poi non riesci a fare qualcosa, o qualcosa non va come ti eri prefissato, l'aiuto non mancherà.
Se invece non sai scrivere nulla, la verifica non la devi passare, e ti devi mettere a studiare....


in programmazione tutto è permesso
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 700
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 9:10
Venerdì, 17/04/2020
Il modo in cui viene spiegata la dinamica del "gioco" è penoso. Quell'uso contorto (e non sempre esplicito come dovrebbe) della lingua italiana sembra essere parecchio diffuso tra chi prepara questi testi. Mi sa che è il frutto avvelenato dell'iperspecializzazione che affligge un po' tutti i campi -- gente preparatissima nel suo ramo, ma tarpata negli altri, incluso quello della comunicazione verbale.


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
Scarsoinformatico (Normal User)
Newbie


Messaggi: 3
Iscritto: 16/04/2020

Segnala al moderatore
Postato alle 19:35
Sabato, 18/04/2020
Testo quotato

Postato originariamente da Goblin:
Testo quotato

Postato originariamente da nessuno:

E la verifica di informatica te la dobbiamo fare noi?

Thread da chiudere di filata..  



Mi sembra giusto... però così ci togli il divertimento... facciamo così...
Scarsoinformatico ... butta giù qualche linea di codice, un idea, i tuoi dubbi e le tue certezze.
Qui sicuramente trovi qualche anima pia che ti aiuta, ovvio se tu (Scarsoinformatico) non ti sforzi e non dai contributi, non avrai niente in cambio
G.



Buongiorno ragazzi,
non sono uno scansafatiche e vi assicuro che, nonostante gli sforzi, non riesco a fare molto. Sto frequentando la 3^ e da ottobre scorso ho scoperto l'informatica. Non punto il dito contro nessuno, se ho problemi con la materia, il primo ad esserne responsabile sono io ma la nostra classe, fin da subito, si è divisa in due gruppi: uno gruppo di "bravi" che corre e un gruppo di "scarsi" che arranca. Il docente pensa a rispettare il programma e il mio gruppo è sempre più col fiatone.
Posto qualche pezzo di codice oltre al quale non so andare. Se qualcuno volesse aggiungerci qualcosa ne sarei felice.
Grazie

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
    const int righe=20;
    const int cols=20;
    char matrice[righe][cols];
    
    for(int i=0; i<righe; i++)
    {
        for(size_t j=0; j<cols; j++)
        {
            matrice[j] = '#';
            if(j==1)
                matrice[j]='#';
        }    
    }
    for(int i=0; i<righe; i++)
    {
        for(size_t j=0; j<cols; j++)
        {
            cout<<matrice[j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}
  

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 21:49
Sabato, 18/04/2020
Ho dato uno sguardo a quanto hai postato, è in C, io gioco un po' con C++ e senza entrare nel merito vedo un errore, se fosse in C++ la dichiarazione della matrice bidimensionale :

char matrice[righe][cols];

in C++ impone che poi sia usata con ambedue i parametri ecco il codice corretto:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <string>
  3.  
  4.                 using namespace std;
  5.  
  6.                 int main(int argc, char* argv[])
  7.                 {
  8.                         const int righe = 20;
  9.                         const int cols = 20;
  10.                         char matrice[righe][cols];
  11.  
  12.                         for (int i = 0; i < righe; i++)
  13.                         {
  14.                                 for (size_t j = 0; j < cols; j++)
  15.                                 {
  16.                                         matrice[j][i] = '#';
  17.                                         if (j == 1)
  18.                                                 matrice[j][i] = '#';
  19.                                 }
  20.                         }
  21.                         for (int i = 0; i < righe; i++)
  22.                         {
  23.                                 for (size_t j = 0; j < cols; j++)
  24.                                 {
  25.                                         cout << matrice[j][i] << " ";
  26.                                 }
  27.                                 cout << endl;
  28.                         }
  29.                         return 0;
  30.                 }



mettendo anche il secondo valore la matrice si riempie con tutti #
e cout mostra uno schema 20x20 di tutti #

Ultima modifica effettuata da Carlo il 18/04/2020 alle 21:53


in programmazione tutto è permesso
PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 23:07
Sabato, 18/04/2020
Concordo con tutto quello che ha detto Carlo, soprattutto sul codice che sembra più vicino al C piuttosto che al C++, io nel mio piccolo dovendo seguire la traccia data avrei fatto :

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5. const int Colonne = 18;
  6. const int Righe=22;
  7.  
  8. class Labirinto {
  9.         private:
  10.         char  Matrice[Righe][Colonne]; // array di Righe x Colnne
  11.         public:
  12.         Labirinto();  // per creare il labirinto con i cicli for
  13.         void Visualizza();  // si fa vedere il labirinto creato
  14. };
  15.  
  16. Labirinto::Labirinto() {
  17.     for(int i = 0; i < Righe; i++)
  18.         for(int j = 0; j < Colonne; j++)
  19.             Matrice[i][j] = '#';
  20. }
  21.  
  22. void Labirinto::Visualizza(){
  23.  
  24.         for(int i=0; i<Righe; i++) {
  25.           for(int j=0; j< Colonne; j++)
  26.                 printf("%c ", Matrice[i][j]);
  27.                 cout << endl;
  28.         }
  29.         cout << endl;
  30. }
  31.  
  32. int main(int argc, char *argv[])
  33. {
  34.         Labirinto  Lab;
  35.         Lab.Visualizza();
  36.          
  37.     system("PAUSE");
  38.     return EXIT_SUCCESS;
  39. }



Ossia avrei ragionato OO come nella logica C++, creando una classe labirinto e poi lavorandoci sopra...

PS: il mio C++ è molto arruginito, non ho un compilatore sotto mano, dunque mi scuso se il codice non compila o ci sono errori.
G.


Ibis redibis non morieris in bello
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 0:20
Domenica, 19/04/2020
Goblin e' piu orientato, io invece non ho cambiato quello che hai postato.
Ho usato le mie limitate conoscenze di C, per creare un labirinto usando i tasti w, a, s, d.
Parte con la S, e con x si può aggiungere la A :rotfl::k:

Cosa non mi piace: il goto, i 4 if invece di switch e il do while, che genera un loop che consuma risorse inutilmente.

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <string>
  3. #include <conio.h>
  4.  
  5.  
  6. using namespace std;
  7.  
  8. int main(int argc, char* argv[])
  9. {
  10.         const int righe = 20;
  11.         const int cols = 20;
  12.         char input_utente = NULL;
  13.        
  14.         char matrice[righe][cols];
  15.  
  16.         for (int i = 0; i < righe; i++)
  17.         {
  18.                 for (size_t j = 0; j < cols; j++)
  19.                 {
  20.                         matrice[j][i] = '#';   
  21.                 }
  22.         }
  23.         matrice[0][1] = 'S';
  24.         matrice[1][1] = ' ';
  25.         int X = 1;
  26.         int Y = 1;
  27.  
  28. vai:
  29.  
  30.         system("cls");
  31.         for (int i = 0; i < righe; i++)
  32.         {
  33.                 for (size_t j = 0; j < cols; j++)
  34.                 {
  35.                         cout << matrice[j][i] << " ";
  36.                 }
  37.                 cout << endl;
  38.         }
  39.        
  40.         do // lettura della tastiera con _getch()
  41.         {
  42.                  input_utente = _getch();
  43.         } while(input_utente == NULL);
  44.  
  45.         // navigazione, se vai fuori schema
  46.         // non c'è nessun controllo
  47.         if (input_utente == 'a') Y--;
  48.         if (input_utente == 'd') Y++;
  49.         if (input_utente == 'w') X--;
  50.         if (input_utente == 's') X++;
  51.         // con x viene aggiunta una A
  52.         // altrimenti uno spazio
  53.         if (input_utente == 'x')
  54.                 matrice[Y][X] = 'A';
  55.         else
  56.                 matrice[Y][X] = ' ';
  57.        
  58.         goto vai;
  59.  
  60.         return 0;
  61.        
  62. }


Ultima modifica effettuata da Carlo il 19/04/2020 alle 1:58


in programmazione tutto è permesso
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo