DOMANDA Qualcuno bravo con la programmazione in C++ ?

m3tt0

Nuovo Utente
44
4
Salve, mi servirebbe una mano con un programma. Precisamente mi servirebbe scrivere all'interno di una matrice, in una riga random, fino ad una colonna random di quella stessa riga.
Faccio un esempio:
Ho una matrice 50 x 50, viene scelta una riga casualmente, facciamo esempio la riga 13, e viene scelta una colonna a caso, facciamo che sia la 30. Ora il mio scopo dovrebbe essere quello di scrivere in tutta la riga 13 fino alla colonna 30 un numero qualsivoglia, solo per quella riga però, e facendo in modo che sembri che il numero si sposti di casella in casella, quindi cancellando ogni volta la scrittura nella precedente casella. Le caselle della matrice devono contenere tutte il numero "0" e deve essere modificata appunto quell'unica riga, modificando il contenuto delle celle e inserendo, uno per volta, uno numero qualsivoglia.
Spero di essere stato comprensibile, grazie in anticipo per l'aiuto.
 

Andretti60

Utente Èlite
3,969
2,680
Leggi il regolamento. Saremo lieti di aiutarti solo dopo che hai postato il codice da te già scritto (anche se sbagliato)
PS quello è un classico esercizio di programmazione per ogni linguaggio, non occorre essere esperti in C++
 
  • Like
Reactions: Mursey

bigendian

Utente Attivo
214
103
OS
Linux forever, freedom
Come detto da Mario, non serve c++ per un esercizio del genere, lo puoi usare ma io userei codice C classico.
Non ti scrivo il codice intiero perche le pappe pronte non servono a nessuno, ma ti do delle idee.

int matrice[50][50];

Per azzerare
memset(matrice, 0, sizeof(matrice));

Poi per il numero random vedi rand() e srand()

Per ottenere random da 0 a 50 usa rand() % 50

Poi mantieni la colonna costante e traversi la riga e fai la sostituzione, togliendo il carattere precedente. Qualcosa tipo

C:
matrice[3][x] = numero;
if (x)
     matrice[3][x-1] = 0;

Buon lavoro.
 
  • Like
Reactions: m3tt0

m3tt0

Nuovo Utente
44
4
Leggi il regolamento. Saremo lieti di aiutarti solo dopo che hai postato il codice da te già scritto (anche se sbagliato)
PS quello è un classico esercizio di programmazione per ogni linguaggio, non occorre essere esperti in C++
C++:
#include <iostream>
#include <time.h>
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <cstdlib>
using namespace std;

#define righe 50
#define colonne 50
//#define campi 1
int campoAzione  [righe] [colonne];
int completo = 50;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

void* disegnaCampo(void* p)
{
  pthread_mutex_lock(&mutex);
  do
    for (int i=0; i<righe; i++)
    {
     // for (int j=0; j<campi; j++)
      {
        for (int z=0; z<colonne; z++)
        {
         if (campoAzione  [i] [z] == 0)
            cout << ("1");
            else
               cout << campoAzione  [i] [z];      
        }
        cout << "    ";
      }
      cout << endl;
    }
  while(completo!=righe);  
  pthread_exit(NULL);
  return NULL;
  pthread_mutex_unlock(&mutex);
}
void* muoviAstronave(void* p)
{
  srand(time(0));
  int num,num2;
  num=rand()%righe;
  num2=rand()%colonne;
  int i=
  for ()
    {
      printf("8");

    }
pthread_exit(NULL);
  return NULL;
}





int main()
{
  pthread_t tD,tA;

  pthread_create(&tD,NULL, disegnaCampo, NULL);
  pthread_create(&tA,NULL, muoviAstronave, NULL);



  pthread_exit(NULL);
   return 0;
}

Questo è il codice che ho provato a scrivere, sbagliato ovviamente, ma ancora in fase di elaborazione. Per il momento crea una matrice 50x50 e stavo cercando di far muovere il thread astronave su una riga in modo statico, ma non ci sono riuscito. Il codice mi è stato chiesto esplicitamente in c++, ma chiunque sia bravo con la programmazione multithreading mi potrebbe aiutare.
 

Andretti60

Utente Èlite
3,969
2,680
Ci sono così tanti errori che è un po’ difficile districarsi. Innanzi tutto che bisogno c’è di usare i thread che sono utili solo quando si possono eseguire calcoli in parallelo che non è il tuo caso. E li usi in maniera sbagliata, se crei un thread nel main devi aspettare che finisca altrimenti non succede nulla (ossia devi usare un join). Altro grosso errore è di rilasciare il mutex dopo una istruzione di return, il che significa che il mutex non venga mai rilasciato.
Mi pare che tu stia cercando di imparare troppe cose allo stesso tempo, concentrati su una alla volta.
 
  • Like
Reactions: m3tt0 e bigendian

m3tt0

Nuovo Utente
44
4
Ci sono così tanti errori che è un po’ difficile districarsi. Innanzi tutto che bisogno c’è di usare i thread che sono utili solo quando si possono eseguire calcoli in parallelo che non è il tuo caso. E li usi in maniera sbagliata, se crei un thread nel main devi aspettare che finisca altrimenti non succede nulla (ossia devi usare un join). Altro grosso errore è di rilasciare il mutex dopo una istruzione di return, il che significa che il mutex non venga mai rilasciato.
Mi pare che tu stia cercando di imparare troppe cose allo stesso tempo, concentrati su una alla volta.

purtroppo mi è stato richiesto espressamente l’utilizzo dei thread, per quanto riguarda i molteplici errori, ne sono consapevole, purtroppo sto imparando. comunque ti ringrazio per le dritte
 

bigendian

Utente Attivo
214
103
OS
Linux forever, freedom
Come dice Mario, stai sovrapponendo due problematiche, e i thread complicano non poco e vanno studiati. Per altro chi ti ha dato l'esercizio ha costruito un utilizzo fuori luogo dei thread, visto che le operazioniche fai sono alla fine sequenziali.

Per i thread:
usa pthread_join dal main sul primo thread, e lascialo terminare in maniera narturale, non usare mai pthread_exit(), fallo uscire con "return 0;".
 

Entra

oppure Accedi utilizzando

Hot: PS5 VS XBOX X/S?

  • Playstation 5

    Voti: 296 63.5%
  • XBOX Series X/S

    Voti: 170 36.5%

Discussioni Simili