PDA

Visualizza la versione completa : [C] Strutture e funzioni.Esercizio d'esame


mawjuve
03-07-2009, 15:52
Ciao a tutti....Potreste aiutarmi in questo esercizio.....ho problemi nell'inserimento ricorsivo di una stringa, l'inserimento dovrebbe terminare all'inserimento di "end" , il programma mi da dei problemi... Nel ciclo while devo pure inserire due interi...e chiamare una funzione che riceve un vettore di struttura(inizializzata a 0), la stringa,e i due interi, e inserisce la stringa e i due interi nel vettore di struttura. Vi prego spiegatemi dove sbaglio....o datemi qualche consiglio...
Grazie


#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

struct ferie {
char *cognome;
int inizio;
int durata;
};
typedef struct ferie Ferie;
Ferie impiegati[10]; //Vettore di strttura Ferie

int prenota(Ferie*,char,int,int); //Funzione prenota
char nome[10][12];

main() //MAIN
{int i,j=0,inizio,durata;

for(i=0;i<10;i++){ //inizializzazione struttura
impiegati[i].cognome="Vuoto";
impiegati[i].inizio=0;
impiegati[i].durata=0;
}


do{
printf("Inserisci il cognome dell'impiegato: ");
scanf("%s",nome[i]);


printf("Inserisci il gg d'inizio delle ferie : \n");
scanf("%d",&inizio);
if(inizio>0 && inizio<31){
printf("Inserisci la durata delle ferie : \n");
scanf("%d",&durata);
if(durata >0 && durata<8)
{prenota (impiegati,nome,inizio,durata);
j++;}
else printf("Errore! La durata va da 1 a un massimo di 7 gg.\n");
}
else printf("Inserisci nuovamente il nome e il giorno di inizio delle ferie(1-31).\n");

}while(strcmpi(nome[i++],"end")&& j<10); //PROBLEMA

for(i=0;i<10;i++)
printf("%c %d %d \n",impiegati[i].cognome,impiegati[i].inizio,impiegati[i].durata);

fflush(stdin);
getchar();
}



int prenota(Ferie*w,char nome[][12] ,int in ,int dur)
//FUNZIONE PRENOTA
{int j=0,x,i=0,conta=0; //Che riceve un nome il gg di inizio delle ferie
//e la durata e inserisce i dati nel vettore di
//struttura.
//Se ci sono tre impiegati che hanno le ferire
//nello stesso periodo rende 0 altrimenti 1

while((strcmpi(w[j].cognome,"Vuoto"))) j++;
w[j].cognome= nome[i];
w[j].inizio=in;
w[j].durata=dur;
x=j;
if(x){
for(i=1;i<x;i++){
if(w[i].inizio <= w[i-1].inizio+w[i].durata)
conta++;
}
if (conta==3) return (0);
else return (1);
}else return (1);
}

LeleFT
03-07-2009, 17:20
Originariamente inviato da mawjuve
il programma mi da dei problemi...

Le solite domande:

- quali?
- in che punto del programma?
- in compilazione o in esecuzione?


Ciao. :ciauz:

mawjuve
03-07-2009, 17:58
L'ho corretto un p... Ho scritto //PROBLEMA come commento nel codice alla riga 46,nel while.
Ho un problema nel while....quando scrivo end nel nome per terminare l'inserimento dei dati
il programma continua a chiedermi l'inserimento dei dati.
Inoltre dopo l'inserimento non mi stampa la struttura...si blocca il programma.
Quindi sicuramente c' un problema nella funzione....


#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

struct ferie {
char *cognome;
int inizio;
int durata;
};
typedef struct ferie Ferie;
Ferie impiegati[3]; //Vettore di strttura Ferie

int prenota(Ferie*,char*,int,int); //Funzione prenota
char nome[12];

main() //MAIN
{int i,j=0,inizio,durata,q;

for(i=0;i<3;i++){ //inizializzazione struttura
impiegati[i].cognome="vuoto";
impiegati[i].inizio=0;
impiegati[i].durata=0;
}

printf("%s %d %d \n",impiegati[i].cognome,impiegati[i].inizio,impiegati[i].durata);

do{
printf("Inserisci il cognome dell'impiegato: ");
scanf("%s",&nome);


printf("Inserisci il gg d'inizio delle ferie : \n");
scanf("%d",&inizio);
if(inizio>0 && inizio<31){
printf("Inserisci la durata delle ferie : \n");
scanf("%d",&durata);
if(durata >0 && durata<8)
{prenota (impiegati,nome,inizio,durata);
j++;}
else printf("Errore! La durata va da 1 a un massimo di7gg.\n");
}
else printf("Inserisci nuovamente il nome e il giorno di inizio delle ferie(1-31).\n");

}while((strcmpi(nome,"end")) || j<3); //PROBLEMA

for(i=0;i<3;i++)
printf("%c %d %d \n",impiegati[i].cognome,impiegati[i].inizio,impiegati[i].durata);

fflush(stdin);
getchar();
}



int prenota(Ferie*w,char *nom ,int in ,int dur)
//FUNZIONE PRENOTA
{int j=0,x,i,conta=0; //Che riceve un nome il gg di inizio delle ferie
//e la durata e inserisce i dati nel vettoredi
//struttura.
//Se ci sono tre impiegati che hanno leferie
//nello stesso periodo rende 0 altrimenti 1

while((strcmpi(w[j].cognome,"Vuoto"))) j++;
w[j].cognome= nom;
w[j].inizio=in;
w[j].durata=dur;
x=j;
if(x){
for(i=1;i<x;i++){
if(w[i].inizio <= w[i-1].inizio+w[i].durata)
conta++;
}
if (conta==3) return (0);
else return (1);
}else return (1);
}


:dh: :dh: :dh: :dh:

mawjuve
03-07-2009, 21:20
Questo il testo.....se qualcuno p darmi qualk suggerimento ......dirmi dove sbaglio....vi ringrazio!!

:bh: :bh:

es->
Si scriva un programma ferie.c. In esso si simuli la gestione delle ferie di
agosto del personale di un azienda, mediante un vettore impiegati di strutture dati ferie
contenenti una stringa cognome e due numeri interi inizio e durata.
Si inizializzi il vettore di 10 elementi con stringhe costanti scelte a piacimento e valori degli
interi uguali a 0.
Si scriva la funzione prenota che, dato il vettore, una stringa nome, una data di inizio da 1
a 31 e una durata da 1 a 7 inserisca nella matrice la prenotazione delle ferie e restituisca
l'intero 1 a meno che non ci siano gi tre colleghi che hanno ferie in uno dei giorni richiesti,
nel qual caso non si prenoti nulla e si restituisca 0. Si trascurino i giorni oltre il 31.
Si scriva una seconda funzione lavativi che, dato un intero tra 1 e 31 (giorno), stampi a
video i nomi degli impiegati che sono in ferie tale giorno.


:ciauz: :ciauz: :dh: :bh: :bh:

Loading