Advertisement
Guest User

Untitled

a guest
Apr 30th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.38 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct TipoAluno{
  5. int exigencia;
  6. int semestre;
  7. int ordem;
  8. struct TipoAluno *proximo;
  9. }TipoAluno;
  10.  
  11. typedef struct FilaAluno{
  12. TipoAluno *frente;
  13. TipoAluno *tras;
  14. }TipoFilaAluno;
  15.  
  16. typedef struct TipoQuarto{
  17. int conservacao;
  18. int semestres_alocado;
  19. struct TipoQuarto *proximo;
  20. }TipoQuarto;
  21.  
  22.  
  23. typedef struct FilaQuarto{
  24. TipoQuarto *inicio;
  25. TipoQuarto *fim;
  26. }TipoFilaQuarto;
  27.  
  28. void CriaFilaQuarto(TipoFilaQuarto *fila){
  29. fila->inicio = NULL;
  30. fila->fim = NULL;
  31. }
  32.  
  33. void InsereQuarto(int padrao,int semestres_alocado,TipoFilaQuarto *fila){
  34. TipoQuarto * NovoQuarto = (TipoQuarto*)malloc(sizeof(TipoQuarto));
  35. NovoQuarto->proximo = NULL;
  36. NovoQuarto->conservacao = padrao;
  37. NovoQuarto->semestres_alocado = semestres_alocado;
  38. if(fila->inicio == NULL){
  39. fila->inicio = NovoQuarto;
  40. fila->fim = NovoQuarto;
  41. }
  42. else{
  43. fila->fim->proximo = NovoQuarto;
  44. fila->fim = NovoQuarto;
  45. }
  46. }
  47.  
  48. void RetiraAluno(TipoFilaAluno *fila){
  49. TipoAluno* aux;
  50. aux = fila->frente;
  51. fila->frente=fila->frente->proximo;
  52. free(aux);
  53. }
  54.  
  55. void RetiraQuarto(TipoFilaQuarto *fila){
  56. TipoQuarto * aux;
  57. aux = fila->inicio;
  58. fila->inicio=fila->inicio->proximo;
  59. free(aux);}
  60. void PrintarFilaQuarto(TipoFilaQuarto *fila){
  61. TipoQuarto *auxiliar;
  62. int j=1;
  63. auxiliar = fila->inicio;
  64.  
  65. if(fila->inicio == NULL){
  66. printf("\nNenhum apartamento disponivel\n");
  67. }
  68.  
  69. else{
  70. while(auxiliar!= NULL){
  71. printf("\nPadrao do apartamento %d: %d\n",j,auxiliar->conservacao);
  72. printf("Quantidade de semestres indisponivel:%d\n",auxiliar->semestres_alocado);
  73. j++;
  74. auxiliar = auxiliar->proximo;
  75. }
  76. }
  77. }
  78.  
  79. void CriaFilaAluno(TipoFilaAluno *fila){
  80. fila->frente = NULL;
  81. fila->tras = NULL;
  82. }
  83.  
  84. void InsereAluno(int padrao,int semestres,int ordem,TipoFilaAluno *fila){
  85. TipoAluno *NovoAluno = (TipoAluno*)malloc(sizeof(TipoAluno));
  86. NovoAluno->ordem = ordem;
  87. NovoAluno->proximo = NULL;
  88. NovoAluno->exigencia = padrao;
  89. NovoAluno->semestre = semestres;
  90. if(fila->frente == NULL){
  91. fila->frente = NovoAluno;
  92. fila->tras = NovoAluno;
  93. }
  94. else{
  95. fila->tras->proximo = NovoAluno;
  96. fila->tras = NovoAluno;
  97. }
  98. }
  99.  
  100. void PrintarFilaAluno(TipoFilaAluno *fila){
  101. TipoAluno *auxiliar;
  102. int j=1;
  103. auxiliar = fila->frente;
  104. if(fila->frente == NULL){
  105. printf("Fila de Alunos Vazia\n");
  106. }
  107. else{
  108. while(auxiliar!= NULL){
  109. printf("\nPadrao minimo exigido pelo Aluno %d: %d\n",auxiliar->ordem,auxiliar->exigencia);
  110. printf("Numero de semestre que o Aluno %d cursou: %d\n",auxiliar->ordem,auxiliar->semestre);
  111. auxiliar = auxiliar->proximo;
  112. j++;
  113. }
  114. }
  115. }
  116. int AlocaSemestre(int tamanho_fila_de_alunos,int tamanho_fila_de_quartos,TipoFilaAluno *F_aluno,TipoFilaQuarto * F_quarto,TipoFilaAluno* F_alunoAlocada,TipoFilaQuarto* F_quartoAlocada)
  117. {
  118. TipoQuarto * AUX;
  119. int exigencia,conservacao,semestres,i=0,j=0,k=0,l=0,tamanho=0,ordem;
  120. while(i < tamanho_fila_de_alunos)
  121. {
  122. for(j=0;j < tamanho_fila_de_quartos;)
  123. {
  124. k=0;l=0;
  125. conservacao = F_quarto->inicio->conservacao;
  126. exigencia = F_aluno->frente->exigencia;
  127. semestres = F_aluno->frente->semestre;
  128. ordem = F_aluno->frente->ordem;
  129. if(F_aluno->frente->exigencia <= F_quarto->inicio->conservacao)
  130. {
  131.  
  132. RetiraAluno(F_aluno);
  133. InsereAluno(exigencia,semestres,ordem,F_alunoAlocada);
  134. RetiraQuarto(F_quarto);
  135. InsereQuarto(conservacao,semestres,F_quartoAlocada);
  136. i++;
  137. tamanho_fila_de_quartos--;
  138. if(tamanho_fila_de_quartos == 0){
  139. k=2;
  140. break;
  141.  
  142. }
  143. while(l < tamanho_fila_de_quartos - j)
  144. {
  145. conservacao = F_quarto->inicio->conservacao;
  146. InsereQuarto(conservacao,0,F_quarto);
  147. RetiraQuarto(F_quarto);
  148. l++;
  149. }
  150. k = 1;
  151.  
  152. break;
  153. }
  154.  
  155. else
  156. {
  157. conservacao = F_quarto->inicio->conservacao;
  158. InsereQuarto(conservacao,0,F_quarto);
  159. RetiraQuarto(F_quarto);
  160. j++;
  161. }
  162.  
  163.  
  164.  
  165. }
  166.  
  167. if(k==0) /*Com k=0, nao foi achado nenhum quarto para o aluno*/
  168. {
  169. exigencia = F_aluno->frente->exigencia;
  170. semestres = F_aluno->frente->semestre;
  171. ordem = F_aluno->frente->ordem;
  172. RetiraAluno(F_aluno);
  173. InsereAluno(exigencia,semestres,ordem,F_aluno);
  174. i++;
  175. }
  176. if(k==2) /* caso os quartos acabem ele ordenara a fila de alunos*/
  177. { l=0;
  178. while(l <tamanho_fila_de_alunos-i)
  179. {
  180. exigencia = F_aluno->frente->exigencia;
  181. semestres = F_aluno->frente->semestre;
  182. ordem = F_aluno->frente->ordem;
  183. RetiraAluno(F_aluno);
  184. InsereAluno(exigencia,semestres,ordem,F_aluno);
  185. i++;}
  186. }
  187. }
  188.  
  189.  
  190. AUX = F_quartoAlocada->inicio; /* a variavel "tamanho" representa quantos quartos a fila de quartos alocadas possui*/
  191. while(AUX != NULL){
  192. AUX = AUX->proximo;
  193. tamanho++;}
  194.  
  195.  
  196.  
  197.  
  198. return tamanho;
  199. }
  200. int main(){
  201. TipoFilaAluno FilaDeAlunos,FilaDeAlunosAlocada;
  202. TipoAluno* AUX;
  203. TipoQuarto* AUX2;
  204. TipoFilaQuarto FilaDeQuartos,FilaDeQuartosAlocada;
  205. CriaFilaAluno(&FilaDeAlunos);
  206. CriaFilaAluno(&FilaDeAlunosAlocada);
  207. CriaFilaQuarto(&FilaDeQuartos);
  208. CriaFilaQuarto(&FilaDeQuartosAlocada);
  209.  
  210. int tamanho_fila_de_alunos=0,tamanho_fila_de_quartos=0,tamanho_fila_de_quartos_alocada=0,padrao;
  211. int padrao_exigido,quantidade_semestres,tempo=0;
  212. int i=0,j=0;
  213. printf("Digite o tamanho da fila de espera de Alunos: ");
  214. scanf("%d",&tamanho_fila_de_alunos);
  215.  
  216. for(i=0;i<tamanho_fila_de_alunos;i++){
  217. printf("\nQual o padrao minimo exigido pelo aluno %d: \n",(i+1));
  218. scanf("%d",&padrao_exigido);
  219. printf("\nQuantos semestres o aluno %d vai ficar?\n",(i+1));
  220. scanf("%d",&quantidade_semestres);
  221. InsereAluno(padrao_exigido,quantidade_semestres,i+1,&FilaDeAlunos);
  222. }
  223.  
  224. printf("Digite o tamanho da fila de quartos a serem usados: ");
  225. scanf("%d",&tamanho_fila_de_quartos);
  226.  
  227. for(i=0;i<tamanho_fila_de_quartos;i++){
  228. printf("Qual o padrao do quarto %d: ",(i+1));
  229. scanf("%d",&padrao);
  230.  
  231. InsereQuarto(padrao,0,&FilaDeQuartos);
  232. }
  233.  
  234. printf("\n----fila de alunos-----------\n");
  235. PrintarFilaAluno(&FilaDeAlunos);
  236. printf("\n---fila de quartos------------\n");
  237. PrintarFilaQuarto(&FilaDeQuartos);
  238. tamanho_fila_de_quartos_alocada = AlocaSemestre(tamanho_fila_de_alunos,tamanho_fila_de_quartos,&FilaDeAlunos,&FilaDeQuartos,&FilaDeAlunosAlocada,&FilaDeQuartosAlocada);
  239.  
  240.  
  241.  
  242. /*AUX = FilaDeAlunos.frente;
  243. while(FilaDeAlunos.frente != NULL)
  244. { if(FilaDeAlunos.frente->exigencia >= 5)
  245. {
  246. FilaDeAlunos.frente->exigencia = FilaDeAlunos.frente->exigencia-5;
  247. }
  248. else{FilaDeAlunos.frente->exigencia =0;}
  249.  
  250. FilaDeAlunos.frente = FilaDeAlunos.frente->proximo;
  251. }
  252. FilaDeAlunos.frente = AUX;
  253.  
  254.  
  255. i=0;
  256. while(i<tamanho_fila_de_quartos_alocada && tamanho_fila_de_quartos_alocada != 0){
  257. padrao = FilaDeQuartosAlocada.inicio->conservacao;
  258. quantidade_semestres = FilaDeQuartosAlocada.inicio->semestres_alocado;
  259. if(FilaDeQuartosAlocada.inicio->semestres_alocado == 0)
  260. {
  261. InsereQuarto(padrao,0,&FilaDeQuartos);
  262. RetiraQuarto(&FilaDeQuartosAlocada);
  263. tamanho_fila_de_quartos_alocada--;
  264. }
  265. else{
  266.  
  267. InsereQuarto(padrao,quantidade_semestres,&FilaDeQuartosAlocada);
  268. RetiraQuarto(&FilaDeQuartosAlocada);
  269. i++;
  270.  
  271.  
  272. }
  273.  
  274. }
  275. AUX2 = FilaDeQuartosAlocada.inicio;
  276. while(FilaDeQuartosAlocada.inicio != NULL)
  277. {
  278. FilaDeQuartosAlocada.inicio->semestres_alocado--;
  279. FilaDeQuartosAlocada.inicio= FilaDeQuartosAlocada.inicio->proximo;
  280. }
  281. FilaDeQuartosAlocada.inicio = AUX2;
  282. tempo++;*/
  283.  
  284.  
  285. printf("\n-----fila de alunos novo----------\n");
  286. PrintarFilaAluno(&FilaDeAlunos);
  287. printf("\n------fila de quartos novo---------\n");
  288. PrintarFilaQuarto(&FilaDeQuartos);
  289. printf("\n------fila de alunos alocados---------\n");
  290. PrintarFilaAluno(&FilaDeAlunosAlocada);
  291. printf("\n----fila de quartos alocados-----------\n");
  292. PrintarFilaQuarto(&FilaDeQuartosAlocada);
  293. printf("O tempo foi de:%d",tempo);
  294.  
  295.  
  296.  
  297. return 0;
  298. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement