All pastes #284853 Raw Edit

Mine

public text v1 · immutable
#284853 ·published 2006-12-19 10:58 UTC
rendered paste body
/* 
Domas Jokubauskis
KF I k.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

#define EILUTES_ILGIS 999
#define ZODZIO_ILGIS 99

typedef struct ingredientas
{
	char	pav[ZODZIO_ILGIS];
	float	kiekis;
	struct	ingredientas *kitas;
} ingredientas;


typedef struct receptas
{
		char   pav[ZODZIO_ILGIS];
		struct ingredientas *ingr;
        struct receptas *kitas;
} receptas;

receptas * AddR (receptas * ds_r, char pav[ZODZIO_ILGIS]);
ingredientas * AddI (receptas * ds_r, ingredientas * ds_i, char pav[ZODZIO_ILGIS], float kiekis);
void PrintR (receptas * ds_r);
void Valyti (receptas * ds_r);
receptas * SalintiR (receptas * ds_r);
ingredientas * SalintiI (ingredientas * ds_i);

int main(int argc, char **argv)
{

	float kiekis;
	int pavadinimas_buvo = 0;
	char *eilute;
	char *zodis;
	char *laikinas;
	receptas *ds_r = NULL; /* duomen&#371; strukt&#363;ros rodykl&#279; */
	ingredientas *ds_i = NULL;
	    
    //programos argument&#371; patikrinimas
    if (argc!=2)
    {
        printf("Programai neteisingai perduoti parametrai!\n");
        printf("Programos naudojimas: programa kelias_iki_bylos\n");
        exit(EXIT_FAILURE);
    }
    //bylos atv&#279;rimas
    FILE *byla;
    byla = fopen(argv[1],"r");
    if (byla==NULL)
    {
        printf("Nepavyko atverti „%s“ bylos! Programa baigiama.\n", argv[1]);
        exit(EXIT_FAILURE);
    }
    else
        printf("„%s“ byla s&#279;kmingai atverta.\n", argv[1]);
	
    while(!feof(byla))
    {
		eilute = malloc(sizeof(char)*EILUTES_ILGIS);
        fgets(eilute, EILUTES_ILGIS, byla);
		if (feof(byla)) break;
        zodis = malloc(sizeof(char)*ZODZIO_ILGIS);
		
        /* pakei&#269;ia \n &#303; \0 simbol&#303; */
        if ((laikinas = strchr(eilute, '\n')) != NULL)
            *laikinas = ' ';
		//printf("\neilute: %s\n", eilute);
        
        if (sscanf(eilute, "%s", zodis)<1)
            pavadinimas_buvo = 0;
            /* receptas */
        else if (sscanf(eilute, "%s", zodis)>=1 && pavadinimas_buvo == 0)
        {
            ds_i = NULL;
            ds_r = AddR(ds_r, zodis);
            //printf("\n\nsiaip:%s\n", ds_r->pav);
            //printf("\nReceptas: %s", zodis);
            pavadinimas_buvo = 1;
        }
        	/* ingredientas */
        else if (sscanf(eilute, "%s %f", zodis, &kiekis)>=1 && pavadinimas_buvo == 1)
        {	
            ds_i = AddI(ds_r, ds_i, zodis, kiekis);
            //printf("\n\tIngredientas: %s, kiekis: %.2f", zodis, kiekis);
        }
		free(eilute);
		free(zodis);
    }
    PrintR(ds_r);
    getchar();
    Valyti(ds_r);
    getchar();
    if (!fclose(byla))
    {
        printf("\n\nPrograma s&#279;kmingai baigta.\n");
        exit(EXIT_SUCCESS);
    }
    else
    {
        printf("Nepavyko uždaryti bylos.\n");
        exit(EXIT_FAILURE);
    }
}


receptas * AddR (receptas * ds_r, char pav[ZODZIO_ILGIS])
{
	receptas * lp = ds_r;
    if (ds_r != NULL)
    {
		while (ds_r-> kitas != NULL)
			ds_r = ds_r -> kitas;
		ds_r -> kitas = (struct receptas *) malloc (sizeof (receptas));
		ds_r =  ds_r -> kitas;
		ds_r -> kitas = NULL;
		ds_r -> ingr = NULL;
		strcpy(ds_r -> pav, pav);
		//printf("\n\nkitas:%s\n", pav);
		return lp;
    }
    else
    {
		ds_r = (struct receptas  *) malloc (sizeof (receptas));
		ds_r -> kitas = NULL;
		ds_r -> ingr = NULL;
		strcpy(ds_r -> pav, pav);
		//printf("\n\nds_r:%s\n", ds_r -> pav);
		return ds_r;
    }
}

ingredientas * AddI (receptas * ds_r, ingredientas * ds_i, char pav[ZODZIO_ILGIS], float kiekis)
{
	ingredientas * lp = ds_i;
    if (lp != NULL)
    {
		while (ds_i-> kitas != NULL)
			ds_i = ds_i -> kitas;
		ds_i -> kitas = (struct ingredientas *) malloc (sizeof (ingredientas));
		ds_i =  ds_i -> kitas;
		ds_i -> kitas = NULL;
		strcpy(ds_i -> pav, pav);
		ds_i -> kiekis = kiekis;
		//printf("\n\n\tkitas:%s\n", pav);
		return lp;
    }
    else
    {
		while (ds_r-> kitas != NULL)
			ds_r = ds_r -> kitas;
		ds_r -> ingr = (struct ingredientas *) malloc (sizeof (ingredientas));
		ds_i = ds_r -> ingr;
		strcpy(ds_i -> pav, pav);
		ds_i -> kiekis = kiekis;
		ds_i -> kitas = NULL;
		//printf("\n\n\tds_i:%s, %f\n", ds_i -> pav, ds_i -> kiekis);
		return ds_i;
    }
}

void PrintR (receptas * ds_r) {
	
	ingredientas * ds_i;
    if (ds_r == NULL)
		printf ("Recept&#371; n&#279;ra!\n");
    else
	while (ds_r != NULL) {
	    printf ("\nReceptas „%s“:", ds_r -> pav);
	    if (ds_r -> ingr != NULL)
	    {
	    	ds_i = ds_r -> ingr;
	    	while (ds_i != NULL)
	    	{
	    		printf("\n\t* %s\t%0.2f", ds_i -> pav, ds_i -> kiekis);
	    		ds_i = ds_i -> kitas;
	    	}
	    }
	    else
	    	printf(" (recepte ingredientai nenurodyti!)");
	    ds_r = ds_r -> kitas;
	}
    printf ("\n");
}
receptas * SalintiR (receptas * ds_r)
{
	receptas * tempp;
    printf ("Receptas %s pasalintas\n", ds_r -> pav);
    tempp = ds_r -> kitas;
    free (ds_r);
    return tempp;
}
ingredientas * SalintiI (ingredientas * ds_i)
{
	ingredientas * tempp;
    printf ("\tIngredientas %s pasalintas\n", ds_i -> pav);
    tempp = ds_i -> kitas;
    free (ds_i);
    return tempp;
}

void Valyti (receptas * ds_r)
{
	ingredientas * ds_i;
	if (ds_r == NULL)
		printf ("Recept&#371; n&#279;ra!\n");
    else
	while (ds_r != NULL) {
		if (ds_r -> ingr != NULL)
	    {
	    	ds_i = ds_r -> ingr;
	    	while (ds_i != NULL)
	    	{
	    		ds_i = SalintiI(ds_i);
	    	}
	    }    
		ds_r = SalintiR(ds_r);
	    
	}
    printf ("\n");
}