Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/04/2013, 03:36
AlanFC
 
Fecha de Ingreso: septiembre-2011
Mensajes: 42
Antigüedad: 13 años, 2 meses
Puntos: 3
Problema con struct y punteros. (y más :P)

Cita:
Ejercicio:
Se debe realizar un algoritmo que tome una estructura de datos conformada
por tres enteros, llamados ataque (a), defensa (b) y agilidad (c), las
cuales representan las caracteristicas de un personaje de un videojuego.
Para calcular la Fuerza Total de un personaje,se usa la siguiente fórmula:
Fuerza Total(a, b, c) = (2a · 3b) · 7c
Suponiendo que la entrada del algoritmo es a través de un archivo, en
donde esta estructura se repite n veces dentro de una línea, y cada línea
corresponde a una secuencia distinta de estructuras. Esto se ilustra a continuación.
Cita:
input1.txt
(4 5 6)(7 5 3)(4 5 8)(7 4 1)...(a b c)
(1 5 1)(7 2 2)(1 5 6)(7 3 1)...(a b c)
Observar que dentro de cada par de paréntesis “()” se encuentran las tres
variables de la estructura.
El objetivo del algoritmo es generar una secuencia donde se encuentren
las Fuerzas Totales de cada personaje representado en este archivo, línea a
línea.
Los resultados deben escribirse en un archivo de salida, como se muestra
a continuación.
Cita:
output1.txt
5040 4410 6720 1176 ... 2 · a · 3 · b · 7 · c
210 1176 1260 882 ... 2 · a · 3 · b · 7 · c
Mi codigo:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct {
  5.         int ataque;
  6.         int defensa;
  7.         int agilidad;
  8. } Personaje;
  9.  
  10. void guardar_pj(FILE *fp, Personaje *p1, Personaje *p2, int cont){
  11.      char pj[6];
  12.      p2 = (Personaje*) realloc(p1, cont*sizeof(Personaje));
  13.      if (p2!=NULL) p1=p2;
  14.      else printf("%d", 5);
  15.      fgets(pj,6,fp);
  16.      p1[cont-1].ataque = (int) pj[0];
  17.      p1[cont-1].defensa = (int) pj[2];
  18.      p1[cont-1].agilidad = (int) pj[4];
  19. }
  20.          
  21. int calcular_fuerza_total (Personaje *p){
  22.     return (2*p->ataque*3*p->defensa)*7*p->agilidad;
  23. }
  24.  
  25. int main(){
  26.     FILE *fp;
  27.     Personaje *Pjs, *Pjs2=NULL;
  28.     int line=1, cont=0;
  29.     char caracter;
  30.     fp = fopen("input.txt", "r");
  31.     while (!feof(fp)){
  32.           caracter = fgetc(fp);
  33.           if (caracter == '\n') line++;
  34.           else if (caracter == '('){
  35.                cont++;
  36.                guardar_pj(fp, &Pjs, &Pjs2, cont);
  37.           }
  38.     }
  39.     printf("%d", Pjs[1].ataque);
  40.     getch();
  41. }

Bueno, aun no logro guardar los datos en el arreglo de Struct, que es lo malo del codigo? Estuve leyendo unas cosas sobre struct, memoria dinamica y arreglos, "creo" haber seguido los mismos pasos de los ejemplos, pero ni cerca esta de funcionar.

Gracias de antemano.
__________________
"Porque nada se...
quiero saberlo todo"