Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - problema di comparazione tra pointer e integer (così dice il compilatore)
Forum - C/C++ - problema di comparazione tra pointer e integer (così dice il compilatore)

Avatar
diescc (Normal User)
Newbie


Messaggi: 7
Iscritto: 10/10/2009

Segnala al moderatore
Postato alle 16:16
Sabato, 10/10/2009
Salve a tutti..
sono nuovo di questa community e vi volevo porvi un problema.
Sto cercando di imparare le API di C++ unsando Dev-C++ come compilatore..
Ora... stavo cercando di creare un programma che, data una Formula chimica, restituisce il nome in IUPAC.
Ma non riesco a far capire al compilatore che deve Comparare il carattere di testo immesso dall'utente con tutti i caratteri memorizzati in uno struct all'interno del programma dei rispettivi elementi...

ecco qua il codice..

//interprete.cpp:

#include <windows.h>
#include "resource.h"
#include "elementi.h"

typedef struct ATOMO {
        int pedice;
        int no;
        int nossidazione[4];
        char* elemento;
};

typedef struct formula {
        int nAtomi;
        ATOMO atomo[3];
};

formula Converti(HWND hwnd,char f[12])
{
        formula Form;
        ATOMO Atom;
        elementi el=InitElement();        
        int k=0,x;
        while (k<5)
        {
              x = 1;
              while (x<7)
              {
                     if (f[k]==el.simbolo[x])
                     {MessageBox(0,"idrogeno",0,0);
                          Form.nAtomi++;
                          Atom.elemento=el.elemento[x];
                          Atom.no=el.no[x];
                          for (int y;y<=el.no[x];y++)
                               Atom.nossidazione[y] = el.nossidazione[x][y];                          
                          Form.atomo[k]=Atom;                          
                          
                     }
                     if (f[k]=='\0')
                     {
                          MessageBox(0,"FINE","",0);
                          return Form;
                     }
              MessageBox(0,0,0,0);
              x++;
              }
              k++;
        }
        return Form;
}

char* Traduci(HWND hwnd,char formul[12])                                          //<<<----------INIZIO IUPAC-------------->>>
{        
      formula Form;
      Form = Converti(hwnd,formul);
      if (Form.atomo[0].elemento=="idrogeno" && Form.atomo[0].pedice==0)
        MessageBox(0,"Formula confremata.\nAlgoritmo funzionante","",0);
}

//elementi.cpp

#include <windows.h>

typedef struct elementi
{
     char* elemento[109];
     char simbolo[109];
     int no[109];
     int nossidazione[109][4];
};

elementi InitElement()
{
     elementi EL;
     EL.elemento[1]="idrogeno";
     EL.simbolo[1]='H';
     EL.no[1]=1;
     EL.nossidazione[1][0]=1;
     return EL;
}

problema è "if (f[k]==el.simbolo[x])"
Spero che i nomi delle variabili siano abbastanza chiari.

:d

Ultima modifica effettuata da diescc il 10/10/2009 alle 16:30


Pascal - C - Assembly
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 17:25
Sabato, 10/10/2009
A parte il fatto che il codice e' C e non C++, non hai postato il contenuto del file

elementi.h

per comprendere appieno il codice.

In ogni caso, il problema e' che, in C, gli array di char non si confrontano con == ma con la funzione

strcmp( ... )


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
diescc (Normal User)
Newbie


Messaggi: 7
Iscritto: 10/10/2009

Segnala al moderatore
Postato alle 17:42
Sabato, 10/10/2009
ecco il file elementi.h

typedef struct elementi
{
     char* elemento[109];
     char simbolo[109];
     int no[109];
     int nossidazione[109][4];
};
elementi InitElement();

comunque ho già provato con strcmp( f[k] , el.simbolo[x] )
ma non mi trova la procedura.
ho provato a includere cstring,string,iostream e stdio ma non la trova....

