fork(1) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct concurso
  6. {
  7. char nome[30];
  8. int matri;
  9. int prov1;
  10. int prov2;
  11. int prov3;
  12. } con;
  13.  
  14. typedef struct clasificados
  15. {
  16. char n[30];
  17. int m;
  18. int pont;
  19. } cla;
  20.  
  21. void ordena(con* co,int tam)
  22. {
  23. cla *conc=(cla*)malloc(sizeof(cla)*tam);
  24. cla aux;
  25. int i,j=0;
  26. for(i=0; i<tam; i++)
  27. {
  28. if((co[i].prov1>40)&&(co[i].prov2>40)&&(co[i].prov3>40)&&(co[i].prov1+co[i].prov2+co[i].prov3>=150))
  29. {
  30. conc[j].pont=co[i].prov1+co[i].prov2+co[i].prov3;
  31. strcpy(conc[j].n,co[i].nome);
  32. conc[j].m=co[i].matri;
  33. j++;
  34. }
  35. }
  36. //O PROBLEMA ESTA DAQUI PARA BAIXO, AQUI QUERO ORDENAR OS DADOS DA STRUCT CLASSIFCADOS, ATE QUE ORDENA, MAIS O PRIMEIRO ELEMENTO SAI COMO LIXO DE MEMORIA
  37. for( i=0; i<j; i++ )
  38. {
  39. if( conc[i].pont < conc[i+1].pont )
  40. {
  41. aux.pont = conc[i+1].pont;
  42. conc[i+1].pont = conc[i].pont;
  43. conc[i].pont = aux.pont;
  44.  
  45. strcpy(aux.n,conc[i+1].n);
  46. strcpy(conc[i+1].n,conc[i].n);
  47. strcpy(conc[i].n, aux.n);
  48.  
  49. aux.m = conc[i+1].m;
  50. conc[i+1].m = conc[i].m;
  51. conc[i].m = aux.m;
  52. i=-1;
  53. }
  54. }
  55.  
  56. printf("\n\t\t------Classificados-------\n");
  57. printf("\nPOSICAO\t\tMATRICULA\tCANDIDATO\tNOTA\n");
  58. for( i=0; i<j; i++ )
  59. {
  60. printf("%d\t\t%d\t\t%s\t\t%3d\n",i+1,conc[i].m,conc[i].n,conc[i].pont);
  61. }
  62. free(conc);
  63. }
  64.  
  65. int main()
  66. {
  67. int i,j;
  68. int tam;
  69. printf("Digite o numero de candidatos: ");
  70. scanf("%d",&tam);
  71. con *c=(con*)malloc(sizeof(con)*tam);
  72.  
  73. for(i=0; i<tam; i++)
  74. {
  75. printf("Digite o nome do candidato %d: ",i+1);
  76. scanf(" %[^\n]s",c[i].nome);
  77.  
  78. printf("Digite a matricula do candidato %s: ",c[i].nome);
  79. scanf("%d",&c[i].matri);
  80.  
  81. printf("Digite a nota 1 do candidato %s: ",c[i].nome);
  82. scanf("%d",&c[i].prov1);
  83.  
  84. printf("Digite a nota 2 do candidato %s: ",c[i].nome);
  85. scanf("%d",&c[i].prov2);
  86.  
  87. printf("Digite a nota 3 do candidato %s: ",c[i].nome);
  88. scanf("%d",&c[i].prov3);
  89. }
  90. ordena(c,tam);
  91.  
  92. free(c);
  93.  
  94. return 0;
  95. }
  96.  
Success #stdin #stdout 0s 10304KB
stdin
3
Joao
123
55
52
90
Serafim
241
49
87
51
Antonio
342
87
92
88
stdout
Digite o numero de candidatos: Digite o nome do candidato 1: Digite a matricula do candidato Joao: Digite a nota 1 do candidato Joao: Digite a nota 2 do candidato Joao: Digite a nota 3 do candidato Joao: Digite o nome do candidato 2: Digite a matricula do candidato Serafim: Digite a nota 1 do candidato Serafim: Digite a nota 2 do candidato Serafim: Digite a nota 3 do candidato Serafim: Digite o nome do candidato 3: Digite a matricula do candidato Antonio: Digite a nota 1 do candidato Antonio: Digite a nota 2 do candidato Antonio: Digite a nota 3 do candidato Antonio: 
		------Classificados-------

POSICAO		MATRICULA	CANDIDATO	NOTA
1		342		Antonio		267
2		123		Joao		197
3		241		Serafim		187