Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Pedido] Final Info 1 24/02/15
Autor Mensaje
lenny33 Sin conexión
Empleado de Fotocopiadora
surviving
**

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 26
Agradecimientos dados: 14
Agradecimientos: 13 en 4 posts
Registro en: Mar 2013
Mensaje: #1
[Pedido] Final Info 1 24/02/15 Finales Informática I (Electrónica)
Hola, que tal, alguno que haya rendido esta semana, sabe de los ejercicios que se tomaron el martes en el final de info 1?
La estoy preparando para esta semana que viene, y queria saber bien que tomaron, si volvieron a tomar lo de punteros a función o la teoría también.

Gracias y saludos
Otros adjuntos en este tema
.jpg  IMG-20150224-WA0041.jpg ( 97,3 KB / 708) por leme123
.jpg  IMG-20150224-WA0042.jpg ( 99,91 KB / 622) por leme123
.jpg  IMG-20150224-WA0043.jpg ( 106,42 KB / 597) por leme123
.jpg  IMG-20150224-WA0044.jpg ( 108,44 KB / 622) por leme123
26-02-2015 11:28
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
leme123 Sin conexión
Militante
Sin estado :(
***

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 86
Agradecimientos dados: 1
Agradecimientos: 36 en 12 posts
Registro en: Mar 2012
Mensaje: #2
RE: [Pedido] Final Info 1 24/02/15
Por suerte no tomaron forreadas como puntero a funcion esta vez, fue como siempre toman. Esto me lo paso un amigo, aprobo con 6, ojala tomen asi la fecha que viene, yo tambien rindo ahi


Archivo(s) adjuntos Imagen(es)
               
26-02-2015 11:50
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] leme123 recibio 3 Gracias por este post
lenny33 (26-02-2015), rockstiff (26-02-2015), diegomsaiz (03-03-2015)
lenny33 Sin conexión
Empleado de Fotocopiadora
surviving
**

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 26
Agradecimientos dados: 14
Agradecimientos: 13 en 4 posts
Registro en: Mar 2013
Mensaje: #3
RE: [Pedido] Final Info 1 24/02/15
Gracias leme!!! Ahora voy a tratar de hacerlo a ver que sale, esperemos que tomen asi normal
26-02-2015 12:26
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rockstiff Sin conexión
Militante
.
***

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 51
Agradecimientos dados: 42
Agradecimientos: 7 en 3 posts
Registro en: Feb 2011
Mensaje: #4
RE: [Pedido] Final Info 1 24/02/15
A mi me dieron una paliza, claramente no la prepare tan bien por que la mayoria aprobo. Espero a que alguno suba la resolucion para sacarme algunas dudas, mientras sigo estudiando.
26-02-2015 20:17
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rockstiff Sin conexión
Militante
.
***

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 51
Agradecimientos dados: 42
Agradecimientos: 7 en 3 posts
Registro en: Feb 2011
Mensaje: #5
RE: [Pedido] Final Info 1 24/02/15
Bueno, despues de como 3hs programando (si ya se, no soy una luz en programacion) pude "resolver" el final, el tema es que no puedo compilarlos por que tengo un lio en la cabeza en como hacer el main para el ejercicio 1 y 2, y en el tercero no puedo terminar de hacerlo andar.


EJ 1-2


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

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;


typedef ST_XYZ* stPtr;

void extract (ST_XYZ **P, ST_XYZ **Q, ST_DAT **sp, void *key, int (*pfun)(ST_DAT *, void*));


void extract (ST_XYZ **P, ST_XYZ **Q, ST_DAT **sp, void *key, int (*pfun)(ST_DAT *, void*))
{

stPtr anterior, actual, auxiliar;
int comp;

comp = (*pfun)(*sp,&key); //Busco el nodo en la lista

if((*pfun)(*sp,&key)) //El nodo es el primero de la lista
{
auxiliar = *P; //Guardo el nodo a eliminar
*P = (*P)->sig; //Apunto P al siguiente nodo
(*P)->ant = NULL; //Apunto el anterior a NULL
(*auxiliar).st = *sp; //Guardo el contenido en SP.
free(auxiliar);

}else{ //Sigo buscando

anterior = *P;
actual = (*P)->sig;

while (actual != NULL && !(*pfun)(*sp,&key)) //Me desplazo hasta encontra el nodo o llegar al final de la lista.
{
anterior = actual;
actual = actual->sig;
actual->ant = anterior;

}

if(actual != NULL) //Encontre el nodo, si actual == NULL entonces el nodo no estaba
{
auxiliar = actual;
anterior->sig = actual ->sig;
anterior->sig->ant = anterior;
free (auxiliar);

}else{
sp = NULL; //Como no encontre el nodo en la lista sp = NULL
}
}
}

