lunes, 12 de mayo de 2008

Sobre Listas: Parte 2

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;



}

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;



}

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...

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:
  • 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)
Se desea asignar un bono de:
  • 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.
Esto debe generar un archivo llamado "sueldos.dat" el cual contiene el código de identificación y el total a pagar.
  • 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
Ejemplo: Si se trata de una secretaria, de la zona chinchorro, el total a pagar será:
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