Newsgroup: it.comp.lang.c
Titolo: Richiesta correzione programma. URGENTE. x piacere aiutatemi.

/*Salve a tutti. ho 1 problema nella creazione di 1 programma.
qua c'è la traccia dell'esercizio e al fondo c'è l'implementazione fatta da
me.
X piacere dateci 1 occhiata e vedete se riuscite a fare quel che io son
riuscito: a fare girare con successo questo programma e completarlo. grazie
in anticipo.
P.S. mi serve 1 risposta utile entro lunedi mattina.
c'è 1 ditta farmaceutica che produce dei farmaci, ognuno dei quali contiene
vari principi attivi (il numero dei  farmaci è noto, ma quello dei principi
attivi non è noto a priori).
Dato il numero e la composizione di diversi farmaci, trovare il farmaco che
risponde meglio alle richieste della cura.
Vengono dati 2 file:
F.DAT
3
15 20
0 0
10 23
234 5
9875 21
0 0
10 24
234 3
00
e il file C.DAT
10 22
234 5
0 0
la prima riga del file F.DAT indica il numero di farmaci presenti nel file.
I farmaci son separati dai caratteri 0 0
i 2 numeri che ci son x ogni riga rappresentano rispettivamente il  codice
del principio attivo e la sua quantita.
nella cura ci son dei codici di principi attivi e la loro quantita.
Il compito del problema è trovare il farmaco che rispetta le specifiche
della cura.
Se si trovano + farmaci che hanno almeno la quantita minima indicata dalla
cura, si prende quello che ha minor quantita (totale) di principi diversi di
quelli richiesti dalla cura.
Io ho pensato che potevo crearmi 1 vettore di strutture farmaco (ad esempio
lo chiamavo farmacia).
questa struttura era composta cosi:
struct farmaco{
  int numero_farmaco;
  struct principio *listaPrincipio;
};
le strutture principio erano cosi:
struct principio{
  int numero_principio;
  int quantita;
  struct principio *nextPtr;
}
quindi volevo creare delle liste di principi da legare ad ogni singolo campo
del vettore di farmaci.
in modo che ogni farmaco avesse 1 lista di principi legata a se stesso e io
potessi vedere facilmente quali principi contiene 1 farmaco.
C'è qualcuno che riesce a implementarmi 1 programma funzionante con queste
caratteristiche?
Io ci ho provato in tutti i modi ma non ci son riuscito.
Mi blocco sempre dove devo passare da 1 lista di principi all'altra (visto
che fanno parte di 2 farmaci diversi).
E l'altro problema principale è riuscire a creare i vettore di struct
farmaco a meta programma (visto che io non so a priori quanti farmaci ho...)
Vi prego aiutatemi. Mi serve 1 risposta prima che potete.
Io ho provato a fare questo programma, ma la funzione crea_farmacia non so
come farla e non so come passare da 1 lista di principi all'altra e
collegarli alle strutture Farmaco presenti nel vettore di strutture
farmacia. ora allego qua il listato del programma.
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct principio{
  int numero_principio;
  int quantita;
};
struct farmaco{
  int numero_farmaco;
  struct principio *eccipienti[10];
  struct farmaco *nextPtr;
  int check_cura[2];
};
struct cura{
    struct principio *antidoto[10];
    struct cura *nextPtr;
};
typedef struct principio PRINCIPIO;
typedef PRINCIPIO *PRINCIPIOPTR;
typedef struct cura CURA;
typedef CURA *CURAPTR;
typedef struct farmaco FARMACO;
typedef FARMACO *FARMACOPTR;
void inserisci_farmaco(FARMACOPTR *, int, FILE *);
void inserisci_cura(CURAPTR *, FILE *);
void check_farmaci(FARMACOPTR *, FARMACO *, CURA *);
int cerca_farmaco_migliore(FARMACOPTR *);
main() {
int max_farmaci, numero_farmaco1, numero_principio1, quantita1,
numero_principio2, quantita2, cura_def;
FARMACOPTR startPtr=NULL;
CURAPTR startPtr2=NULL;
FILE  *FARMACIPTR, *PRINC_CURAPTR;
if ((FARMACIPTR=fopen("F.DAT", "r"))==NULL)
printf("file non trovato\n");
else {
fscanf(FARMACIPTR, "%d", &max_farmaci);
for (numero_farmaco1=0; numero_farmaco1<max_farmaci; numero_farmaco1++) {
inserisci_farmaco(&startPtr, numero_farmaco1, FARMACIPTR);
}
}
fclose(FARMACIPTR);
if ((PRINC_CURAPTR=fopen("C.DAT","r"))==NULL)
printf("file non trovato\n");
else {
fscanf(PRINC_CURAPTR, "%d %d", &numero_principio2, &quantita2);
while ((numero_principio2 !=0) && (quantita2 != 0)) {
inserisci_cura(&startPtr2, PRINC_CURAPTR);
fscanf(PRINC_CURAPTR, "%d %d", &numero_principio2, &quantita2);
}
}
fclose(PRINC_CURAPTR);
/*qua devo inserire la chiamata della funzione che trova la cura*/
/* FIN ORA HO CREATO 1 PROGRAMMA CHE MI CREA DELLE STRUCT FARMACO IN CUI
S PRESENTE: IL NUMERO  DEL FARMACO E UN VETTORE DI STRUTTURE PRINCIPIO
(CHE DEVO RICORDARMI DI INIZIALIZZARE A 0 INIZIALMENTE)
CREA ANCHE 1 STRUTTURA CURA IN CUI C'S 1 VETTORE DI STRUTTURE PRINCIPIO
A QUESTO PUNTO L'ACQUISIZIONE DATI S COMPLETA.
DEVO SOLTANTO SCORRERMI STE STRUTTURE, CERCARE DENTRO I VETTORI DEI PRINCIPI
DEI
PARAMETRI CHE SODDISFINO LE MIE SPECIFICHE INIZIALI E TROVINO STA CURA
ANCHE SE ORA COME ORA PENSO CHE DAREI LE MEDICINE SBAGLIATE AL PAZIENTE
SOLO X VEDERLO AGONIZZARE E DIVERTIRMI INFIERENDO SU DI LUI....
AH CHE BRUTTO ESSERE TROPPO BUONI... */
check_farmaci(&startPtr,FARMACO *sPtr->eccipienti,CURA *sPtr->antidoto);
cura_def=cerca_farmaco_migliore(&startPtr);
printf("il farmaco che cura la malattia S: %d",cura_def);
return (0);
}
/* funzioni usate */
void inserisci_farmaco(FARMACOPTR *sPtr, int numero_farmaco1, FILE
*FARMACIPTR1)
{int numero_principio3, quantita3,i=0;
FARMACOPTR newPtr;
newPtr=(FARMACO *)malloc(sizeof(FARMACO));
if (newPtr !=NULL) {
newPtr->numero_farmaco=numero_farmaco1;
do {
fscanf(FARMACIPTR1, "%d %d", &numero_principio3, &quantita3);
newPtr->eccipienti[i]->numero_principio=numero_principio3;
newPtr->eccipienti[i]->quantita=quantita3;
i++;
}
while ((numero_principio3 !=0) && (quantita3!=0));
newPtr->nextPtr=*sPtr;
*sPtr=newPtr;}
else printf("farmaco non inserito\n");}
void inserisci_cura(CURAPTR *sPtr, FILE *PRINC_CURAPTR1)
{CURAPTR newPtr;
int numero_principio4, quantita4,i=0;
newPtr=(CURA *)malloc(sizeof(CURA));
if (newPtr !=NULL) {
do {
fscanf(PRINC_CURAPTR1, "%d %d", &numero_principio4, &quantita4);
newPtr->antidoto[i]->numero_principio=numero_principio4;
newPtr->antidoto[i]->quantita=quantita4;
i++;
}
while ((numero_principio4 !=0) && (quantita4!=0));
newPtr->nextPtr=*sPtr;
*sPtr=newPtr;}
else printf("principio non inserito\n");}
void check_farmaci(FARMACOPTR *sPtr, PRINCIPIO *eccipienti, PRINCIPIO
*antidoto)
{FARMACOPTR currentPtr;
int i,k;
currentPtr=*sPtr;
while (currentPtr !=NULL) {
for(k=0; k<10; k++){
for(i=0;  i<10; i++) {
if ((antidoto[k].numero_principio == eccipienti[i].numero_principio) &&
(eccipienti[i].quantita >= antidoto[k].quantita))
currentPtr->check_cura[0]+=1;
if (antidoto[k].numero_principio != eccipienti[i].numero_principio)
currentPtr->check_cura[1]+=eccipienti[i].quantita;
}
}
currentPtr=currentPtr->nextPtr;
}
}
int cerca_farmaco_migliore (FARMACOPTR *sPtr)
{FARMACOPTR currentPtr;
int temp=0, farmaco_cura;
currentPtr=*sPtr;
int max=currentPtr->check_cura[0];
while (currentPtr !=NULL) {
/*devo controllare tra 1 vettore e l'altro della lista di strutture
farmaco*/
if (currentPtr->nextPtr->check_cura[0] > max)
{temp=max;
max=currentPtr->nextPtr->check_cura[0];
farmaco_cura=currentPtr->nextPtr->numero_farmaco;
}
if (currentPtr->nextPtr->check_cura[0] == max)
{if (currentPtr->check_cura[1] > currentPtr->nextPtr->check_cura[1])
{temp=max;
max=currentPtr->nextPtr->check_cura[0];
farmaco_cura=currentPtr->nextPtr->numero_farmaco;
}
}
currentPtr=currentPtr->nextPtr;
}
if (temp !=0 )
return (farmaco_cura);
else return ((*sPtr)->numero_farmaco);
}

 /*Salve a tutti. ho 1 problema nella creazione di 1 programma.
[...]
Questo gruppo non è un luogo in cui chiedere la correzione dei propri
esercizi e sopratutto non nel modo in cui lo fai tu.  Non postare due
volte i tuoi messaggi, nel tentativo di ottenere risposte.  Sforzati di
capire, effettuando il debug del tuo codice, dov'è il punto critico del
tuo programma e, eventualmente, chiedi chiarimenti solo e soltanto su
quello.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

"Andrea Laforgia" <x...@xx.xx> ha scritto nel messaggio 
news:da8nc1$jae$1...@news.newsland.it...

Guarda che il testo del programma è uguale ma l'implementazione fatta da me 
è differente. x quello che ho postato 2 volte. non xche la gente lo 
guardasse. cmq ora che so che questo gruppo non corregge programmi non ne 
postero +. stanne solo tranquillo. p.s. cos'ha il modo mio di postare questa 
richiesta? boh vabbe. 

 p.s. cos'ha il modo mio di postare questa richiesta? 
Te l'ho già spiegato nel messaggio precedente.
