int main() { void *a1, *a2; int x, n1, n2; a1 = InitS(sizeof(int),MAX); if(a1) { a2 = InitS(sizeof(int),MAX); if(a2) { fflush(stdin); n1 = CitS(", valorile din prima stiva", "%i", a1); n2 = CitS(", valorile din a doua stiva", "%i", a2); /*printf("Numar valori citite: %i si %i\n", n1, n2); Pop(a1, &x); printf("\n\nDupa Pop din stiva_1: "); AfiS("", AfiIntreg, a1); printf("\nDupa InvS (stiva_2)\n"); InvS(a2); AfiS("\tstiva_2: ", AfiIntreg, a2); */ printf("\nDupa Suprapune (stiva1,stiva_2)\n"); Suprapune(a1,a2); AfiS("\tstiva_1: ", AfiIntreg, a1); AfiS("\tstiva_2: ", AfiIntreg, a2); /*printf("\nAfisare stiva_1 de la varf\n"); n1 = Prel_V_B(a1, AfiIntreg); n1 = Prel_V_B(a1, SchimbaSemn); printf ("\nDupa Prel_V_B(stiva_1, SchimbaSemn)\n"); AfiS("\tstiva_1: ", AfiIntreg, a1); ResetS(a2); printf("\nDupa ResetS(stiva_2)\n"); AfiS("\tstiva_2: ", AfiIntreg, a2); */ //getch(); DistrS(&a2); } DistrS (&a1); } return 0; }
int main(int argc, char* argv[]){ int nr_events, step = 0, identity, priority, event, i; char *action, *parse, input[MAX], output[MAX]; char redundant; TStack *s; TQueue q = NULL; void *aux, *aux2; aux = (TProces*)malloc(sizeof(TProces)); if(!aux) return 0; strcpy(input, argv[1]); //Identificam numele fisierului de intrare strcpy(output, argv[2]); //Identificam numele fisierului de iesire //Deschidem fisierele de intrare si de iesire FILE* fin = fopen(input, "r"); FILE* fout = fopen(output, "a"); //Alocam memorie pentru zona in care vom citi actiunile action = malloc(MAX); if(!action){ free(aux); return 0; } //Citim numarul de evenimente si generam stivele fscanf(fin, "%d", &nr_events); fscanf(fin, "%c", &redundant); s = (AStack)calloc(nr_events, sizeof(TStack)); if(!s){ free(aux); free(action); return 0; } //Executam actiunile citite din fisierul de intrare while(fgets(action, MAX, fin)){ parse = strtok(action, " "); if(!strcmp(parse, "\n")) break; step++; //Executam instructiunea corespunzatoare if(!strcmp(parse, "start")){ parse = strtok(NULL, " "); identity = string_to_number(parse); parse = strtok(NULL, " \n"); priority = string_to_number(parse); ((TProces*)aux)->id = identity; ((TProces*)aux)->pr = priority; ((TProces*)aux)->time = step; //Introducem elementul in coada de prioritati IntrQ(&q, aux, sizeof(TProces), CmpProc); } if(!strcmp(parse, "wait")){ parse = strtok(NULL, " "); event = string_to_number(parse); parse = strtok(NULL, " \n"); identity = string_to_number(parse); //Extragem elementul din coada si il punem in stiva corespunzatoare aux2 = ExtrElQ(&q, identity, CmpProc); if(aux2) Push(&s[event], aux2, sizeof(TProces)); free(aux2); } if(!strcmp(parse, "event")){ parse = strtok(NULL, " \n"); event = string_to_number(parse); /*Extragem toate elementele din stiva asociata evenimentului si le punem inapoi in coada*/ while(s[event]){ aux2 = Pop(&s[event], sizeof(TProces)); IntrQ(&q, aux2, sizeof(TProces), CmpProc); free(aux2); } } if(!strcmp(parse, "end")){ parse = strtok(NULL, " \n"); identity = string_to_number(parse); //Extragem elementul din coada aux2 = ExtrElQ(&q, identity, CmpProc); free(aux2); } //Afisam elementele din coada si din stive pentru pasul curent fprintf(fout, "%d\n", step); AfisQ(q, fout); fprintf(fout, "\n"); for(i = 0; i < nr_events; i++) if(s[i]){ fprintf(fout, "%d: ", i); AfisS(s[i], fout); fprintf(fout, "\n"); } fprintf(fout, "\n"); } //Eliberam memoria si inchidem fisierele for(i = 0; i < nr_events; i++) DistrS(&s[i]); free(s); DistrQ(&q); free(aux); free(action); fclose(fin); fclose(fout); return 0; }