Vai al contenuto


Foto

[C/C++]Why u not work?


Questa discussione e' stata archiviata Questo significa che non e' possibile rispondere
39 risposte a questa discussione

#21 Aldin

Aldin

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 12.976 Messaggi:

Inviato 29 settembre 2011 - 22:17

Si ma cosa ci va nei puntini? :mcoso:
**v[i]=malloc(a*sizeof(int**));
*v[i][j]=malloc(b*sizeof(int*));
v[i][j][k]=malloc(c*sizeof(int));
?

Attenti al cane

 

dWUkZcX.gif


#22 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 29 settembre 2011 - 22:23

Ah, pensavo volessi leggere i valori di una matrice.
Niente, sono andato, a domani :mcoso:
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#23 Aldin

Aldin

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 12.976 Messaggi:

Inviato 29 settembre 2011 - 22:30

Pastiglie o gocce? Che marca? :mcoso:

Attenti al cane

 

dWUkZcX.gif


#24 dreadknight

dreadknight

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 10.096 Messaggi:

Inviato 29 settembre 2011 - 22:55

aldin, se vuoi imparare a programmare bene in C ti consiglio questo libro


Posted Image

El sueño de la razón produce monstruos


#25 TigerShark

TigerShark

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.685 Messaggi:

Inviato 29 settembre 2011 - 22:58

