Está en la página 1de 8

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

FACULTAD DE INGENIERÍA ELÉCTRICA, ELECTRÓNICA,


INFORMÁTICA Y MECÁNICA

PROGRAMA DE INGENIERÍA INFORMÁTICA Y DE SISTEMAS

PRÁCTICA LABORATORIO:
APUNTADORES, ESTRUCTURAS Y UNIONES
       

ASIGNATURA:
Sistemas Operativos

DOCENTE:
Edwin Carrasco Poblete

ALUMNO:

Usucachi Ano, Isac Anderson                                                       182936

Cusco-Perú
2020

I. TEMA : APUNTADORES, ESTRUCTURAS Y UNIONES


II. OBJETIVOS DE LA PRACTICA
Al finalizar la práctica, el estudiante:
1. Explica el uso de apuntadores para referenciar variables en el lenguaje de
programación C.
2. Explica el concepto de estructuras y uniones y diferencia sus características.
3. Escribe programas en el lenguaje de programación C, utilizando apuntadores,
estructuras y uniones para resolver problemas de carácter práctico.

III. TRABAJO PREPARATORIO


Para un trabajo con mejores resultados, es imprescindible que el estudiante:
1. Tenga familiaridad con el lenguaje de programación C.
2. Tenga conocimientos básicos de estructuras de datos.
3. Tenga conocimientos básicos sobre el funcionamiento del sistema de memoria real.

IV. MATERIALES NECESARIOS.


Para el desarrollo de la presente práctica es necesario contar con:
1. Sistema operativo Linux
2. Compilador gcc instalado
3. Editor de textos
EJERCICIOS PROPUESTOS.
1. Modifique el programa de administración de catálogo para que permita la búsqueda por
autor.
// Buscar libros por Autor
bool buscarAutor(struct tLibro c[], char criterio[])
{
int i;
for(i=0;i<tam;i++)
{
if(strcmp(c[i].autor, criterio)==0)//Comparamos si criterio existe en c
{
//si existe el autor retornamos true y mostramos en libro con autor y
titulo
Printf("El titulo: %s | El Autor: %s\n", c[i].titulo,c[i].autor);
return true;
}

}
// si no encuentra el autor retornamos false
return false;
}

2. El programa de gestión de catálogo de libros no permite que los nombres de autor o los
títulos puedan tener nombres con espacios. Modifique el programa para que esto sea
posible.
void leerDatos(struct tLibro *l)

setbuf(stdin,NULL);

printf("Ingrese el titulo: ");

scanf("%[^\n]", l->titulo); // Leemos caracteres incluyendo el espacio

setbuf(stdin,NULL);

printf("Ingrese el autor: ");

scanf("%[^\n]", l->autor);

3. Modifique el programa de gestión de catálogo de libros para que se permita agregar una
cantidad ilimitada de libros (utilice listas dinámicas).
//Nombre : libreria

//Proposito : Administra un catalogo de libros

//Autor : Edwin Carrasco

//FCreacion : 01/12/11

//FModif. : ...

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <stdbool.h>

//CReamos nuestra typedef nodo Lista


typedef struct nodo

char titulo[21];

char autor[21];

struct nodo *enlace;

} LISTA;

// Mostar datos del catalogo

void mostrarDatos(LISTA *l)

while(l != NULL)

// Mostramos el titulo con su autor del libro

printf("El titulo: %s | El Autor: %s\n", l->titulo,l->autor);

l = l->enlace; //pasamos al siguiente nodo

printf("\n");

//Insertamos elementos a nuestra lista

void insertar(LISTA **l)

LISTA *p1, *p2;

p1 = *l;

if(p1 == NULL)

p1 = malloc(sizeof(LISTA));

if (p1 != NULL)

//Leemos autor y titulo de libro

setbuf(stdin,NULL);

printf("Ingrese el titulo: ");

scanf("%[^\n]", p1->titulo);

setbuf(stdin,NULL);

printf("Ingrese el autor: ");

scanf("%[^\n]", p1->autor);

p1->enlace = NULL;
*l = p1;

else

while(p1->enlace != NULL)

p1 = p1->enlace;

p2 = malloc(sizeof(LISTA));

if(p2 != NULL)

//Leemos autor y titulo de libro

setbuf(stdin,NULL);

printf("Ingrese el titulo: ");

scanf("%[^\n]", p2->titulo);

setbuf(stdin,NULL);

printf("Ingrese el autor: ");

scanf("%[^\n]", p2->autor);

p2->enlace = NULL;

p1->enlace = p2;

// Buscar libros por titulo

bool buscarTitulo(LISTA *l)

char datos[21];

setbuf(stdin,NULL);

printf("Ingrese el titulo del texto: ");

scanf("%[^\n]", datos);

puts(datos);

while(l != NULL)

if(strcmp(l->titulo, datos)==0)//Comparamos si datos existe en l

//si existe el titulo retornamos true y mostramos en libro con autor y titulo
printf("El titulo: %s | El Autor: %s\n", l->titulo,l->autor);

return true;

l = l->enlace; //siguiente nodo

return false;

// Buscar libros por Autor

bool buscarAutor(LISTA *l)

char datos[21];

setbuf(stdin,NULL);

printf("Ingrese el autor del texto: ");

scanf("%[^\n]", datos);

puts(datos);

while(l != NULL)

if(strcmp(l->autor, datos)==0)//Comparamos si datos existe en l

//si existe el autor retornamos true y mostramos en libro con autor y titulo

printf("El titulo: %s | El Autor: %s\n", l->titulo,l->autor);

return true;

l = l->enlace; //siguiente nodo

return false;

void mostrarMenu()

puts("*** SISTEMA DE GESTION DE LIBROS ****");

puts("* *");

puts("* 1. Insertar Libros *");

puts("* 2. Mostrar Catalogo *");

puts("* 3. Buscar por titulo *");

puts("* 4. Buscar por autor *");


puts("* 5. Salir *");

puts("* *");

puts("*****************");

int main(void)

//Variables

LISTA *Catalogo = NULL;

int opcion=0;

do

//Indicar que hace el programa

mostrarMenu();

//Leer datos

printf("\nIngrese una opcion: ");

scanf("%d",&opcion);

switch (opcion)

case 1:

//Agregar titulos

insertar(&Catalogo);

break;

case 2:

//Mostrar catalogo

mostrarDatos(Catalogo);

break;

case 3:

//Buscar por titulo

if(buscarTitulo(Catalogo))

printf("El titulo existe en la biblioteca\n\n");

else

printf("El titulo no existe en la biblioteca\n\n");

break;

case 4:

//Buscar por autor


if(buscarAutor(Catalogo))

printf("El autor existe en la biblioteca\n\n");

else

printf("El autor no existe en la biblioteca\n\n");

break;

case 5:

break;

default:

puts("La opcion no es correcta!!");

break;

}while (opcion != 5);

También podría gustarte