Oppure

Loading
10/10/09 14:16
diescc
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]=='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]=='{parsed_message}')
{
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
')
{
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 10/10/09 14:30
aaa
10/10/09 15:25
theprogrammer
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( ... )
aaa
10/10/09 15:42
diescc
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 10/10/09 16:55
aaa
10/10/09 15:57
theprogrammer
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 ...

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 ...

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.

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 ...

aaa
10/10/09 16:10
diescc
:(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*??
aaa
10/10/09 16:18
theprogrammer
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 ...

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 ...

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++ ...
aaa
10/10/09 16:25
diescc
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;
}
aaa
10/10/09 16:29
theprogrammer
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.

aaa