Scusa se il codice è in C ma ho imparato su un Tutorial che era in C!:(

Grazie per l'interessamento

P.S. comunque ho trovato un atro metodo per farlo funzionare ma l'algoritmo richiede tromma CPU :yup:

Ultima modifica effettuata da diescc il 10/10/2009 alle 18:55


Pascal - C - Assembly
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 17:57
Sabato, 10/10/2009
La struttura

struct elementi

e' dichiarata nell'include e poi, in modo diverso, nel seguito del codice.

Qual e' quella giusta?

Fra l'altro dichiari vettori di 109 puntatori a char, cosa che non ha molto senso per come li utilizzi dopo ...

Testo quotato

comunque ho già provato con strcmp( f[k] , el.simbolo[x] )
ma non mi trova la procedura.



Che vuol dire "non mi trova la procedura"?

In ogni caso, finche' tenterai di confrontare i dati di quella struttura che non e' dichiarata correttamente, avrai mille errori ...

Testo quotato

ho provato a includere cstring,string,iostream e stdio ma non la trova....



Scusa, ma programmi "a caso"?

E' vero che stai imparando, ma se devi apportare delle modifiche devi farlo con cognizione di causa. Ovvero, devi soffermarti un po' di piu' sulla "base" del tuo programma, che sono le strutture che utilizzerai.

Testo quotato

Scusa se il codice è in C ma ho imparato su un Tutorial che era in C!:(



E perche' hai postato nel forum di C++ ... semmai in quello di C ...



- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
diescc (Normal User)
Newbie


Messaggi: 7
Iscritto: 10/10/2009

Segnala al moderatore
Postato alle 18:10
Sabato, 10/10/2009
:(Mi hai demolito:(

comunque ho messo un numero considerevole di variabili dato che gli elementi nella tavola periodica sono 109 (gli altri non sono ancora stati scoperti.


Comunque per me sarebbe molto istruttivo capire come faccio a tradurre il programma il C++.

Forse devo usare oggetti invece di tutte quelle inutili struct e char*??


Pascal - C - Assembly
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 18:18
Sabato, 10/10/2009
Testo quotato

Postato originariamente da diescc:

:(Mi hai demolito:(



Non e' mia intenzione scoraggiarti, ma se non acquisisci molto bene le basi del C, non riuscirai a scrivere il tuo programma ...

Testo quotato

comunque ho messo un numero considerevole di variabili dato che gli elementi nella tavola periodica sono 109 (gli altri non sono ancora stati scoperti.



Non e' importante il fatto che ne hai messo un "numero considerevole" ma che il tipo che hai usato (un array di puntatori) che non sono allocati, non ha molto senso ...

Testo quotato

Comunque per me sarebbe molto istruttivo capire come faccio a tradurre il programma il C++.



Vedi sopra ... devi prima far funzionare bene il programma in C prima di passare al C++ ...


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
diescc (Normal User)
Newbie


Messaggi: 7
Iscritto: 10/10/2009

Segnala al moderatore
Postato alle 18:25
Sabato, 10/10/2009
quindi devo usare malloc in questa funzione in elementi.cpp??

elementi InitElement()
{
     elementi EL;
     EL.elemento[1]="idrogeno";
     EL.simbolo[1]='H';
     EL.no[1]=1;
     EL.nossidazione[1][0]=1;
     return EL;
}


Pascal - C - Assembly
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 18:29
Sabato, 10/10/2009
Guarda ... prima di tutto ... decidi quale deve essere la struttura che vuoi utilizzare.

Decidi solo questo, motivando, elemento per elemento, il tipo di dato scelto e come dovra' essere utilizzato.



- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
diescc (Normal User)
Newbie


Messaggi: 7
Iscritto: 10/10/2009

Segnala al moderatore
Postato alle 18:42
Sabato, 10/10/2009
secondo i miei calcoli dovrebbe essere così:

-la sringa immessa da''utente viene convertita in una struttura "formula" la quale contiene quanti atomi ci sono nella formula "nAtomi" e gli stessi atomi (un'array di strutture "ATOMO" ognuna contenenti il nome dell'atomo "elemento"[indispensabile per i prefissi] quanti numeri di ossidazione ha "no" fondametale per bilanciare la formula insieme ai numeri di ossidazione stessi [in un'array di interi "nossidazione"])

-la srtuttura Elementi l'avevo creata come buffer di dati dove sono memorizzati tutti i dati di tutti gli elementi della tavola periodica.. (indispensabile poichè i nomi e i numeri di ossidazione sono diversi da atomo a atomo [indubbiamente sennò non staremmo qui a parlare])

la procedura  che non viene è proprio quella che dovrebbe riconoscere attraverso il simbolo (es. H per l'idrogeno) l'elemento coinvolto nella molecola e poi, infine, passare i dati da una struttura a l'altra.
Ma come avrai già capito ci sono una marea di stranezze...

ho fixato elementi.h e riesce a riconoscere che immetto 'H' ma poi non vede il carattere di fine stringa '/0' e continua a fare un MessageBox vuoto [segnale che ho impostato prima della fine del ciclo]


Pascal - C - Assembly
PM Quote