DOMANDA Qualcuno bravo con la programmazione in C++ ?

m3tt0

Nuovo Utente
112
13
CPU
i5-9400F
Dissipatore
NZXT Kraken M22 120mm
Scheda Madre
ASRock H310CM-HDV
HDD
WDC 1TB & SSD 480GB
RAM
G.Skill F4-2400C17-8GIS DDR4
GPU
NVIDIA GeForce GTX 1660 Super
PSU
Cooler Master MWE 600W
Case
Antec NX210
Net
Fibra/Rame 100 mega
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
6,440
5,091
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++
 
  • Mi piace
Reazioni: Mursey
U

Utente cancellato 371741

Ospite
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.
 
  • Mi piace
Reazioni: m3tt0

m3tt0

Nuovo Utente
112
13
CPU
i5-9400F
Dissipatore
NZXT Kraken M22 120mm
Scheda Madre
ASRock H310CM-HDV
HDD
WDC 1TB & SSD 480GB
RAM
G.Skill F4-2400C17-8GIS DDR4
GPU
NVIDIA GeForce GTX 1660 Super
PSU
Cooler Master MWE 600W
Case
Antec NX210
Net
Fibra/Rame 100 mega
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
6,440
5,091
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.
 

m3tt0

Nuovo Utente
112
13
CPU
i5-9400F
Dissipatore
NZXT Kraken M22 120mm
Scheda Madre
ASRock H310CM-HDV
HDD
WDC 1TB & SSD 480GB
RAM
G.Skill F4-2400C17-8GIS DDR4
GPU
NVIDIA GeForce GTX 1660 Super
PSU
Cooler Master MWE 600W
Case
Antec NX210
Net
Fibra/Rame 100 mega
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
 
U

Utente cancellato 371741

Ospite
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
Discord Ufficiale Entra ora!

Discussioni Simili