Ahora bien, si queremos utilizar funciones para el ingreso de los datos, lo cual parece muy cuerdo, podríamos tener el siguiente código:
#include <stdio.h>
#include <stdlib.h>
#define MAXNOMBRE 20
typedef struct nodo{
char nombre[MAXNOMBRE];
int valor;
struct nodo* sgte;
}nodo;
void MostrarLista(nodo* raiz)
{
printf("\n La lista esta compuesta de los siguientes elementos\n");
nodo* sigue;
for(sigue=raiz;sigue->sgte!=NULL;sigue=sigue->sgte)
printf("NOMBRE: %s \n VALOR: %d \n", sigue->nombre,
sigue->valor);
printf("NOMBRE: %s \n VALOR: %d \n", sigue->nombre,
sigue->valor);
}
void IngresarPrimerElemento(nodo *raiz)
{
printf("lo logre!\n Ingresa un nombre\n");
scanf("%s",raiz->nombre);
printf("Ingresa un valor\n");
scanf("%d",&raiz->valor);
}
void IngresarElemento(nodo *raiz)
{
nodo* sigue;
sigue=raiz;
while(sigue->sgte!=NULL)
sigue=sigue->sgte;
nodo* nuevo;
nuevo = malloc(sizeof(nodo*));
nuevo->sgte=NULL;
printf("lo logre!\n Ingresa un nombre\n");
scanf("%s",nuevo->nombre);
printf("Ingresa un valor\n");
scanf("%d",&nuevo->valor);
sigue->sgte=nuevo;
}
int main()
{
nodo *p;
p=malloc(sizeof(nodo*));
p->sgte=NULL;
IngresarPrimerElemento(p);
IngresarElemento(p);
MostrarLista(p);
return 0;
}
lunes, 12 de mayo de 2008
Sobre Listas: Parte 1
Aquí ingresaremos una función para conocer los datos que han sido ingresados en nuestra lista:
#include <stdio.h>
#include <stdlib.h>
#define MAXNOMBRE 20
typedef struct nodo{
char nombre[MAXNOMBRE];
int valor;
struct nodo* sgte;
}nodo;
void MostrarLista(struct nodo* raiz)
{
printf("\n La lista esta compuesta de los siguientes elementos\n");
nodo* sigue;
for(sigue=raiz;sigue->sgte!=NULL;sigue=sigue->sgte)
printf("NOMBRE: %s \n VALOR: %d \n", sigue->nombre,
sigue->valor);
printf("NOMBRE: %s \n VALOR: %d \n", sigue->nombre,
sigue->valor);
}
int main()
{
nodo *p;
p=malloc(sizeof(nodo*));
printf("lo logre!\n Ingresa un
nombre\n");
scanf("%s",p->nombre);
printf("Ingresa un valor\n");
scanf("%d",&p->valor);
nodo *q=malloc(sizeof(nodo*));
p->sgte=q;
q->sgte=NULL;
printf("lo logre!\n Ingresa un
nombre\n");
scanf("%s",p->sgte->nombre);
printf("Ingresa un valor\n");
scanf("%d",&p->sgte->valor);
MostrarLista(p);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define MAXNOMBRE 20
typedef struct nodo{
char nombre[MAXNOMBRE];
int valor;
struct nodo* sgte;
}nodo;
void MostrarLista(struct nodo* raiz)
{
printf("\n La lista esta compuesta de los siguientes elementos\n");
nodo* sigue;
for(sigue=raiz;sigue->sgte!=NULL;sigue=sigue->sgte)
printf("NOMBRE: %s \n VALOR: %d \n", sigue->nombre,
sigue->valor);
printf("NOMBRE: %s \n VALOR: %d \n", sigue->nombre,
sigue->valor);
}
int main()
{
nodo *p;
p=malloc(sizeof(nodo*));
printf("lo logre!\n Ingresa un
nombre\n");
scanf("%s",p->nombre);
printf("Ingresa un valor\n");
scanf("%d",&p->valor);
nodo *q=malloc(sizeof(nodo*));
p->sgte=q;
q->sgte=NULL;
printf("lo logre!\n Ingresa un
nombre\n");
scanf("%s",p->sgte->nombre);
printf("Ingresa un valor\n");
scanf("%d",&p->sgte->valor);
MostrarLista(p);
return 0;
}
Sobre Listas: Parte 0
Si tuviésemos un nombre y un código por cada nodo de nuestra lista y quisiéramos ingresar datos, digamos, tan solo dos, tendríamos un código como el siguiente:
#include <stdio.h>
#include <stdlib.h>
#define MAXNOMBRE 20
typedef struct nodo{
char nombre[MAXNOMBRE];
int valor;
struct nodo* sgte;
}nodo;
int main()
{
nodo *p;
p=malloc(sizeof(nodo*));
printf("\n Ingresa un
nombre\n");
scanf("%s",p->nombre);
printf("Ingresa un valor\n");
scanf("%d",&p->valor);
printf("\nUsted ha ingresado los
siguientes valores\n");
printf("NOMBRE: %s \n VALOR: %d \n",
p->nombre, p->valor);
nodo *q=malloc(sizeof(nodo*));
p->sgte=q;
q->sgte=NULL;
printf("lo logre!\n Ingresa un
nombre\n");
scanf("%s",p->sgte->nombre);
printf("Ingresa un valor\n");
scanf("%d",&p->sgte->valor);
printf("\nUsted ha ingresado los
siguientes valores\n");
printf("NOMBRE: %s \n VALOR: %d \n",
p->sgte->nombre, p->sgte->valor);
return 0;
}
Lo cual, cubre nuestras expectativas.... ¿cómo hacer para listar los datos sin tener la necesidad de especificar el puntero? Parece ser posible con una función...
#include <stdio.h>
#include <stdlib.h>
#define MAXNOMBRE 20
typedef struct nodo{
char nombre[MAXNOMBRE];
int valor;
struct nodo* sgte;
}nodo;
int main()
{
nodo *p;
p=malloc(sizeof(nodo*));
printf("\n Ingresa un
nombre\n");
scanf("%s",p->nombre);
printf("Ingresa un valor\n");
scanf("%d",&p->valor);
printf("\nUsted ha ingresado los
siguientes valores\n");
printf("NOMBRE: %s \n VALOR: %d \n",
p->nombre, p->valor);
nodo *q=malloc(sizeof(nodo*));
p->sgte=q;
q->sgte=NULL;
printf("lo logre!\n Ingresa un
nombre\n");
scanf("%s",p->sgte->nombre);
printf("Ingresa un valor\n");
scanf("%d",&p->sgte->valor);
printf("\nUsted ha ingresado los
siguientes valores\n");
printf("NOMBRE: %s \n VALOR: %d \n",
p->sgte->nombre, p->sgte->valor);
return 0;
}
Lo cual, cubre nuestras expectativas.... ¿cómo hacer para listar los datos sin tener la necesidad de especificar el puntero? Parece ser posible con una función...
sábado, 3 de mayo de 2008
Struct + Archivos y Listas: Una aplicación práctica
La empresa "Arica Up" ingresa los datos de sus empleados en un archivo "empleados.dat" Cada registro contiene:
300.000=sueldo(secretaria).
- un código de identificación (int)
- el nombre (string de un máximo de 30 caracteres)
- el cargo (string de un máximo de 10 caracteres)
- el sueldo (double)
- el área en la que trabaja (string de 10 caracteres)
- 15% a los que están en la zona Parinacota,
- un 20% a los que están en la zona Chinchorro
- 23% a los que están en la zona Centro.
- Sueldos por cargo:
- Gerente de zona : 2.5 MM
- Directivo de sección: 1.5 MM
- Secretarias: 300.000
- ejecutivo: 600.000
- recepcionista: 230.000
- Total a pagar = sueldo(según_cargo) + bono_zona - 12% AFP - 8% Salud
300.000=sueldo(secretaria).
sueldo base secretaria | $300.000 |
bono (incremento de un 20% del sueldo) | $60.000 |
Total bruto | $360.000 |
descuento de un 12% del total bruto | $43.200 |
descuento de un 8% del total bruto | $28.800 |
Total descuentos | $72.000 |
Total a pagar (Total bruto-Total descuentos) | $288.000 |
Suscribirse a:
Entradas (Atom)