Advertisement
melissaUllua

LAPUTAMADRE

Sep 24th, 2019
490
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct
  6. {
  7. int nroParcial;
  8. char dni[9];
  9. char asignatura[20];
  10. float Nota; ///> 0 && =<10
  11. } Examen;
  12.  
  13. typedef struct
  14. {
  15. Examen e;
  16.  
  17. struct nodo2 * anterior;
  18. struct nodo2 * siguiente;
  19.  
  20. } nodo2;
  21.  
  22. nodo2 * inicLista ();
  23. nodo2 * listaCreada (nodo2 * lista);
  24. nodo2 * crearNodo(Examen ex);
  25. nodo2 * agregarAlPrincipio (nodo2 * lista, nodo2 * nuevo);
  26. nodo2 * recorrerYMostrar (nodo2 * lista);
  27. Examen cargaExamen (char materia[], char dni[], int nroParcial, float nota);
  28. nodo2 * eliminarDni (nodo2 * lista, char docu[]);
  29. int ExisteDni (nodo2 * lista, char asignatura[], char dni[]);
  30. float promedioNotas (nodo2* lista, char materia[], char dni[]);
  31. int cuentaAlumnos (nodo2* lista, char materia[]);
  32.  
  33. int main()
  34. {
  35. nodo2* lista = inicLista();
  36. nodo2 * nuevo;
  37. Examen stExamen;
  38. int opcion, flag =0, cont =0;
  39. float prom =0;
  40. lista = listaCreada(lista);
  41. printf("\nINGRESE UN INCISO PARA REVISAR: ");
  42. scanf("%d", &opcion);
  43.  
  44. switch (opcion)
  45. {
  46. case 1:
  47. printf("\nLO QUE EL PUBLICO QUIERE: FUNCION ELIMINAR DNI\n");
  48. recorrerYMostrar(lista);
  49. lista = eliminarDni(lista, "00000013");
  50. lista = eliminarDni(lista, "00000008");
  51. printf("\n\n NUEVA LISTA: \n");
  52. recorrerYMostrar(lista);
  53. break;
  54. case 2:
  55. printf("\n(Recursivo) Verificar si existe un determinado DNI en una asignatura dada\n");
  56. flag = ExisteDni(lista, "matematica", "45612857");
  57. if (flag == 1)
  58. {
  59. printf("\n El alumno cursa la materia");
  60. }
  61. else
  62. printf("\n El alumno no cursa la materia");
  63. break;
  64. case 3:
  65. printf("\nRealizar un algoritmo que informe el promedio de nota por DNI de una asignatura en particular\n");
  66. prom = promedioNotas(lista, "matematica", "45612358");
  67. printf("\n\nEL PROMEDIO ES: %2.f", prom);
  68. break;
  69. case 4:
  70. printf("\n (Recursivo) Mostrar todos los nodos con DNI, Nro. parcial y Nota de una asignatura en particular \n");
  71. mostrarPorAsignatura_recursivo(lista, "matematica");
  72. break;
  73. case 5:
  74. printf("\n (Recursivo) Devolver la cantidad de alumnos(DNI) de una asignatura en particular.\n");
  75. cont = cuentaAlumnos(lista, "matematica");
  76. printf("\n\n %d ALUMNOS ESTUDIAN DICHA ASIGNATURA", cont);
  77. break;
  78.  
  79. default:
  80. printf("\n\nOPCION INCORRECTA.");
  81. }
  82. return 0;
  83. }
  84.  
  85. nodo2 * inicLista ()
  86. {
  87. return NULL;
  88. }
  89.  
  90. nodo2 * crearNodo (Examen ex)
  91. {
  92. nodo2 * aux= malloc(sizeof(nodo2));
  93. aux->e = ex;
  94. aux->anterior = NULL;
  95. aux->siguiente =NULL;
  96.  
  97. return aux;
  98. }
  99.  
  100. nodo2 * agregarAlPrincipio (nodo2 * lista, nodo2 * nuevo)
  101. {
  102. if (lista == NULL)
  103. {
  104. lista = nuevo;
  105. }
  106. else
  107. {
  108. nuevo->siguiente = lista;
  109. lista->anterior = nuevo;
  110. lista = nuevo;
  111. }
  112. return lista;
  113. }
  114.  
  115. Examen cargaExamen (char materia[], char dni[], int nroParcial, float nota)
  116. {
  117. Examen stEx;
  118.  
  119. fflush(stdin);
  120. strcpy(stEx.asignatura, materia);
  121. fflush(stdin);
  122. strcpy(stEx.dni, dni);
  123. stEx.nroParcial = nroParcial;
  124. stEx.Nota = nota;
  125.  
  126. return stEx;
  127. }
  128. void mostrarExamen (Examen ex)
  129. {
  130.  
  131. printf("\nMATERIA: %s", ex.asignatura);
  132. printf("\nDNI: %s", ex.dni);
  133. printf("\nNRO DE PARCIAL: %d", ex.nroParcial);
  134. printf("\nNOTA: %.2f", ex.Nota);
  135. }
  136.  
  137. nodo2 * recorrerYMostrar(nodo2 * lista)
  138. {
  139. nodo2 * seguidora = lista;
  140.  
  141. while (seguidora != NULL)
  142. {
  143. mostrarExamen(seguidora->e);
  144. seguidora = seguidora->siguiente;
  145.  
  146. }
  147. }
  148. nodo2 * eliminarDni (nodo2 * lista, char docu[])
  149. {
  150. nodo2 * seguidora = lista;
  151. nodo2 * aux;
  152. nodo2 * ante;
  153. Examen stEx;
  154.  
  155.  
  156. while (seguidora != NULL)
  157. {
  158. stEx = seguidora->e;
  159.  
  160. if (strcmp(stEx.dni, docu) ==0)
  161. {
  162. if (seguidora->anterior != NULL && seguidora->siguiente != NULL)
  163. {
  164.  
  165. ante = seguidora->anterior;
  166. aux = seguidora;
  167. seguidora = seguidora->siguiente;
  168. ante->siguiente= seguidora;
  169. seguidora->anterior = ante;
  170. free(aux);
  171. }
  172. else if (seguidora->anterior == NULL)
  173. {
  174. aux = seguidora;
  175. lista = seguidora->siguiente;
  176. lista->anterior = NULL;
  177. free(aux);
  178. seguidora = seguidora->siguiente;
  179. }
  180. else if (seguidora->siguiente == NULL)
  181. {
  182. aux = seguidora;
  183. ante = seguidora->anterior;
  184. ante->siguiente = NULL;
  185. free(aux);
  186. seguidora = seguidora->siguiente;
  187. }
  188. }
  189. else
  190. seguidora = seguidora->siguiente;
  191. }
  192. return lista;
  193. }
  194.  
  195. int ExisteDni (nodo2 * lista, char asignatura[], char dni[]) ///probar que onda cuando no
  196. {
  197. int flag =0;
  198. Examen stEx;
  199. if ((lista!= NULL) && (flag ==0))
  200. {
  201. stEx = lista->e;
  202.  
  203. if ((strcmpi(asignatura, stEx.asignatura)==0) && (strcmpi(dni, stEx.dni)==0))
  204. {
  205. flag = 1;
  206. }
  207. else
  208. {
  209. flag = ExisteDni(lista->siguiente, asignatura, dni);
  210. }
  211. }
  212. return flag;
  213. }
  214.  
  215. float promedioNotas (nodo2* lista, char materia[], char dni[]) ///esta en la foto
  216. {
  217. float promedio =0, acum=0;
  218. int cont =0;
  219. nodo2 * seguidora = lista;
  220. Examen stEx;
  221. while (seguidora != NULL)
  222. {
  223. stEx = seguidora->e;
  224. if ((strcmp(dni, stEx.dni) == 0) && (strcmpi(materia, stEx.asignatura) ==0))
  225. {
  226. cont++;
  227. acum =stEx.Nota+acum;
  228. }
  229. seguidora= seguidora->siguiente;
  230. }
  231. if (cont > 0)
  232. {
  233. promedio = acum/cont;
  234. }
  235. return promedio;
  236. }
  237.  
  238. int cuentaAlumnos (nodo2* lista, char materia[])
  239. {
  240. int cuenta =0;
  241. Examen stEx;
  242. if (lista != NULL)
  243. {
  244. stEx = lista->e;
  245. if (strcmpi(stEx.asignatura, materia)==0)
  246. {
  247.  
  248. if (stEx.nroParcial == 1)
  249. {
  250. cuenta = cuenta+1;
  251. }
  252. }
  253. cuenta = cuentaAlumnos(lista->siguiente, materia) + cuenta;
  254. }
  255. return cuenta;
  256. }
  257.  
  258. nodo2 * listaCreada (nodo2 * lista)
  259. {
  260. nodo2 * nuevo;
  261. Examen stExamen;
  262. stExamen = cargaExamen("matematica", "00000013", 1, 9);
  263. nuevo = crearNodo(stExamen);
  264. lista = agregarAlPrincipio(lista, nuevo);
  265. stExamen = cargaExamen("matematica", "00000013", 2, 7);
  266. nuevo = crearNodo(stExamen);
  267. lista = agregarAlPrincipio(lista, nuevo);
  268. stExamen = cargaExamen("matematica", "00000012", 1, 9);
  269. nuevo = crearNodo(stExamen);
  270. lista = agregarAlPrincipio(lista, nuevo);
  271. stExamen = cargaExamen("programacion", "00000011", 1, 5);
  272. nuevo = crearNodo(stExamen);
  273. lista = agregarAlPrincipio(lista, nuevo);
  274. stExamen = cargaExamen("estadistica", "00000010", 1, 7);
  275. nuevo = crearNodo(stExamen);
  276. lista = agregarAlPrincipio(lista, nuevo);
  277. stExamen = cargaExamen("programacion", "00000009", 1, 4);
  278. nuevo = crearNodo(stExamen);
  279. lista = agregarAlPrincipio(lista, nuevo);
  280. stExamen = cargaExamen("sistemas", "00000008", 2, 9);
  281. nuevo = crearNodo(stExamen);
  282. lista = agregarAlPrincipio(lista, nuevo);
  283. stExamen = cargaExamen("laboratorio", "00000007", 1, 2);
  284. nuevo = crearNodo(stExamen);
  285. lista = agregarAlPrincipio(lista, nuevo);
  286. stExamen = cargaExamen("matematica", "00000006", 1, 8);
  287. nuevo = crearNodo(stExamen);
  288. lista = agregarAlPrincipio(lista, nuevo);
  289. stExamen = cargaExamen("sistemas", "00000005", 2, 6);
  290. nuevo = crearNodo(stExamen);
  291. lista = agregarAlPrincipio(lista, nuevo);
  292. stExamen = cargaExamen("estadistica", "00000004", 1, 7);
  293. nuevo = crearNodo(stExamen);
  294. lista = agregarAlPrincipio(lista, nuevo);
  295. stExamen = cargaExamen("programacion", "00000003", 3, 10);
  296. nuevo = crearNodo(stExamen);
  297. lista = agregarAlPrincipio(lista, nuevo);
  298. stExamen = cargaExamen("laboratorio", "00000002", 2, 3);
  299. nuevo = crearNodo(stExamen);
  300. lista = agregarAlPrincipio(lista, nuevo);
  301. stExamen = cargaExamen("estadistica", "00000001", 1, 4);
  302. nuevo = crearNodo(stExamen);
  303. lista = agregarAlPrincipio(lista, nuevo);
  304.  
  305.  
  306. return lista;
  307. }
  308.  
  309. void mostrarStruct(Examen stEx)
  310. {
  311. printf("\n\nASIGNATURA: %s", stEx.asignatura);
  312. printf("\n\nDNI: %s", stEx.dni);
  313. printf("\n\nNUMERO DE PARCIAL: %d", stEx.nroParcial);
  314. printf("\n\nNOTA DE PARCIAL: %2.f\n", stEx.Nota);
  315. }
  316.  
  317. void mostrarPorAsignatura_recursivo (nodo2 * lista, char asignatura[])
  318. {
  319. Examen stEx;
  320.  
  321. if (lista!= NULL)
  322. {
  323. stEx = lista->e;
  324. if (strcmpi(stEx.asignatura, asignatura)==0)
  325. {
  326. mostrarStruct(stEx);
  327. }
  328.  
  329. mostrarPorAsignatura_recursivo(lista->siguiente, asignatura);
  330. }
  331. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement