UTNianos

Versión completa: [Info 1][aporte] final 16-02-2012
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Así era el final que tomaron, no recuerdo los nombres de las funciones y de algunas cosas pero el planteo era el mismo.

1)
dada la siguiente funcion
int funcion1(char*b, int a, float b);
A) ¿Que se aloja en el stack(pila) de la función?
B)Que variable/es es/son accesibles desde el procedimiento que invoca a la funcion

2) ¿Que es un filesystem?¿Que es un nodo y que tipos de nodos conoce?¿Para que sirve montar un filesystem?¿Con que comando se hace?

3)Dibuje un diagrama de como generar un programa a partir de uno o varios codigos fuente.
a)Que contiene el archivo "stdio.h" ¿Para que sirve incluir un header en nustreo programa?¿como obtengo el código de las funciones scanf y printf?

4)
char caracter;
char *pt1;
char *pt2;

luego te pasaban la direcciones de memoria de cada variable y en el char estaba guardada la letra A

char caracter="A";
pt1=&caratcter;
pt2=&pt1;

a) era llenar un cuadro con el contenido de los dos punteros.
b)imprimir caracter usando pt1.
c)idem b) utilizando pt2.

PRACTICA

Te daban un Nodo de una lista doblemente enlazada

typedef struct Nodo{
float tiempo;
float valor_muestra;
Nodo *previo;
Nodo *anterior;
}

Luego tenias una funcion, que lee de un archivo pares de valores de un electrocardiograma, y a la cual le pasas el nombre del archivo y un puntero a Nodo.

float obtener_promedio(Nodo *lst,char *filename);

La función inicializaba una lista(en realidad era una especie de cola, porque no estaba ordenada) y la llenaba con los valores que leia del archivo.
Luego de esto determinaba los valores máximos y después de identificarlos calculaba el tiempo promedio que había entre valores máximos consecutivos, y ese promedio era el valor de retorno.
Te pedía que dividieras la función en, como mínimo, 3 funciones diferentes.

Un valor_muestra se consideraba máximo cuando:
1)valor_muestra>1250
y
2)Los 5 valores anteriores y los 5 posteriores eran menores a 1250



ESPERO QUE LES SIRVA, ES MI PRIMER APORTE thumbup3
Buen aporte, se agradece aunque todavia no la regularize!

Te gusta el handball, sos de electronica y estas preparando info y fisica..
Creo que se quien sos.
Tocas la armonica? =P
jajaja si yo tambien te ubico! jaja Suerte con info,el miércoles me tiro a física! este parcial lo aprobe!

una alclaracion! en el ejercicio 4! el puntero 2 (pt2) es un puntero doble a char!
char **pt2;
Buen aporte, Acá dejo una solución a la práctica.



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

typedef struct t_nodo {
float tiempo;
float valor_muestra;
struct t_nodo *sig;
struct t_nodo *ant;
}NODO;

typedef struct t_info{
NODO *inicio;
NODO *fin;
}INFO;

float Obtener_medidas (INFO *, char *);
void Abrir (INFO *, char *);
void Crear (INFO *, char *);
int Calcular (INFO *);
int Analisis (INFO *, NODO *);

int main(void)
{
INFO Lista;
Lista.inicio = NULL;
Lista.fin = NULL;

float promedio;
char filename[30];

printf ("Archivo: ");
scanf ("%s", filename);

promedio = Obtener_medidas (&Lista, filename);

printf ("Promedio: %f\n", promedio);
}

float Obtener_medidas (INFO *Lista, char *filename)
{
Abrir (Lista, filename);

NODO *aux;
NODO *auxiliar=NULL;
float promedio=0;
int tiempos=0;

for (aux=Lista->inicio; aux!=NULL; aux=aux->sig)
{
if (aux->valor_muestra>1250 && (Analisis(Lista, aux) == 0))
{
if (auxiliar == NULL)
{
auxiliar = aux;
}
else
{
promedio += (aux->tiempo - auxiliar->tiempo);
auxiliar = aux;
tiempos++;
}
}
}
if (tiempos!=0)
{
return promedio/tiempos;
}
else
{
printf ("ERROR: No se han encontrado picos\n");
exit(0);
}
}

void Abrir (INFO *Lista, char *filename)
{
FILE *file;
char buf[100];

file = fopen (filename, "r");

while (fgets(buf, sizeof(buf), file) != NULL)
{
Crear (Lista, buf);
}
fclose(file);
}

void Crear (INFO *Lista, char *buf)
{
NODO *nuevo; nuevo = malloc (sizeof(NODO));
if (nuevo!=NULL)
{
nuevo->sig=NULL; nuevo->ant=NULL;
nuevo->tiempo = atof(strtok(buf, ","));
nuevo->valor_muestra = atof(strtok(NULL, "\n"));
if (Lista->inicio == NULL && Lista->fin == NULL)
{
Lista->inicio = nuevo; Lista->fin = nuevo;
}
else
{
Lista->fin->sig = nuevo; nuevo->ant = Lista->fin;
Lista->fin = nuevo;
}
}
else
{
printf ("ERROR: Memoria insuficiente\n");
exit(0);
}
}

int Analisis (INFO *Lista, NODO *aux)
{
NODO *aux1, *aux2;
int x=0, y=0, z=0;

aux1=aux->sig;
aux2=aux->ant;
for (z=0; z<5; z++)
{
if (aux1!=NULL)
{
if (aux1->valor_muestra<1250)
{
x++;
}
aux1=aux1->sig;
}
if (aux2!=NULL)
{
if (aux2->valor_muestra<1250)
{
y++;
}
aux2=aux2->ant;
}
}
if (x==5 && y==5){return 0;}
else {return 1;}
}


URLs de referencia