//LA FUNCION DE COMPARACION RETORNARA 1 CUANDO SX COINCIDA CON EL PARAMETRO KEY DE BUSQUEDA
int compare(ST_DAT *stData, void *key)
{
//Busco en todos los valores
//if(*(int *)key == stData->val ||*(int *)key == stData->code || *(int *)key == stData->qtty || strcmp(*(char*)key,stData->sx) || strcmp(*(char *)key,stData->abc))

if (!strcmp(*(char*)key,stData->sx)) //Casteo KEY como CHAR*, y lo comparo con SX, si son iguales strcmp devuelve cero, entonces uso ! para que se cumpla la condicion.
{
return 1; //Encontre el valor en la estructura
}else{
return 0; //No encontre el valor en la estructura
}
}




Hasta aca el 1 y 2, en el segundo tengo comentado una forma de comparar con cualquier valor en la estructura, estaria correcto de esa forma?

EJ 3


int read_param (char *sFile, char *sSec, char *sPar, char *sRet, int ilen)
{
FILE *fp;
int aux, i;
char *strAux,*strAux2;

fp = fopen (sFile,"r");

if(fp == NULL)
{
printf("Error al abrir el archivo\n");
return (-1);
}else{
while(!feof(fp)) //Mientras no termine el archivo
{
fscanf (fp,"%s",strAux); //Leo una linea del archivo
if(!strcmp(strAux,sSec)) //Si encontre la seccion
{
for(i=0; i<2; i++)
{
*strAux = fscanf(fp,"%s",strAux); //Leo la cadena
*strAux2 = strtok (strAux,"="); //Guardo en strAux2 los caracteres hasta el =
if (!strcmp(strAux2,sPar))
{
*strAux2 = strtok (NULL,"\r"); //Guardo en strAux2 los datos desde el = hasta que termina la linea
if(strlen(strAux2>ilen))
{
fclose(fp);
return (-3);
}else{
sRet = strncpy(sRet,strAux2,ilen);
printf("Parametro: %s\n",sRet);
fclose(fp);
return (strlen(sRet)); //Devuelvo el valor
}

}
}

}else{ //No encontro la seccion
fclose(fp);
return (-2);
}

}
fclose(fp);
}

}



Aca es donde tengo mas inconvenientes, todavia tengo problemas con el manejo de las instrucciones de manejo de archivos y strings, mas que nada en cuando usar el puntero. De todas formas se me complica mucho pensar en como resolver el ejercicio, no encuentro forma mas simple (hacer esto en final me lo imagino imposible). Estoy intentando debuggear un archivo .ini pero no puedo hacer que solo lea el texto como indica el final. Alguien me da una mano viendo los codigos? Mil gracias.
01-03-2015 18:12
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
lenny33 Sin conexión
Empleado de Fotocopiadora
surviving
**

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 26
Agradecimientos dados: 14
Agradecimientos: 13 en 4 posts
Registro en: Mar 2013
Mensaje: #6
RE: [Pedido] Final Info 1 24/02/15
Aca te dejo para el 1 y el 2, lo que hice yo, funciona bien y tiene el main, lo unico que cambie es char *sx por char sx[20] . Porque no sabia bien donde lo tenia que malloquear para que no me tire error, pero bueno es para mostrar mas o menos como lo hice yo. ojala te sirva y cualquier cosa escucho preguntas,sugerecias

Saludos


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


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

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

void agregar (ST_XYZ **pp,ST_XYZ **uu);
void show (ST_XYZ * List);
void extract (ST_XYZ **pp,ST_XYZ **uu,ST_DAT **sp,void *key,int (*pfun) (ST_DAT *,void *));
int pfun (ST_DAT *nodo,void *key);

int main (void)
{

struct ST_XYZ *pp=NULL;
struct ST_XYZ *uu=NULL;
ST_DAT *sp=NULL;
char o='y';

while(o=='y')
{
printf("Agregar nodo\n");
agregar (&pp,&uu);
printf("Si desea agregar otro nodo ingrese 'y'\n");//agrego nodos hasta que me ingresen cualquier letra
scanf(" %c",&o); //solo agrego sx, no todos los campos
}

show(pp); //muestro mi lista
void *key;
key="hola"; //elegi la palabra hola como key arbitrario

int (*pfun2)(ST_DAT *nodo,void *key)=&pfun; //puntero a funcion lo a punto a la funcion

extract (&pp,&uu,&sp,key,pfun2);
show(pp);
printf("%s\n",sp->sx); //muestro el sx, para ver que realmente se copio

return 0; //si no encunetra coincidencia, apunta a NULL
//pero va ahaber SERGMENTATION FAULT POR el printf
}

