EN CONSTRUCCION
Los siguientes
ejercicios se estudiaron en clases.
1.-
/* Disene un programa que:
a.- Pida al usuario el numero de datos con lo que se va a trabajar.
A partir e este valor, reservar espacio dinamicamente para almacenar
esa cantidad de datos. El tipo de dato es entero.
Luego de esto, debe imprimir un menu que ofrezca:
1.- Ingresar un dato. Para esto debe usarse una funcion que reciba la
direccion de la posicion de memoria reservada y
el dato. La funcion retorna cero si todo sale bien y 1 en caso
de ocurrir algun error.
2.- Guardar los datos en un archivo y salir. Guardar los datos debe
realizarse con una funcion que reciba la direccion del espacio reservado y
el numero de elementos a guardar. Devuelve cero si todo salio bien o
uno en caso de error. Defina una macro para el nombre del archivo en el
que se guardaran los datos. Este nombre debe ser: entero.dat
Referencie los datos en forma de punteros y en forma de arreglo.
Imprima mensajes que muestren lo que sucede en ambos casos.
*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>
#define NOMB "entero.dat"
int mete(int
*,int);
int guarda(int *,int);
int indice;
unsigned int i;
void main(){
int dato,
*pi;
char ch;
clrscr();
printf("Para cuantos datos enteros desea reservar espacio?: ");
scanf("%i%*c",&i);
pi = (int *)malloc(i*sizeof(int));
for(;;){
printf("Que desea hacer?\n(M)eter dato\n(G)uardar y Salir\n");
while ( (ch = tolower(getch()))!='m' &&
ch!='g');
switch (ch) {
case 'm': printf("Que dato desea agregar?:
");
scanf("%i%*c",&dato);
if (mete(pi,dato)) printf("\n No hay espacio!!!\n\n");
break;
case 'g': if (guarda(pi,indice)) {
printf("Algun Error\n");
exit(1);
}
else exit(0);
}
}
}
int mete(int
*p,int a){
if (indice>=i)
return 1;
printf("Guardare el dato %i en la posicion %i\n",a,indice);
p[indice]=a; // *(p+indice)=a;
printf("Guarde el dato en &p[indice]=0x%X pero observe que (p+indice)=0x%X\n",&p[indice],(p+indice));
printf("Por lo tanto p[indice]=%i tambien puede referenciarse como *(p+indice)=%i\n",p[indice],*(p+indice));
indice ++;
return 0;
}
int guarda(int *p,int a){
FILE
*pf;
if (pf = fopen(NOMB,"w"))
{
fwrite(p,sizeof(int),a,pf);
return 0;
} else {
return 1;
}
}
2.-
/* Desarrolle un programa que almacene una lista de trabajadores.
Los datos de estos estaran contenidos en una estructura ( solo nombre ).
Como la lista es dinamica ( no sabe cuantos trabajadores hay ) use un
puntero a una estructura del mismo tipo en la estructura.
Los datos se guardaran en un archivo llamado: Lista_t.dat
Este archivo debe verificarse al inicio del programa y debe cargarse
sus datos en la lista en caso de que exista.
El programa debe tener un menu para:
1.- Agregar un nuevo empleado.
2.- Guardar los datos de la lista y salir.
Ambas cosas deben hacerse con funciones. Con condiciones similares
a las de EJE1.c en cuanto a valor retornado. En cuanto a los valores
que recibe, 1: Recibe void. Procesa fin de la lista.
pedira los datos dentro de la funcion mientras que guarda recibira
el inicio de la lista.
Debe haber un puntero al inicio de la lista y otro al final de la misma.
Por conveniencia, declaremos estos como globales.
*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>
#include<string.h>
#define
NOMB "lista_t.dat"
typedef
struct list {
char nombre[30];
struct list *prox;
} lista;
lista *fin, inicio={"",NULL};
int
mete(void);
int
guarda(void);
void
main(){
char ch;
fin=&inicio;
clrscr();
for(;;){
printf("Que desea hacer?\n(M)eter dato\n(G)uardar y Salir\n");
while ( (ch = tolower(getch()))!='m' && ch!='g');
switch (ch) {
case 'm': if (mete()) printf("\n No hay espacio!!!\n\n");
break;
case 'g': if
(guarda()) {
printf("Algun Error\n");
exit(1);
} else exit(0);
}
}
}
int
mete(void){
lista *pl;
if (!(pl = (lista *)malloc(sizeof(lista)))) return 1;
fin->prox=pl;
fin = fin->prox;
printf("Introduzca el nombre: ");
scanf("%29[^\n]",fin->nombre);
fflush(stdin);
fin->prox=NULL;
return 0;
}
int guarda(void){
FILE *pf;
lista *actual=&inicio;
if (pf = fopen(NOMB,"w"))
{
while (actual->prox){
actual = actual->prox;
fwrite(actual->nombre,strlen(actual->nombre)+1,1,pf);
}
return 0;
} else {
return 1;
}
}