UTNianos

Versión completa: [PEDIDO] final info 1 07/02/2017
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
buenas alguno tiene le final de info 1 que tomaron la semana pasada ?
una imagen o los temas serviria
y una duda, dejan leer el final y levantarse si ven que es muy dificil ? me dijeron que en algunas materias pasa
saludos
Buenas noches,
Se tomo lista doblemente enlazada y puntero a función.
En informática I al menos no se puede ver el examen y levantarse!

Saludos!
fer
Te adjunto fotos del final y ya que estoy pregunto por el punto 2 que no me quedo claro, se refiere a hacer las funciones que llamas por referencia en el punto 1? y tampoco me quedo claro cuando tengo que usar la funcion pfun2.
Creo que si, igual deci que no me presente porque en los dos años que la hice nunca explicaron puntero a funcion
Me presento mañana ojala que no lo tomen
Te adjunto un video sobre punteros a funcion que me parecio practico, y mi resolucion de este final no se si esta bien, igual hay un final muy parecido tomado el 23-2-16, por no decir el mismo.
https://www.youtube.com/watch?v=Sm6_lQMJ5Lk



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int extract(ST_XYZ **P, ST_XYZ **Q, ST_DAT **sp, void *key, int(*pfun1)(ST_DAT *, void *), void(*pfun2)(ST_DAT *));
int read_param(char *sFile, char *sSec, char *sPar, char *sRet,int ilen);
int comp(ST_DAT *st, void *key);
void eliminar(ST_DAT *st);

typedef struct
{
char *sx;
int val, code, qtty;
char abc[20];
}ST_DAT;

typedef struct xyz
{
ST_DAT *st;
struct xyz *sig,*ant;
}ST_XYZ;

int main (int argc, char **argv)
{
return 0;
}

int extract (ST_XYZ **P, ST_XYZ **Q, ST_DAT **sp, void *key, int(*pfun1)(ST_DAT *, void *), void(*pfun2)(ST_DAT *))
{
ST_XYZ *aux = *Q;
*sp = NULL;
if(pfun1(aux->st, key) == 1)
{
aux->ant->sig = NULL;
*Q = aux->ant;
*sp = aux->st;
pfun2(aux->st);
free(aux);

return 1;
}

aux = *P;
if(pfun1(aux->st, key) == 1)
{
aux->sig->ant = NULL;
*P = aux->sig;
*sp = aux->st;
pfun2(aux->st);
free(aux);

return 1;
}
while(pfun1(aux->st, key) == 0 && aux->sig != NULL)
{
aux=aux->sig;
}
if(pfun1(aux->st, key) == 1)
{
aux->sig->ant=aux->ant;
aux->ant->sig=aux->sig;
*sp = aux->st;
pfun2(aux->st);
free(aux);

return 1;
}

return 0;
}
int read_param (char *sFile, char *sSec, char *sPar, char *sRet,int ilen)
{
FILE *file;
int i, s, j=0, flag=0;
char buffer[1024];
//asumo que por renglon hay 1024 caracteres como maximo, si no habria que hacerlo con memoria dinamica.

file = fopen(sFile,"r");
if(file == NULL)
{
return -1;
}
i = strlen(sPar);
i--;

while(!feof(file))
{
fgets(buffer, 1024, file);
if(buffer[0] == '[')
{
s=1;
while(buffer[s] == sSec[j])
{
s++;
j++;
}
if(buffer[s] == ']')
{
flag = 1;
}
else
{
flag = 0;
}
}
if(strncmp(buffer, sPar, i) == 0 && flag == 1)
{
s = i + 2;
j = 0;
while((j < ilen) && (buffer[s] != '\n') && (buffer[s] != EOF))
{
sRet[j] = buffer[s];
s++;
j++;
}

sRet[j] = '\0';
if(((buffer[s] != '\n') || (buffer[s] != EOF)) && (j <= ilen))
{
return j;
}
return -3;
}
}
return -2;
}
int comp(ST_DAT *st, void *key)
{
if(strcmp(st->sx,key) == 0)
{
free(st->sx);
return 1;
}
else
{
return 0;
}
}
void eliminar(ST_DAT *st)
{
free(st->sx);
}

URLs de referencia