int pfun (ST_DAT *nodo,void *key)
{
int r;
r=strcmp(nodo->sx,(char*)key);

if(r==0)
{
printf("Hay coincidencia\n");
r=1;
return r;
}
else
{
printf("No hay coincidencia\n");
r=0;
return r;
}

}
void extract (ST_XYZ **pp,ST_XYZ **uu, ST_DAT **sp,void *key,int (*pfun) (ST_DAT *,void *))
{
int flag=0;
*sp=NULL;
ST_XYZ *aux,*aux2;
aux=*pp;


while(aux!=NULL && flag==0)
{
flag=pfun(aux->st,key);

if(flag==1)
{
if(aux==*pp)
{
*sp=aux->st;
aux->sig->ant=NULL;
*pp=aux->sig;
printf("Primer nodo eliminado\n");
aux2=aux;
free(aux2);
}
else
{
*sp=aux->st;
aux->ant->sig=aux->sig;
aux->sig->ant=aux->ant;
printf("Nodo eliminado\n");
aux2=aux;
free(aux2);
}

if(aux==*uu)
{

*sp=aux->st;
*uu=aux->ant;
(*uu)->sig=NULL;
printf("Ultimo nodo eliminado\n");
aux2=aux;
free(aux2);

}

}
aux=aux->sig;
}


}


void agregar (ST_XYZ **pp,ST_XYZ **uu)
{
ST_XYZ *aux;
ST_DAT *nuevo;

aux=*pp;


if(*pp==NULL)
{

*pp= (ST_XYZ *) malloc(sizeof(ST_XYZ));
nuevo= (ST_DAT *) malloc(sizeof(ST_DAT));
(*pp)->st=nuevo;

printf("Agregar sx en el primer nodo\n");
scanf(" %s",&((*pp)->st->sx));
(*pp)->sig=NULL;
(*pp)->ant=NULL;
(*uu)=*pp;

}
else
{
while(aux->sig!=NULL)
{
aux=aux->sig;
}

aux->sig= (ST_XYZ *) malloc(sizeof(ST_XYZ));
nuevo= (ST_DAT *) malloc(sizeof(ST_DAT));

(*uu)=aux->sig;
(*uu)->st=nuevo;
aux->sig=*uu;
(*uu)->ant=aux;
(*uu)->sig=NULL;


printf("Agregar sx en nodo\n");
scanf(" %s",&((*uu)->st->sx));

}


}

void show (ST_XYZ * List)
{

while(List !=NULL)
{


printf("sx: %s\n",(List->st->sx));


List=(List->sig);
}
}

02-03-2015 00:52
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] lenny33 recibio 1 Gracias por este post
rockstiff (02-03-2015)
lenny33 Sin conexión
Empleado de Fotocopiadora
surviving
**

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 26
Agradecimientos dados: 14
Agradecimientos: 13 en 4 posts
Registro en: Mar 2013
Mensaje: #7
RE: [Pedido] Final Info 1 24/02/15
rockstiff, ahi hice el numero 3, te lo paso, al parecer funciona bien, lo unico que lo hice dentro del main por fiaca pero es lo mismo. No supe que era el error de -3, pero lo demas esta andando.

Consultame o decime cualquier cosa, ojala te sirva.Saludos

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int sec_compare(char *t,char *Sec);

int main()
{

char *sPar;
char *sFile;
char *sSec;
char *sRet;
int ilen;
sPar= (char *) malloc (20);
sFile= (char *) malloc (20);
sSec= (char *) malloc (20);
sRet= (char *) malloc (20);

printf("Ingrese archivo\n");
scanf("%s",sFile);
printf("Ingrese Seccion\n");
scanf("%s",sSec);
printf("Ingrese parametro\n");
scanf(" %s",sPar);


FILE *ptr;
char *t=NULL;
t= (char *) malloc (20);
char *l=NULL;
int r;


ptr=fopen(sFile,"r");

if(ptr==NULL)
{
printf("Error al abrir el archivo\n"); //Verifico error de archivo
return (-1);
}
else
{

while(!feof(ptr))
{
fscanf(ptr,"%s",t); //escaneo el archivo y comparo si es seccion valida

if((r=sec_compare(t,sSec))==1)
{
printf("\nSeccion: %s\n",t); // muestro la seccion valida
fscanf(ptr,"%s",t); //escaneo proxima palabra

while(!feof(ptr) && *t!='[' )
{ //si no es seccion ni fin de archivo

l=strtok(t,"="); //Obtengo el nombre del parametro
if(strcmp(l,sPar)==0) //Chequeo si es el mismo que me pasan
{
printf("Parametro:%s\n",l);
printf("Encontrado\n");
l = strtok( NULL, " " ); //Devuelve el valor del parametro
printf("Valor:%s\n",l);
strcpy(sRet,l); //Lo copia en el char* que me dan
ilen=sizeof(sRet); //Calcula lo que ocupa

printf("\nSret %s\n",sRet); //Muestro para verficar
printf("Ilen:%d bytes\n",ilen);
return 0;
}

fscanf(ptr,"%s",t);//Sigue buscando parametros dentro de la seccion
}

}
}
}

return (-2); //No encontro el parametro y seccion buscadas, devuelve error
}



