rendered paste body/* Domas JokubauskisKF I k.*/#include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>#define EILUTES_ILGIS 999#define ZODZIO_ILGIS 99typedef 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ų struktūros rodyklė */ ingredientas *ds_i = NULL; //programos argumentų patikrinimas if (argc!=2) { printf("Programai neteisingai perduoti parametrai!\n"); printf("Programos naudojimas: programa kelias_iki_bylos\n"); exit(EXIT_FAILURE); } //bylos atvė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ė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čia \n į \0 simbolį */ 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ėkmingai baigta.\n"); exit(EXIT_SUCCESS); } else { printf("Nepavyko udaryti 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ų nė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ų nė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");}