[quote name="trallallero @":3huz4za0] [quote name='"TigerShark @":3huz4za0] dio cane' date=' perche' questa tortura nel 2011 quando non solo abbiamo framework che fanno il garbage collecting automatico, ma adirittura suddividono dinamicamente i thread in funzione del numero di processori del sistema e in funzione del numero di processori DISPONIBILI IN QUEL MOMENTO???? :mcoso:[/quote']
Gente che sa fare queste torture ha potuto scrivere in C il Java.[/quote]
E ora c'e gente che riscrive il python in python e in java scrive scala.
cazzo.
Infatti ho specificato nel 2011.
In che anno e' nato java?
e perche' e' stato scritto in C?
E scala in che anno e' nato?
e perche' e' stato scritto in java?
I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path. Where the fear has gone there will be nothing. Only I will remain.

#26 TigerShark

TigerShark

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.685 Messaggi:

Inviato 29 settembre 2011 - 22:59

aldin, se vuoi imparare a programmare bene in C ti consiglio questo libro


Posted Image

cristo, il deitel & deitel...
ancora e' usato dopo 10 anni che l'ho usato io? :mcoso:
speravo l'avessero bruciato, soprattutto nella miserrima traduzione italiana che per fortuna non ho mai comprato. :sisi:
I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path. Where the fear has gone there will be nothing. Only I will remain.

#27 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 30 settembre 2011 - 07:14

@[/url]":51w18l2e]
Gente che sa fare queste torture ha potuto scrivere in C il Java.

E ora c'e gente che riscrive il python in python e in java scrive scala.
cazzo.
Infatti ho specificato nel 2011.
In che anno e' nato java?
e perche' e' stato scritto in C?
E scala in che anno e' nato?
e perche' e' stato scritto in java?

Ma ancora la meni con sta storia del cazzo ?
Se vuoi alte prestazioni scrivi in C++, c'è chi lo fa in C, programmatori Assembler sono ancora richiesti.
Se ti sta tanto sul cazzo il C/C++, cosa entri a fare nei threads che trattano C/C++ ?
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#28 TigerShark

TigerShark

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.685 Messaggi:

Inviato 30 settembre 2011 - 07:18

@[/url]":f4rb6a1h]
E ora c'e gente che riscrive il python in python e in java scrive scala.
cazzo.
Infatti ho specificato nel 2011.
In che anno e' nato java?
e perche' e' stato scritto in C?
E scala in che anno e' nato?
e perche' e' stato scritto in java?

Ma ancora la meni con sta storia del cazzo ?
Se vuoi alte prestazioni scrivi in C++, c'è chi lo fa in C, programmatori Assembler sono ancora richiesti.
Se ti sta tanto sul cazzo il C/C++, cosa entri a fare nei threads che trattano C/C++ ?

per ricordarmi ogni tanto quanto fanno cagare come sintassi.. :mcoso:
I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path. Where the fear has gone there will be nothing. Only I will remain.

#29 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 30 settembre 2011 - 07:21

Vero, ma è anche giusto che si imparino certe cose di basso livello altrimenti cresci viziato e finisci coll'essere capace di programmare solo in Java :mcoso:
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#30 Aldin

Aldin

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 12.976 Messaggi:

Inviato 30 settembre 2011 - 09:44

Il deitel mi ha messo il latte alle ginocchia. Ho quello sul C++. E' un libro si per principianti, ma anche per ritardati mentali. Ho preferito il materiale del mio prof. Diretto, ordinato e assolutamente non ridondante.

Si ma cosa ci va nei puntini? :mcoso:
**v[i]=malloc(a*sizeof(int**));
*v[i][j]=malloc(b*sizeof(int*));
v[i][j][k]=malloc(c*sizeof(int));
?


Attenti al cane

 

dWUkZcX.gif


#31 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 30 settembre 2011 - 10:09

Ops, pensavo avessi già risolto.

Come lo dichiari "v" ?

Diciamo
int*** v = NULL;

Quindi prima cosa allochi la prima dimensione senza ciclo:

v = malloc(a * sizeof(int**));

Poi per ogni indice compreso in "a", devi allocare le altre 2 dimensioni:


int ind1, ind2;

for (ind1 = 0; ind1 < a; ++ind1) 

{

   *array[ind1] = malloc(b * sizeof(int*)); // La seconda



    // Poi per ogni indice compreso in "b", devi allocare la 3a dimensione:

   for (ind2 = 0; ind2 < b; ind2++) 

   {

      array[ind1][ind2] = malloc(c * sizeof(int)); // La terza

   }

}

Dovrebbe essere così, non ho testato.
Ma sicuramente c'è almeno un errore, queste cose non funzionano mai alla prima :mcoso:


Altra soluzione non dinamica per cominciare il C senza puntatori è:
int v[2][10][20]; // valori a caso

Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#32 Aldin

Aldin

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 12.976 Messaggi:

Inviato 30 settembre 2011 - 10:15

Ma come ho scritto all'inizio, non posso dichiararlo subito come array, e poi allocargli la memoria? O gli array hanno già memoria allocata quando vengono dichiarati? Perché se così non me ne faccio niente di tutta quella merda con i malloc.

Attenti al cane

 

dWUkZcX.gif


#33 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 30 settembre 2011 - 10:23

No che non puoi. Se vuoi puoi dichiararlo statico come t'ho detto, v[1][2][3],
sennò lo dichiari come puntatore e puoi allocare quello che vuoi.

Nel primo caso la misura la dichiari e non la puoi cambiare, nel secondo caso la decidi in real time.
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#34 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 30 settembre 2011 - 10:26

Comunque se non ti piacciono i puntatori voglio vedere se un giorno finisci a programmare con puntatori a callbacks ovvero, per esempio, passare ad una classe il puntatore alla funzione che deve chiamare quando succede qualcosa :mcoso:
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#35 yorkeiser

yorkeiser

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 68.968 Messaggi:

Inviato 30 settembre 2011 - 13:57

Il libro modifica il programma nelle pagine successive per farci qualcosa di utile. Ah:
Se volessi dichiarare un elemento del tipo v[j][k] come farei ad allocargli memria con malloc? [i]v=(double*)malloc(i*j*k*sizeof(double)); ?
O forse v=(double*)calloc(i*j*k,sizeof(double)); ? v o &v?


Certo, puoi fare come hai detto.
;

int i,j,k;

i=dim_x; j=dim_y; k=dim_z;

double* v=(double*)malloc(i*j*k*sizeof(double));

Per accedere alla cella dell'array di indici x,y,z (ovvero v[x][y][z]): se i,j,k sono le dimensioni dell'array, la formula dovrebbe essere, se non sono troppo cotto:
*(v+x+i*y+(i*j*z))

ad esempio, per v[10][15][12]:
*(v+10+i*15+i*j*12)=70.0;

printf("%f",*(v+10+i*15+i*j*12));


Praticamente agisci come se fosse un vettore monodimensionale, e gli indici te li gestisci con la formula.
Altrimenti percorri la strada di trollallero, che imho è più complicata (personalmente adoro il c ma mi è sempre venuta l'orticaria quando vedevo n asterischi, con n>1) :challenge:

Il sole è giallo

Brava Giovanna, brava

E canto please don't let me be misunderstood mentre parcheggio nel parcheggio l'alfasud


#36 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 30 settembre 2011 - 14:11

Boh, complicata... una volta che capisci il meccanismo è semplicissima e ti apre un po la mente perché impari ad usare le multidimensioni. Non che poi servirà a molto perché, a meno che tu non debba scrivere drivers, videogiochi o simili, difficilmente dovrai usare la memoria in quel modo.

In fondo questo esempio cosa sta facendo ?


   int ***array = malloc(3 * sizeof(int**));

   int i, j;



   for (i = 0; i < 3; i++) 

   {

      *array[i] = malloc(3 * sizeof(int*));

      for (j = 0; j < 3; j++) 

      {

         array[i][j] = malloc(3 * sizeof(int));

      }

   }

Alloca 3 puntatori a, mentre mia madre succhia cazzi, interi oguno dei quali punta ad un blocco di memoria.
Per ogni blocco, alloca 3 righe di puntatori a, mentre mia madre succhia cazzi, interi.
Per ogni riga alloca 3 colonne a, mentre mia madre succhia cazzi, interi.

Semplicissimo :challenge:
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#37 yorkeiser

yorkeiser

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 68.968 Messaggi:

Inviato 30 settembre 2011 - 14:49

Boh, complicata... una volta che capisci il meccanismo è semplicissima e ti apre un po la mente perché impari ad usare le multidimensioni. Non che poi servirà a molto perché, a meno che tu non debba scrivere drivers, videogiochi o simili, difficilmente dovrai usare la memoria in quel modo.

In fondo questo esempio cosa sta facendo ?


   int ***array = malloc(3 * sizeof(int**));

   int i, j;



   for (i = 0; i < 3; i++) 

   {

      *array[i] = malloc(3 * sizeof(int*));

      for (j = 0; j < 3; j++) 

      {

         array[i][j] = malloc(3 * sizeof(int));

      }

   }

Alloca 3 puntatori a, mentre mia madre succhia cazzi, interi oguno dei quali punta ad un blocco di memoria.
Per ogni blocco, alloca 3 righe di puntatori a, mentre mia madre succhia cazzi, interi.
Per ogni riga alloca 3 colonne a, mentre mia madre succhia cazzi, interi.

Semplicissimo :sbonk:


Mi pare ci sia un errore: *array[i] dovrebbe essere in realtà array[i] ?

Comunque, al di là dei punti di vista sulle catene di puntatori, l'algoritmo da te enunciato è di gran lunga il più completo in termini di allocazione dinamica, visto che puoi estendere l'array indipendentemente su tutte le tre dimensioni, mentre nella versione monodimensionale puoi estendere solo la terza senza sminchiare gli indici. La versione monodimensionale invece può essere utile al micio albino (le indentazioni :yuno: ) per fare un po' di pratica con l'aritmetica dei puntatori.
O al massimo per far girare un altro po' le pelotas allo SqualoTigre :challenge:

Il sole è giallo

Brava Giovanna, brava

E canto please don't let me be misunderstood mentre parcheggio nel parcheggio l'alfasud


#38 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 30 settembre 2011 - 14:57

Mi pare ci sia un errore: *array[i] dovrebbe essere in realtà array[i] ?

Mi sembra di no ma potresti avere ragione.
È per quello che ho detto che alla prima non funziona mai, è facile perdere il filo degli *
E poi è un bel po' che non la uso sta roba qua... per fortuna :challenge:
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#39 toyo

toyo

    sono triste

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 44.144 Messaggi:

Inviato 02 ottobre 2011 - 11:15

si ma aldin, se non vuoi diventare scemo con le malloc (che tanto a te da fisico non te ne frega niente, ti basta avere i risultati sperimentali immagino), usa gli std::vector dai.

Altrimenti va a finire che diventi scemo per robe di basso livello, invece di fare quello che ti serve.

Se studiassi informatica ti direi il contrario, ma da fisico che cazzo te ne sbatte?

FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
 

Mai più giorni felici


#40 MadJackal

MadJackal

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 3.105 Messaggi:

Inviato 03 ottobre 2011 - 13:31

@[/url]":3ivb6584]Mi pare ci sia un errore: *array[i] dovrebbe essere in realtà array[i] ?

Mi sembra di no ma potresti avere ragione.
È per quello che ho detto che alla prima non funziona mai, è facile perdere il filo degli *
E poi è un bel po' che non la uso sta roba qua... per fortuna :patpat:


E comunque rimane meglio usare *(array+i). Un pò d'amore per l'aritmetica dei puntatori, insomma. :look:
In Soviet Italy, the evil army owns you!