int sec_compare(char *t,char *Sec)
{
int i,j;
i=strlen(t)-1; //Calcula largo del nombre de la seccion ingresado menos 1 para usarlo
j=strlen(Sec); //Calcula largo del nombre de la seccion

if(*t=='[' && *(t+i)==']' && (i-1)==j) //Chequeo que sea una seccion y que al menos
{ //los largos sean iguales
i=1;
j=0;
while(*(t+i)!=']')
{
//Comparo nombres de las secciones
if(*(t+i)==*(Sec+j))
{
return 1;
}

}
}

return 0;
}

02-03-2015 16:37
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] lenny33 recibio 1 Gracias por este post
rockstiff (02-03-2015)
rockstiff Sin conexión
Militante
.
***

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 51
Agradecimientos dados: 42
Agradecimientos: 7 en 3 posts
Registro en: Feb 2011
Mensaje: #8
RE: [Pedido] Final Info 1 24/02/15
(02-03-2015 16:37)lenny33 escribió:  rockstiff, ahi hice el numero 3, te lo paso, al parecer funciona bien, lo unico que lo hice dentro del main por fiaca pero es lo mismo. No supe que era el error de -3, pero lo demas esta andando.

Consultame o decime cualquier cosa, ojala te sirva.Saludos

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int sec_compare(char *t,char *Sec);

int main()
{

char *sPar;
char *sFile;
char *sSec;
char *sRet;
int ilen;
sPar= (char *) malloc (20);
sFile= (char *) malloc (20);
sSec= (char *) malloc (20);
sRet= (char *) malloc (20);

printf("Ingrese archivo\n");
scanf("%s",sFile);
printf("Ingrese Seccion\n");
scanf("%s",sSec);
printf("Ingrese parametro\n");
scanf(" %s",sPar);


FILE *ptr;
char *t=NULL;
t= (char *) malloc (20);
char *l=NULL;
int r;


ptr=fopen(sFile,"r");

if(ptr==NULL)
{
printf("Error al abrir el archivo\n"); //Verifico error de archivo
return (-1);
}
else
{

while(!feof(ptr))
{
fscanf(ptr,"%s",t); //escaneo el archivo y comparo si es seccion valida

if((r=sec_compare(t,sSec))==1)
{
printf("\nSeccion: %s\n",t); // muestro la seccion valida
fscanf(ptr,"%s",t); //escaneo proxima palabra

while(!feof(ptr) && *t!='[' )
{ //si no es seccion ni fin de archivo

l=strtok(t,"="); //Obtengo el nombre del parametro
if(strcmp(l,sPar)==0) //Chequeo si es el mismo que me pasan
{
printf("Parametro:%s\n",l);
printf("Encontrado\n");
l = strtok( NULL, " " ); //Devuelve el valor del parametro
printf("Valor:%s\n",l);
strcpy(sRet,l); //Lo copia en el char* que me dan
ilen=sizeof(sRet); //Calcula lo que ocupa

printf("\nSret %s\n",sRet); //Muestro para verficar
printf("Ilen:%d bytes\n",ilen);
return 0;
}

fscanf(ptr,"%s",t);//Sigue buscando parametros dentro de la seccion
}

}
}
}

return (-2); //No encontro el parametro y seccion buscadas, devuelve error
}



int sec_compare(char *t,char *Sec)
{
int i,j;
i=strlen(t)-1; //Calcula largo del nombre de la seccion ingresado menos 1 para usarlo
j=strlen(Sec); //Calcula largo del nombre de la seccion

if(*t=='[' && *(t+i)==']' && (i-1)==j) //Chequeo que sea una seccion y que al menos
{ //los largos sean iguales
i=1;
j=0;
while(*(t+i)!=']')
{
//Comparo nombres de las secciones
if(*(t+i)==*(Sec+j))
{
return 1;
}

}
}

return 0;
}


Venia bien encaminado, por lo pronto fallaba en asignarle memoria a los char* y en identificar bien las secciones. Ya de ahi pude hacer bien el tema de separar los parametros aunque tomando el archivo literal de "1 seccion, 3 parametros" y repetir.

Son estos detalles los que me preocupan, como en un par de finales hay que interpretar cadenas de cierta forma especifica y ahi es donde fallo mas que nada creo.

Gracias!
02-03-2015 18:34
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.