Marcelo Posted December 30, 2012 at 10:13 PM Report #489037 Posted December 30, 2012 at 10:13 PM (edited) Boas pessoal tou com uns problemas na elaboração deste programa: Desenvolver um programa designado ficha02exer08.c no qual são criados inicialmente dois processos filho. O primeiro processo irá escrever num ficheiro ficha02exer08-aleatory.dat, números aleatórios localizados entre dois valores fornecidos ao programa através da linha de comando. A escrita dos números deverá ser separada por 1s. O segundo processo calculará recursivamente a média dos números produzidos e escreverá o resultado no ficheiro ficha02exer08-recursive.dat. O cálculo deverá ser separado por 1s. Também fornecida através da linha de comando será a duração total do programa. Quando este tempo terminar o processo pai deverá criar o terceiro e quarto processos com a função indicada em baixo e em seguida terminar. O comando para correr o programa durante 10 s e considerando os valores entre 20 e 30 será: ./ ficha02exer08 10 20 30 O conteúdo de cada ficheiro deverá ser observado em tempo real através do comando “tail -f”. O terceiro processo deverá com base nos dados presentes nos ficheiros ficha02exer08-aleatory.dat e ficha02exer08-recursive.dat mostrar em gráfico os resultados obtidos. O quarto processo deverá então recorrer ao AWK para juntar num só ficheiro ficha02exer08-final.dat os resultados obtidos nos dois ficheiros.dat criados anteriormente. Edited December 30, 2012 at 10:15 PM by Marcelo
apocsantos Posted December 30, 2012 at 10:15 PM Report #489038 Posted December 30, 2012 at 10:15 PM Boa noite, E os problemas são quais, em concreto ? Cordiais cumprimentos, Apocsantos "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"
Marcelo Posted December 30, 2012 at 10:20 PM Author Report #489040 Posted December 30, 2012 at 10:20 PM (edited) Ja fiz isto mas ainda nao tenho o resultado esperado...Ajudem.. #include <math.h> #include <sys/time.h> #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// // função para gerar numeros automaticos int get_random(int min,int max) { return min + (int)( rand() / (double)RAND_MAX * (max-min)); } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// int filho_1(int argc, char **argv){ int i, t, m, tempo, min, max, soma; FILE *a, *b; tempo=atoi(argv[1]); a=fopen("ficha02exer08-recursive.dat","w"); b=fopen("ficha02exer08-aleatory.dat","w"); for (i=0;i<=tempo;i++){ min = atoi(argv[2]); max = atoi(argv[3]); t=get_random (min,max); soma=soma+t; fprintf(b,"%i \n",t ); m++; } fclose(a); fclose(b); } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// int filho_2(){ int t, m, soma, avg; FILE *a, *b; a=fopen("ficha02exer08-recursive.dat","w"); b=fopen("ficha02exer08-aleatory.dat","a"); for(t=1;t<=m;t++){ avg = soma / m; fprintf(a,"%i\n",avg); } fclose(a); fclose(b); } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// int filho_3(){ int m; FILE *a, *b; a=fopen("ficha02exer08-recursive.dat","w"); b=fopen("ficha02exer08-aleatory.dat","a"); system("awk '{ for(l=0;l<=m;l++) { a=$l;getline;printf \"%s\\n\" ,a,$1 } }' ficha02exer08-aleatory.dat > ficha02exer08-final.dat"); system("awk '{ for(l=0;l<=m;l++) { a=$l;getline$1;printf \"%s\\n\" ,a,$1 } }' ficha02exer08-recursive.dat > ficha02exer08-final.dat"); fclose(a); fclose(b); } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// int filho_4(){ int i, t,tempo; FILE *a,*b,*c; a=fopen("ficha02exer08-recursive.dat","r"); b=fopen("ficha02exer08-aleatory.dat","r"); fclose(a); fclose(b); system("awk '{ for(i=0;i<=tempo;i++) { a=$l;getline;printf \"%s\\n\" ,a,$1 } }' ficha02exer08-aleatory.dat > x1.dat"); system("awk '{ for(t=0;t<=10;t++) { a=$l;getline$1;printf \"%s\\n\" ,a,$1 } }' ficha02exer08-recursive.dat > y2.dat"); c=fopen("gnuscript.dat","w"); fprintf(c,"plot \"x1.dat\" title \"Nº aleatory\",\"y2.dat\" title \"Media\"\npause -1\n"); fclose(c); system("gnuplot \"gnuscript.dat\""); } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// int main(){ pid_t filho1,filho2,filho3,filho4; system("clear"); filho1 = fork(); switch(filho1){ case -1: printf("\nErro ao criar filho 1!\n"); break; case 0: printf("\nA criar filho 1...Aguarde!\n"); sleep(2); int filho_1(int argc, char **argv); exit(0); break; default: wait(); break; } filho2 = fork(); switch(filho2){ case -1: printf("\nErro ao criar filho 2!\n"); break; case 0: printf("\nA criar filho 2...Aguarde!\n"); sleep(2); filho_2(); exit(0); break; default: wait(); break; } filho3 = fork(); switch(filho3){ case -1: printf("\nErro ao criar filho 3!\n"); break; case 0: printf("\nA criar filho 3...Aguarde!\n"); sleep(1); filho_3(); exit(0); break; default: wait(); break; } filho4 = fork(); switch(filho4){ case -1: printf("\nErro ao criar filho 4!\n"); break; case 0: printf("\nA criar filho 4...Aguarde!\n"); sleep(1); filho_4(); exit(0); break; default: wait(); break; } } Isto compila faz tudo certo mas nao me mostra o grafico.. Edited December 30, 2012 at 10:29 PM by pmg Falta LP
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now