programación estructurada ii

Anuncio
UNIVERSIDAD BANCARIA DE MEXICO
“Constancia, Unidad y Trabajo”
García Cabrera Ma. de Jesús
Programación Estructurada II – Prof. Juan Carlos Martínez
PROGRAMACIÓN ESTRUCTURADA II
Portafolio de Evidencias
UBAM
UNIVERSIDAD BANCARIA DE MEXICO
“Constancia, Unidad y Trabajo”
García Cabrera Ma. de Jesús
Programación Estructurada II – Prof. Juan Carlos Martínez
Revisión de conceptos importantes
#include <conio.h>
#include <stdio.h>
ESTRUCTURAS
struct computadora{
float costo;
int anio;
int velocidad_cpu;
char tipo_cpu[16];
};modelo;
printf(“¿Tipo de CPU?”);
gets(modelo,tipo_cpu);
printf(“Velocidad”);
scanf(“%”,&modelo,velocidad,cpu);
INICIALIZADORES DE ESTRUCTURAS
struct empleados{
int id;
char nombre[32];};
struct empleados info={
I."B.Smit"};
PARA PASO DE ESTRUCTURA A UNA FUNCION
struct computadora{
float costo;
int anio;
];
typedef struct computadora EC;
EC Recibe Datos(ECS);
UBAM
UNIVERSIDAD BANCARIA DE MEXICO
“Constancia, Unidad y Trabajo”
García Cabrera Ma. de Jesús
Programación Estructurada II – Prof. Juan Carlos Martínez
Rerencia a estructuras mediante apuntadores
struct computadora{
float costo;
int anio; };
typedef struct computadora EC;
void Recibe Datos (EC *aptr_s);
main (void){
EC modelo;
Recibe Datos (&modelo);
…}
void Recibe Datos(EC *aptr_s) {
printf(“CPU”);
gets(((*aptr_s).tipo_cpu));
printf(“Costo”);
scanf((“%d”,&)(*aptr_s);costo);
}
main(void)
{ EC modelo;
modelo=Recibe Datos (modelo);
printf(“Año:%d\n”,modelo.anio);
}
EC Recibe Datos (ECS)
{
printf(“Tipo de CPU”);
gets(S.Tipo_cpu);
return s;
UBAM
UNIVERSIDAD BANCARIA DE MEXICO
“Constancia, Unidad y Trabajo”
García Cabrera Ma. de Jesús
Programación Estructurada II – Prof. Juan Carlos Martínez
APUNTADORES
Operador de dirección (&)
Ejemplo
long int x;
long int *y;
y=&x;
Ejemplo II
main()
{
char c;
int x;
float y;
c=’A’;
x=7;
y=123.45;
printf(“y: dirección=%p, contenidos=%s.2 fln”&y,y);
Salida
y: dirección =OX1AF6, contenido =123.4
Forma general para declarar un puntero tipo_de_dato * nombre_del_apuntador;
UBAM
UNIVERSIDAD BANCARIA DE MEXICO
“Constancia, Unidad y Trabajo”
García Cabrera Ma. de Jesús
Programación Estructurada II – Prof. Juan Carlos Martínez
Ejemplo III
…
float y,*aptr_y;
…
y=123.45;
aptr_y=&y;
printf(“aptr_y: dirección: %p, contenido=%p,…&aptr_y,aptr_y”);
INDICAR LA SALIDA EN PANTALLA
int x, y, z;
int *aptr_1, *aptr_2, *aptr_3;
x=1234
printf (“%p,%d”, &x, x);
FFF0 1234
aptr_1=&x;
print (“%p, %p”, &aptr_1, aptr_1);
FFF3
FFF0
FFF4
FFF1
FFF5
1234
aptr_2=&y;
printf (“%p, %p”, &aptr_2, aptr_2);
aptr_3=aptr_1;
printf (“%p, %d”,&aptr_3,*aptr_3);
x
FFF0
y
FFF1
z
FFF2
aptr_1
FFF3
UBAM
UNIVERSIDAD BANCARIA DE MEXICO
“Constancia, Unidad y Trabajo”
García Cabrera Ma. de Jesús
Programación Estructurada II – Prof. Juan Carlos Martínez
aptr_2
FFF4
aptr_3
FFF5
Malloc
Es una subrutina para el ejercicio asignación de memoria dinámica en los
lenguajes de programación C y C++ la función malloc sirve para solicitar un
bloque de memoria del tamaño suministrado como parámetro.
Sizeof
Se utiliza para copular los tamaños de tipos de datos sizeof se puede aplicar a
todos los tipos de datos ya sean tipos primitivos y de punto flotante de los
definidos de los punteros en direcciones de memoria.
LISTAS ENLAZADAS
Ejemplo
Crear una lista enlazada de elementos que almacenen datos de tipo entero.
1- struct Elemento {
int dato;
struct Elemento *siguiente; };
typedef struct Elemento Nodo;
2
Nodo*primero=NULL;
3
primero= (Nodo *) malloc (sizeof(Nodo));
4
UBAM
UNIVERSIDAD BANCARIA DE MEXICO
“Constancia, Unidad y Trabajo”
García Cabrera Ma. de Jesús
Programación Estructurada II – Prof. Juan Carlos Martínez
primero-> dato=11;
primero-> siguiente=NULL;
5
nodo*crearnodo(int x,nodo* enlace)
{
nodo*p;
p=(nodo *) malloc (sizeof(nodo));
p->dato=x;
p->siguiente=enlace;
return p; }
INSERTAR DATO AL INICIO DE LISTA
void insertarcabezaLista (Nodo **cabeza, int entrada)
{
Nodo *nuevo;
nuevo = (Nodo *) malloc (sizeof (Nodo));
nuevo-> dato = entrada;
nuevo-> siguiente = *cabeza;
*cabeza = nuevo;
}
CREAR UNA LISTA DE DATOS
void insertarlista (Nodo **cabeza, int entrada)
{
Nodo *nuevo;
UBAM
UNIVERSIDAD BANCARIA DE MEXICO
“Constancia, Unidad y Trabajo”
García Cabrera Ma. de Jesús
Programación Estructurada II – Prof. Juan Carlos Martínez
nuevo = (Nodo*) malloc (sizeof (Nodo));
nuevo->dato=entrada;
nuevo-> siguiente = anterior -> siguiente;
anterior ->siguiente = nuevo;
}
INSERTAR DATO AL FINAL DE LA LISTA
void insertarlistafinal (Nodo **cabeza, int entrada)
{
Nodo *nuevo;
nuevo=(Nodo *) malloc (sizeof (Nodo));
nuevo-> dato = entrada;
nuevo-> siguiente = NULL;
final-> siguiente = nuevo;
}
ELIMINAR UN DATO
void suprime(Nodo **primero,int dato1)
{
Nodo *ptr,*ant;
int enc=0;
ptr=*primero;
int=ptr;
while((!enc)&&(ptr!=NULL))
{
UBAM
UNIVERSIDAD BANCARIA DE MEXICO
“Constancia, Unidad y Trabajo”
García Cabrera Ma. de Jesús
Programación Estructurada II – Prof. Juan Carlos Martínez
enc=(ptr->dato=dato1),
if(!enc)
{
ant=ptr;
ptr=ptr->siguiente;
}
}
if(ptr!=NULL)
{
if(ptr==*primero)
*primero=ptr->siguiente;
else
anterior->siguiente=ptr->siguiente;
free(ptr);
}
}
INGRESAR UN DATO
void ingresar2 (Nodo **primero, int dato1)
{
Nodo *nuevo,*anterior,*p;
nuevo=nuevoNodo(dato1);
if(*primero=NULL)
*primero=nuevo;
UBAM
UNIVERSIDAD BANCARIA DE MEXICO
“Constancia, Unidad y Trabajo”
García Cabrera Ma. de Jesús
Programación Estructurada II – Prof. Juan Carlos Martínez
else
if(dato1<=(*primero)->dato)
{
nuevo->siguiente=*primero;
*primero=nuevo;
}
else
{
anterior=p=*primero;
while((dato>p->dato)&&(p->siguiente!=NULL))
{
anterior=p;
p=p->siguiente;
}
if(dato1>p->dato)
ant=p;
nuevo->siguiente=anterior->siguiente;
anterior->siguiente=nuevo;
}
}
LISTAS DOBLEMENTE ENLAZADAS
struct unnodo
{
int dato;
UBAM
UNIVERSIDAD BANCARIA DE MEXICO
“Constancia, Unidad y Trabajo”
García Cabrera Ma. de Jesús
Programación Estructurada II – Prof. Juan Carlos Martínez
struct unnodo *adelante;
struct unnodo *atras;
};
typedef struct unnodo nodo;
Inserción de un elemento en una lista doblemente enlazada
nodo*nuevo;
nuevo=(nodo *) malloc (sizeof(nodo));
nuevo->dato=entrada;
nuevo->adelante=primero;
nuevo->anterior=NULL;
primero->anterior=nuevo;
primero=nuevo;
nodo *nuevo2;
nuevo2=(nodo *) malloc (sizeof(nodo));
nuevo2->dato=entrada2;
nuevo2->siguiente=nuevo;
nuevo2->anterior=NULL;
primero->anterior=nuevo2;
primero=nuevo2;
UBAM
Descargar