Вы находитесь на странице: 1из 64

ESTRUCTURA DE DATOS 1

UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC


FACULTAD DE INGENIERÍA
ESCUELA ACADÉMICO PROFESIONAL DE INGENIERÍA INFORMÁTICA Y SISTEMAS

GUÍA DE LABORATORIO DEL CURSO DE ESTRUCTURA DE DATOS

DATOS ACADÉMICOS
Unidad : Primera unidad
Temas : Arreglos, Funciones, Estructuras y Archivos
Docente : Ing. Francisco Cari Incahuanaco

TEMA: ARREGLOS

TIEMPO ESTIMADO: 12 horas.

OBJETIVO:
El alumno será capaz de:
 Elaborar algoritmos de búsqueda lineal métodos de ordenamiento.
 Simular operaciones con arreglos unidimensionales, bidimensionales y
multidimensionales.
 Diseñar algoritmos para solucionar problemas reales haciendo uso de los
matrices.

EJERCICIOS:

1. Desarrollar un programa para calcular el promedio de notas de un


estudiante, si el promedio del estudiante es mayor a 10.5, entonces el
estudiante estará aprobado, si está entre 8 a 10, entonces el estudiante
estará desaprobado y finalmente si el promedio es menor que 8, entonces
el estudiante estará reprobado.

Sin hacer uso del arreglo

#include"iostream.h"

main( )
{ int N,n,m,i,S=0;
cout<<"ingrese cantidad de números: ";
cin>>N;
for(i=1;i<=N;i++)
{ cout<<"Nota"<<i<<": ";
cin>>n;
S=S+n;
}
m=S/N;
cout<<"el promedio es:"<<m<<endl;
if(m>10.5)
cout<<"Aprobado";

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 2

else if(m>=8 && m<10.5)


cout<<"Desaprobado";
else
cout<<"Reprobado";
return 0;
}

Haciendo uso del arreglo

#include"iostream.h"

main( )
{ int n,A[10],m,i,S=0;
cout<<"ingrese cantidad de numeros: ";
cin>>n;
for(i=1;i<=n;i++)
{ cout<<"A["<<i<<"]: ";
cin>>A[i];
S=S+A[i];
}
m=S/n;
cout<<"el promedio es:"<<m<<endl;
if(m>10.5)
cout<<"Aprobado";
else if(m>=8 && m<10.5)
cout<<"Desaprobado";
else
cout<<"Reprobado";
return 0;
}

2. Desarrollar un programa para encontrar el mayor, menor y valor medio


de tres números ingresados por el teclado sin hacer uso del array

Sin hacer uso del arreglo

#include"iostream.h"

main( )
{ int a,b,c,mayor, menor, centro;
cout<<"ingrese los numeros: ";
cin>>a>>b>>c;
if(a>b)
mayor=a;
else
mayor=b;
if(mayor<c)
mayor=c;
if(a<b)

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 3

menor=a;
else
menor=b;
if(menor>c)
menor=c;
centro=(a+b+c)-(mayor+menor);
cout<<"el mayor numero es:"<<mayor<<endl;
cout<<"el menor numero es:"<<menor<<endl;
cout<<"el valor central es:"<<centro;
return 0;
}

Haciendo uso del arreglo

#include"iostream.h"
main( )
{ int A[3],indice,j,mayor,i;
cout<<"ingrese los numeros: ";
for(i=0;i<=2;i++)
{cout<<"A["<<i<<"]:";
cin>>A[i]; }
mayor=A[0];
for(j=0;j<=2;j++)
{ if(A[j]>mayor)
mayor=A[j];
indice=j;
}
cout<<"el mayor valor es:"<<mayor;
return 0;
}

3. Desarrollar un programa que permita ingresar n notas. El programa debe


calcular: el numero de aprobados y el numero de desaprobados, el % de
aprobados y el % de desaprobados.

#include"iostream.h"
main( )
{ int n,i,Aprobado=0,desaprobado=0;
float A[100],porcentaje;
cout<<"ingrese cantidad de notas";
cin>>n;
for(i=1;i<=n;i++)
{ cout<<"Nota"<<i<<":";
cin>>A[i];
}
for(i=1;i<=n;i++)
{ if(A[i]>=10.5)
Aprobado=Aprobado+1;
else

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 4

desaprobado=desaprobado+1;
}
cout<<"el numero de aprobados es:"<<Aprobado<<endl;
cout<<"el numero de desaprobados es:"<<desaprobado<<endl;
cout<<"el porcenaje de aprobados
es:"<<Aprobado*100/n<<"%"<<endl;
cout<<"el porcentaje de desaprobados
es:"<<desaprobado*100/n<<"%"<<endl;
return 0;
}

4. Desarrollar un programa que permita ingresar n números en un arreglo y


luego imprimir los elementos del arreglo tal como se ingresó en forma
inversa.

#include"iostream.h"

main( )
{ int n,i,v=0,x=0,A[100];
cout<<"ingrese cantidad de notas";
cin>>n;
for(i=1;i<=n;i++)
{ cout<<"A["<<i<<"]:";
cin>>A[i];
}
for(i=1;i<=n;i++)
{ cout<<A[i]<<endl;
}
cout<<"vector inversa"<<endl;
for(i=n;i>0;i--)
{ cout<<A[i]<<endl;
}
return 0;
}

5. Desarrollar un programa que evalué el mayor valor de los elementos


ingresados en el vector

#include"iostream.h"

main( )
{ int n,i,mayor,indice,j,A[100];
cout<<"ingrese cantidad de notas";
cin>>n;
for(i=1;i<=n;i++)
{ cout<<"A["<<i<<"]:";
cin>>A[i];
}
mayor=A[1];

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 5

for(j=1;j<=n;j++)
{ if(A[j]>mayor)
{ mayor=A[j];
indice=j;
}
}
cout<<"el mayor es:"<<mayor<<"y esta en la posicion"<<indice<<endl;
return 0;
}

6. Búsqueda de un elemento en un vector, haciendo uso de la búsqueda


lineal

#include"iostream.h"

main( )
{ int A[100], n, i, indice, nBuscar, encontrado=0;
cout<<"ingrese el tamaño del vector";
cin>>n;
for(i=1;i<=n;i++)
{ cout<<i<<": ";
cin>>A[i];
}
cout<<"ingrese el número a buscar";
cin>>nBuscar;
for(i=1;i<=n;i++)
{ if(nBuscar==A[i])
{ encontrado=1;
indice=i;
}
}
if(encontrado)
cout<<"el número se encuentra en la posición"<<indice<<endl;
else
cout<<"no se encuentra el némero buscado"<<endl;
return 0;
}

MÉTODOS DE ORDENAMIENTO

7. Método de la Burbuja

#include"iostream.h"
main( )
{ int n,i,j,temp,A[100];
cout<<"ingrese cantidad de notas";
cin>>n;
for(i=1;i<=n;i++)
{ cout<<"Nota"<<i<<":";

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 6

cin>>A[i];
}
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
{ if(A[i]>A[j])
temp=A[i];
A[i]=A[j];
A[j]=temp;
}
for(i=1;i<=n;i++)
cout<<A[i]<<endl;
return 0;
}

8. Metodo de la Inserción Directa

#include "iostream.h"

main( )
{ int A[100],N,i,k,aux;
cout<<"ingrese la dimensión del vector";
cin>>N;
for(i=1;i<=N;i++)
{ cout<<"A["<<i<<"]:";
cin>>A[i];
}
for(i=2; i<=N;i++)
{ aux=A[i];
k=i-1;
while((k>=1)&&(aux<A[k]))
{ A[k+1]=A[k];
k=k-1;
}
A[k+1]=aux;
}
for(k=1;k<=N;k++)
cout<<A[k]<<endl;
return 0;
}

9. Selección Directa
#include "iostream.h"

main( )
{ int A[100],N,i,j,menor,k;
cout<<"ingrese la dimensión del vector";
cin>>N;
for(i=1;i<=N;i++)
{ cout<<"A["<<i<<"]:";

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 7

cin>>A[i];
}
for(i=1; i<=N-1;i++)
{ menor=A[i];
k=i;
for(j=i+1; j<=N;j++)
{ if(A[j]<menor)
{ menor=A[j];
k=j;
}
}
A[k]=A[i];
A[i]=menor;
}
for(k=1;k<=N;k++)
cout<<A[k]<<endl;
return 0;
}

10. Metodo de la Heap sort

#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#define max 100

int main( )
{ int A[max],j,item,temp,i,k,n;
clrscr( );
cout<<"\n\tcodigo del metodo de ordenamiento heap sort\n\n";
cout<<"Cantidad de elementos del VECTOR: "; cin>>n;
for(i=1;i<=n;i++)
{
cout<<"["<<i<<"]:"; cin>>A[i];
}
for(k=n;k>0;k--)
{ for(i=1;i<=k;i++)
{ item=A[i];
j=i/2;
while(j>0 && A[j]<item)
{ A[i]=A[j];
i=j;
j=j/2;
}
A[i]=item;
}
temp=A[1];
A[1]=A[k];
A[k]=temp;

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 8

cout<<"\n\nEl orden en forma ASCENDENTE es:\n";


for(i=1;i<=n;i++)
cout<<A[i] << endl;
getch( );
return 0;
}

11. Método de Shake sort

#include<iostream.h>
#include<conio.h>

main( )
{ int izq,der, aux,i,N,k;
float A[20];
cout<<"ingrese dimencion de matriz"; cin>>N;
k=N;izq=2;der=N;
for(i=1;i<=N;i++)
{ cout<<i<<" : ";
cin>>A[i];
}
while(izq<der)
{
for(i =der;i>=izq;i--)
if (A[i-1]>A[i])
{ aux=A[i-1];
A[i-1]=A[i];
A[i]=aux;
k=i;
}
izq=k+1;
for(i =izq ;i<=der;i++)
if (A[i-1]>A[i])
{ aux=A[i-1];
A[i-1]=A[i];
A[i]=aux;
k=i;
}
der=k-1;
}
for(i=1;i<=N;i++)
cout<<A[i]<<" ";
return 0;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 9

12. Búsqueda binaria (los elementos del vector deben estar previamente
ordenadas )

#include"iostream.h"

main( )
{ int n,A[100],i,j,central,nbuscar,encontrado=0,primero=0,ultimo,temp;
cout<<"ingrese cantidad de elementos:";
cin>>n;
for(i=1;i<=n;i++)
{ cout<<"A["<<i<<"]: ";
cin>>A[i];
}
cout<<"elementos ordenados"<<endl;
for(i=1;i<n;i++)
{ for(j=i+1;j<=n;j++)
if(A[i]>A[j])
{ temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
for(i=1;i<=n;i++)
{ cout<<"A["<<i<<"]: "<<A[i]<<endl;
}

cout<<"ingrese el numero a buscar: ";


cin>>nbuscar;
ultimo=n;

while((primero<=ultimo) && (!encontrado))


{
central=(primero + ultimo)/2;
if(nbuscar==A[central])
encontrado=1;
else
if(nbuscar>A[central])
primero=central+1;
else
ultimo=central-1;
}
if(encontrado)
cout<<"el numero "<<nbuscar<<" se encuentra en la posicion
"<<central<<endl;
else
cout<<"el numero no se encuentra en el arreglo "<<endl;
return 0;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 10

OPERACIONES CON MATRICES

13. Mayor elemento de la matriz

#include"iostream.h"

main( )
{ int n,i,j,a,b,mayor,indice1,indice2,A[100][100];
cout<<"ingrese cantidad de elementos";
cin>>n;
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
{
cout<<"A["<<i<<"]"<<"["<<j<<"]:";
cin>>A[i][j];
}
}
mayor=A[1][1];
for(a=1;a<=n;a++)
{ for(b=1;b<=n;b++)
{ if(A[a][b]>mayor)
{ mayor=A[a][b];
indice1=a;
indice2=b;
}
}
}

cout<<"el mayor es:"<<mayor<<"y esta en la


posicion"<<indice1<<indice2<<endl;
return 0;
}

14. Suma de los elementos de una matriz

#include "iostream.h"
int main( )
{ int matriz[15][15], i, j, n, su=0, m;
cout<<"ingrese número de filas:";
cin>>m;
cout<<"ingrese número de columnas:";
cin>>n;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{ cout<<"matriz"<<i<<j;
cin>>matriz[i][j];
su=su+matriz[i][j];

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 11

cout<<"matriz dato"<<endl;
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
cout<<matriz[i][j]<<endl;
}
cout<<"la suma total es:"<<su<<endl;
return 0;
}

15. Maximo y mínimo por fila

#include<iostream.h>
#include<conio.h>
main ( )
{ int A[20][20];
int n,i,j,m,F[10],C[10];
cout<<"Ingrese el numero de filas:";
cin>>n;
cout<<"Ingrese el numero de columnas:";
cin>>m;
for(i=1;i<=n;i++)
{ for(j=1;j<=m;j++)

{ cout<<" "<<i<<","<<j<<": ";


cin>>A[i][j];
}
}
cout<<endl;
cout<<"La matriz es: "<<endl;
for(i=1;i<=n;i++)
{ for(j=1;j<=m;j++)
{ cout<<" "<<A[i][j];
}
cout<<endl;
}
cout<<endl;
//hallando los elementos mayores por fila
for(i=1;i<=n;i++)
{ F[i]=A[i][j];
for(j=1;j<=m;j++)
{ if(A[i][j]>F[i])
{ F[i]=A[i][j];
}
}
}
cout<<"Los elementos mayores de cada fila son:"<<endl<<endl;
for(i=1;i<=n;i++)
{ cout<<" "<<F[i]<<endl;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 12

//hallando los elementos mayores por columna


for(i=1;i<=n;i++)
{ C[j]=A[1][1];
for(j=1;j<=m;j++)
{ if(A[i][j]>C[j])
{ C[j]=A[i][j];
}
}
}
cout<<endl;
cout<<"Los elementos mayores de cada columna son:"<<endl<<endl;
for(j=1;j<=m;j++)
{ cout<<" "<<C[j]<<endl;
}
getch( );
}

16. Desarrollar un programa que multiplique dos matrices de orden nxm y


luego imprima la matriz resultante.

#include "iostream.h"

main( )
{
int n,m,i,a,b,k,j,A[100][100],B[100][100],C[100][100];
cout<<"ingresando el orden de la matriz A[i][j]"<<endl;
cout<<"ingrese la fila de la matriz:";
cin>>n;
cout<<"ingrese la columna de la matriz:";
cin>>m;
for(i=1;i<=n;i++)
{ for(j=1;j<=m;j++)
{ cout<<"A["<<i<<"]"<<"["<<j<<"]:";
cin>>A[i][j];
}
}
cout<<"ingresando elementos de la matriz B"<<endl;
cout<<"ingrese la fila de la matriz";
cin>>a;
cout<<"ingrese la columna de la matriz";
cin>>b;
for(i=1;i<=a;i++)
{ for(j=1;j<=b;j++)
{ cout<<"B["<<i<<"]"<<"["<<j<<"]:";
cin>>B[i][j];
}
}
cout<<"multiplicando las dos matrices"<<endl;
if(m==a)

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 13

{ for(i=1;i<=n;i++)
{ for(j=1;j<=b;j++)
{ C[i][j]=0;
for(k=1;k<=m;k++)
{ C[i][j]=C[i][j]+A[i][k]*B[k][j];
}
cout<<C[i][j]<<" ";
}
cout<<endl;
}
}
else
cout<<"no son compatibles las matrices"<<endl;
return 0;
}

17. Desarrollar un programa para leer los elementos de una matriz cuadrada,
y luego asignar los elementos de la diagonal principal a un vector M.

#include "iostream.h"

main( )
{
int n,m,i,j,A[100][100],M[100];

cout<<"ingresando el orden de la matriz A[i][j]"<<endl;


cout<<"ingrese la fila de la matriz:";
cin>>n;

cout<<"ingrese la columna de la matriz:";


cin>>m;
for(i=1;i<=n;i++)
{ for(j=1;j<=m;j++)
{ cout<<"A["<<i<<"]"<<"["<<j<<"]:";
cin>>A[i][j];
if(i==j)
{ M[i]=A[i][j];
} //cout<<M[i]<<endl;
}
}
cout<<"los elementos de la diagonal principal son:"<<endl;
for(i=1;i<=n;i++)
cout<<M[i]<<endl;
return 0;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 14

18. Diagonal secundaria

#include<iostream.h>
#include<conio.h>
#include<math.h>

main( )
{ int A[10][10],n,i,j,C[10];
cout<<"ingrese la dimensión del arreglo :";
cin>>n;
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
{cout<<"ingrese matriz en la posición ["<<i<<"]["<<j<<"] -> :";
cin>>A[i][j];
}
}
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
{ cout<<A[i][j]<<" ";
}
cout<<endl;
}
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
{ if(i+j==n+1)
{ C[i]=A[i][j];
}
}
}
cout<<"la diagonal secundaria es:"<<endl;
for(i=1;i<=n;i++)
{
cout<<C[i]<<endl;
}
}

19. Promedio por fila y por columna

#include "iostream.h"
#include "iomanip.h"

main( )
{ int i,j,n,m;
double A[20][20],B[20],C[20],suma;
cout<<"ingrese cantidad de de alumnos";
cin>>n;
cout<<"ingrese cantidad notas";
cin>>m;
for(i=1;i<=n;i++)

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 15

{ for(j=1;j<=m;j++)
{ cout<<"A["<<i<<","<<j<<"] :";
cin>>A[i][j];
}
}
for(i=1;i<=n;i++)
{ suma=0;
for(j=1;j<=m;j++)
{ suma=suma+A[i][j];
}
B[i]=suma/m;
}
cout<<endl;
for(j=1;j<=m;j++)
{ suma=0;
for(i=1;i<=n;i++)
{ suma=suma+A[i][j];
}
C[j]=suma/n;
}
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(1);
cout<<setw(10)<<"Alumno"<<setw(10)<<"Prom."<<setw(15)
<< "Examenes"<<endl;
for(i=1;i<=n;i++)
{ cout<<setw(10)<<i<<setw(10)<<B[i]<<" ";
for(j=1;j<=m;j++)
{ cout<<setw(5)<<A[i][j];
}
cout<<endl;
}
cout<<"Promedios/exam=";
for(j=1;j<=m;j++)
{ cout<<setw(5)<<C[j];
}
cout<<endl;
return 0;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 16

20. Determinante de una matriz cuadrada

#include "iostream.h"
#include "iomanip.h"

main( )
{ int i,j,k,l,m,n ;
float a[100][100];
float det;
cout<<"Ingrese el orden de la matriz";
cin>>n;
m=n-1;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{ cout<<"A["<<i<<"]"<<"["<<j<<"]:";
cin>>a[i][j];
}
}
cout<<"imprimiendo los elementos de la matriz"<<endl ;
for(i=1;i<=n;i++)
{ cout<<"| ";
for(j=1;j<=n;j++)
{cout<<a[i][j]<<" ";
}
cout<<"|"<<endl;
}
det=a[1][1];
for(k=1;k<=m;k++)
{
l=k+1;
for(i=l;i<=n;i++)
{ for(j=l;j<=n;j++)
a[i][j] = ( a[k][k]*a[i][j]-a[k][j]*a[i][k] )/a[k][k];
}
det=det*a[k+1][k+1];
}
cout<<"la determinante de la matriz es: "<<det<<endl;
return 0;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 17

21. Inversa de una matriz

#include<iostream.h>
#include<conio.h>

main( )
{
double A[100][100],B[100][100],C[100][100],R[100][100];
float U[100][100];
int i,j,k,l,m,n,tem,temporal,p;
cout<<"ingrese dimencion de matriz"; cin>>n;

for(i=1;i<=n;i++)
for(j=1;j<=2*n;j++)
{ A[i][j]=0 ;
if(j-i==n || i==j)
A[i][j]=1;
B[i][j]=A[i][j];
}
for(i=1;i<=n;i++)
{ cout<<endl;
for(j=1;j<=2*n;j++)
cout<<A[i][j]<<" ";
}
cout<<endl<<endl;

for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<i<<"-"<<j<<" : ";
cin>>A[i][j];
B[i][j]=A[i][j];
}
cout<<endl<<endl;
for(i=1;i<=n;i++)
{ cout<<endl;
for(j=1;j<=2*n;j++)
cout<<A[i][j]<<" ";
}
i=1;
for(j=1;j<=n;j++)
{ if(i==j && i<=n)
{ for(m=1;m<=2*n;m++)
{ U[i][m]=A[i][m]/B[i][i];
C[i][m]=U[i][m];}
}
if(i==j&&i<=n)
{ for(k=1;k<=n;k++)
if(i!=k && i<=n)

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 18

{ for(m=i;m<=2*n;m++)
C[k][m]=A[k][m]-U[i][m]*B[k][i];
}
}
for(l=1;l<=n;l++)
for(p=1;p<=n*2;p++)
A[l][p]=C[l][p];
for(l=1;l<=n;l++)
for(p=1;p<=n*2;p++)
{ B[l][p]=A[l][p];
}
i++;
}
cout<<endl<<endl;
for(i=1;i<=n;i++)
{ cout<<endl;
for(j=1;j<=n*2;j++)
cout<<U[i][j]<<" ";
}
cout<<endl<<endl;
for(i=1;i<=n;i++)
{ cout<<endl;
for(j=1;j<=n*2;j++)
cout<<A[i][j]<<" ";
}
cout<<endl;
getch( );
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 19

TEMA 2: FUNCIONES Y PROCEDIMIENTOS

TIEMPO ESTIMADO: 08 horas.

OBJETIVO:
El alumno será capaz de:
 Elaborar algoritmos con funciones predefinidas y definidas por el programador
 Diseñar algoritmos que diferencie una función y un procedimiento.
 Desarrollar algoritmos recursivos para resolucionar problemas matemáticos.
 Resolver problemas haciendo uso de las funciones recursivos y procedimientos

EJERCICIOS:

22. Función Suma

#include "iostream.h"
double suma(double x, double y);

int main( )
{ double a, b, resul;
cout<<"teclee el primer valor";
cin>>a;
cout<<"teclee el segundo valor";
cin>>b;
resul=suma(a, b);
cout<<resul<<endl;
return 0;
}

double suma(double x, double y)


{ double z;
z=x+y;
return z;
}

23. Funciones con cuatro operaciones básicas

#include "iostream.h"

double suma(double x, double y);


double resta(double x, double y);
double multiplicacion(double x, double y);
double division(double x, double y);
double a,b,resul,z;

int main( )
{ int opcion;
Do
{ cout<<"Operaciones Básicas"<<endl;

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 20

cout<<"1. Suma"<<endl;
cout<<"2. Resta"<<endl;
cout<<"3. Multiplicacion"<<endl;
cout<<"4. Division"<<endl;
cout<<"5. Salir"<<endl;
cout<<"ingrese la opcion entre 1-5:";
cin>>opcion;
}
while(opcion<1||opcion>5);
cout<<"teclee el primer valor: "<<endl;
cin>>a;
cout<<"teclee el segundo valor: "<<endl;
cin>>b;
switch (opcion)
{
case 1:resul=suma(a,b);
cout<<"El Resultado es: "<<resul<<endl; break;
return 0;
case 2:resul=resta(a,b);
cout<<"El Resultado es: "<<resul<<endl;
return 0;
case 3:resul=multiplicacion(a,b);
cout<<"El Resultado es: "<<resul<<endl;
return 0;
case 4:resul=division(a,b);
cout<<"El Resultado es: "<<resul<<endl;
return 0;
case 5:cout<<"gracias"<<endl;
return 0;
}
}
double suma(double x, double y)
{ z=a+b;
return z;}

double resta(double x, double y)


{ z=a-b;
return z;}

double multiplicacion(double x, double y)


{ z=a*b;
return z;}
double division(double x, double y)
{ z=a/b;
return z;}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 21

24. Desarrollar un programa que responda la condición de un estudiante a


partir de una nota obtenida: aprobado o desaprobado (considerar las
notas de 0-20), haciendo uso de funciones.

#include "iostream.h"
char calif(int Nobtenido, int Nminimo);
int main( )
{
int puntos, minimo_para_aprobar;
char calif_letra;
cout<<"teclee sus puntos";
cin>>puntos;
cout<<"y los puntos minimos que necesita para aprobar:\n";
cin>>minimo_para_aprobar;
calif_letra=calif(puntos, minimo_para_aprobar);
cout<<"Recibió "<<puntos<<" puntos\n"
<<"el mínimo para aprobar es: "<<minimo_para_aprobar<<endl;
if(calif_letra=='A')
cout<<"Aprobo. ¡Felicidades!\n";
else
cout<<"lo siento. Reprobó\n";
cout<<"se asentara "<<calif_letra
<<" en su expediente.\n";
return 0;
}

char calif(int Nobtenido, int Nminimo)


{
if(Nobtenido>=Nminimo)
return 'A';
else
return 'R';
}

25. Calcular el costo total por la compra la de articulos, incluyendo el IGV de


5%.

#include<iostream.h>
double costo_total(int cantidad_par, double precio_par);

int main( )
{ double precio, factura;
int cantidad;
cout<<"teclee el numero de articulos adquiridos: ";
cin>>cantidad;
cout<<"teclee el precio por articulo $:";
cin>>precio;
factura=costo_total(cantidad,precio);
cout<<cantidad<<" artículos a "

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 22

<<"$"<<precio<<" cada uno. \n"


<<"la factura total, con IGV, es de $"<<factura<<endl;
return 0;
}

double costo_total(int cantidad_par, double precio_par)


{ const double TASA_IGV=0.05; //5% igv
double subtotal;
subtotal=precio_par*cantidad_par;
return(subtotal+subtotal*TASA_IGV);
}

26. Metodo de la Burbuja haciendo uso de las funciones

#include <iostream.h>
int leer(int A[100], int n);
int burbuja(int [100], int n);
void imprimir(int [100],int);
int n;

main ( )
{ int n, A[100];
cout<<"ingresa cantidad de numeros:";
cin>>n;
leer(A,n);
burbuja(A,n);
return 0;
}
int leer(int A[100], int n)
{ int i;
for(i=1;i<=n;i++)
{ cout<<"A["<<i<<"]:";
cin>>A[i];
}
}
int burbuja(int A[100],int n)
{ int i,j,temp;
for(i=1;i<n;i++)
{ for(j=i+1;j<=n;j++)
{ if(A[i]>A[j])
{ temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
}
imprimir(A,n);
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 23

void imprimir(int A[100],int n)


{
int i;
cout<<"el nuevo arreglo ordenado es : "<<endl;
for(i=1;i<=n;i++)
{
cout<<" "<<A[i];
}
}

Burbuja con funciones en librería


Guardar el archivo leercade.h en la carpeta include de BC45 ó BC5 o en
cualquiera de la versiones de C.

leercade.h
#include"iostream.h"
int leer(int A[], int n)
{ int i;
for(i=1;i<=n;i++)
{ cout<<"A["<<i<<"]:";
cin>>A[i];
}
}
void imprimir(int A[],int n)
{ int i;
cout<<"el nuevo arreglo ordenado es : "<<endl;
for(i=1;i<=n;i++)
{ cout<<" "<<A[i];
}
}

Condigo normal en C++


#include <iostream.h>
#include <leercade.h>
int leer(int A, int n);
int burbuja(int [], int n);
void imprimir(int [],int);
int n;

main ( )
{ int n, A[100];
cout<<"ingresa cantidad de numeros:";
cin>>n;
leer(A,n);
burbuja(A,n);
return 0;
}
int burbuja(int A[],int n)

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 24

{ int i,j,temp;
for(i=1;i<n;i++)
{ for(j=i+1;j<=n;j++)
{ if(A[i]>A[j])
{ temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
}
imprimir(A,n);
}

FUNCIONES RECURSIVAS

27. La serie Fibonacci

#include<iostream.h>
#include<string.h>

long fibonacci(long);
int main( )
{
long numero, resultado;
cout << "\nIngrese un numero : ";
cin >> numero;
resultado = fibonacci(numero);
cout << "\nFibonacci (" << numero << ") : " << resultado<<endl;
return 0;
}

long fibonacci(long n)
{ if (n==0 || n==1)
return n;
else
return fibonacci(n-1) + fibonacci(n-2);
}

28. Factorial de un número

#include<iostream.h>
#include<conio.h>

long factorial(long);
int main( )
{
int n;
cout<<"ingrese faotorial";
cin>>n;

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 25

for(int i=1; i<=n; i++)


cout << "facorial de " << i << "! = " << factorial(i) << endl;
return 0;
}
long factorial (long numero)
{
if (numero<=1)
return 1;
else
return(numero * factorial(numero - 1));
}

29. Función Potencia

#include"iostream.h"
#include"stdlib.h"
long potencia(long x, long n);
main( )
{
long i,x,n;
cout<<"ingrese la base: ";
cin>>x;
cout<<"ingrese la potencia: ";
cin>>n;
for(i=0;i<n;i++)
cout<<x<<" elevado a la potencia "<<i<<" es: "<<potencia(x,i)<<endl;
return 0;
}
long potencia(long x, long n)
{
if(n==0)
return 1;
if(n>0)
return potencia(x,n-1)*x;
}

30. Numero binario

#include "iostream.h"
#include "conio.h"
int binario(int x);

main( )
{ int n;
cout<<"ingrese nro en base 10";
cin>>n;
cout<<"el nro en base 2 ="<<binario(n);
getch( );
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 26

int binario(int x)
{ //int x;
if(x==1)
return 1;
else
{ return ((binario(x/2)*10)+x%2);
}
}

31. Maximo Común Divisor.

#include<conio.h>
#include<stdio.h>
#include<iostream.h>
int mcd(int,int);

main( )
{ int x,y;
cout<<"\n ingrese el primer numero:";
cin>>x;
cout<<"\n ingrese el segundo numero:";
cin>>y;
cout<<"\n el maximo comun divisor entre\t"<<x<<"\tY\t"<<y;
cout<<" es :"<<mcd(x,y);
getch( );
}
int mcd(int n,int m)
{
if(n % m==0)
return(m);
else
mcd(m,n % m);
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 27

TEMA 3: ESTRUCTURA DE DATOS

TIEMPO ESTIMADO: 04 horas.

OBJETIVO:
El alumno será capaz de:
 Manejar varios tipos de datos en resolución de problemas
 Utilizar las estructuras anidas en la elaboración de algoritmos similares a las
bases de datos.
 Resolver problemas complejos de casos reales empleando estructuras.

EJERCICIOS:

32. Suma y resta de números reales y complejos


#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>

struct complejo
{ float real1;
float real2;
float complejo1;
float complejo2;
}numero;
main( )
{ float sumareal,sumacomplejo,restareal,restacomplejo;;
cout<<"ingrese el primer numero real: ";
cin>> numero.real1;
cout<<"ingrese el segundo numero real: ";
cin>> numero.real2;
cout<<endl;
cout<<"ingrese el primer numero complejo: ";
cin>> numero.complejo1;
cout<<"ingrese el segundo numero complejo: ";
cin>> numero.complejo2;
cout<<endl;
sumareal=numero.real1 + numero.real2;
sumacomplejo=numero.complejo1 + numero.complejo2;
restareal=numero.real1 - numero.real2;
restacomplejo=numero.complejo1 - numero.complejo2;
cout<<"la suma de los nuemeros reales es: "<<sumareal<<endl;
cout<<"la suma de los nuemeros complejos es:
"<<sumacomplejo<<endl;
cout<<endl;
cout<<"la resta de los numeros reales es: "<<restareal<<endl;
cout<<"la resta de los numeros complejos es: "<<restacomplejo;
getch( );
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 28

33. Datos del alumno y su promedio de notas

#include "iostream.h"
#include "iomanip.h"

struct Alumno
{ int codigo;
char curso[50];
int nota1;
int nota2;
int nota3;
float promedio;
};

Alumno AlumnoSec[2];

int main( )
{ int i, n;
cout<<"cuantos datos desea ingresar? ";
cin>>n;
for(i=1;i<=n;i++)
{ cout<<"Ingrese el código del estudiante "<<i<<" ";
cin>>AlumnoSec[i].codigo;
cout<<"Ingrese el curso del estudiante: ";
cin>>AlumnoSec[i].curso;
cout<<"Ingrese nota1: ";
cin>>AlumnoSec[i].nota1;
cout<<"Ingrese nota2: ";
cin>>AlumnoSec[i].nota2;
cout<<"Ingrese nota3: ";
cin>>AlumnoSec[i].nota3;
AlumnoSec[i].promedio =
AlumnoSec[i].nota1+AlumnoSec[i].nota2+AlumnoSec[i].nota3)/
3.0;

cout<<"el promedio es:"<<AlumnoSec[i].promedio<<endl;


}
cout<<setw(20)<<"CODIGO";
cout<<setw(20)<<"CURSO";
cout<<setw(20)<<"PROMEDIO"<<endl;
for(int c=1;c<=n;c++)
{ cout<<setw(20)<<AlumnoSec[c].codigo;
cout<<setw(20)<<AlumnoSec[c].curso;
cout<<setw(20)<<AlumnoSec[c].promedio<<endl;
}
return 0;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 29

34. Estructura - producto

#include "iostream.h"
#include "iomanip.h"
#include "iostream.h"

struct ventas
{ char cod_producto[50];
char nombre_producto[50];
double precio;
int cantidad;
double importe;
};

int main( )
{
const int numero=2;
ventas mante_ventas[numero];
cout<<"ingreso de productos"<<endl;
cout<<"--------------------"<<endl;
for(int i=0;i<=numero;i++)
{ cout<<"\n datos del productos"<<i+1<<endl;
cout<<"codigo: ";cin>>mante_ventas[i].cod_producto;
cout<<"Nombre: ";cin>>mante_ventas[i].nombre_producto;
cout<<"Precio: ";cin>>mante_ventas[i].precio;
cout<<"Cantidad: ";cin>>mante_ventas[i].cantidad;

mante_ventas[i].importe=(mante_ventas[i].cantidad*mante_ventas[i].precio);

}
cout<<"\n REPORTE DE PRODUCTOS"<<endl;
cout<<"-----------------------\n";
cout<<setiosflags(ios::left);

cout<<setw(10)<<"Codigo";
cout<<setw(15)<<"Nombre";
cout<<setw(10)<<"Precio";
cout<<setw(10)<<"Cantidad";
cout<<setw(10)<<"Importe"<<endl;
for(int c=0;c<=numero;c++)
{ cout<<setw(10)<<mante_ventas[c].cod_producto;
cout<<setw(15)<<mante_ventas[c].nombre_producto;
cout<<setw(10)<<mante_ventas[c].precio;
cout<<setw(10)<<mante_ventas[c].cantidad;
cout<<setw(10)<<mante_ventas[c].importe<<endl;
}
return 0;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 30

35. Estructuras Anidadas - libro

#include"iostream.h"
#include"iomanip.h"

struct Fecha_edicion
{ unsigned int dia;
unsigned int mes;
unsigned int anyo;
};

struct Datos_libro
{ char nombre[50];
char autor[30];
char editorial[30];
Fecha_edicion fecha;
};

struct Libro
{ Datos_libro datos_libro;
double costo;
};
main( )
{ Libro lib;
cout<<"Nombre del Libro: ";cin.getline(lib.datos_libro.nombre,51);
cout<<"Nombre del Autor: ";cin.getline(lib.datos_libro.autor,31);
cout<<"Nombre del Editorial: ";cin.getline(lib.datos_libro.editorial,50);
cout<<endl<<"Fecha de edición del libro"<<endl;
cout<<"Dia: ";cin>>lib.datos_libro.fecha.dia;
cout<<"Mes: ";cin>>lib.datos_libro.fecha.mes;
cout<<"Anyo: ";cin>>lib.datos_libro.fecha.anyo;
cout<<"Costo: ";cin>>lib.costo;
cout<<"LISTA DE DATOS"<<endl;
cout<<"LIBRO";
cout<<setw(20)<<"AUTOR";
cout<<setw(20)<<"EDITORIAL";
cout<<setw(20)<<"FECHA DE EDICION";
cout<<setw(20)<<"COSTO"<<endl;
cout<<lib.datos_libro.nombre;
cout<<setw(20)<<lib.datos_libro.autor;
cout<<setw(20)<<lib.datos_libro.editorial;
cout<<setw(20)<<lib.datos_libro.fecha.dia;
cout<<lib.datos_libro.fecha.mes;
cout<<lib.datos_libro.fecha.anyo;
cout<<setw(20)<<lib.costo<<endl;
return 0;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 31

TEMA 4: FICHEROS O ARCHIVOS

TIEMPO ESTIMADO: 04 horas.

OBJETIVO:
El alumno será capaz de:
 Elaborar algoritmos para crear y almacenar datos en un archivo
 Elaborar algoritmos para recuperar y modificar archivos de texto
 Elaborar algoritmos para almacenar textos y/o registros de datos

EJERCICIOS:

36. Lectura y escritura de un fichero


Escritura
#include <fstream.h>

void main( )
{ ofstream fichero("d:/ejemplo.txt");
fichero<<"Hola como estan deben irse a la casa "<<endl;
fichero << "Adios" << endl;
fichero.close( );
}

Lectura
#include <fstream.h>
#include <iostream.h>

main( )
{ fstream fichero;
char texto[200];
// Abro para lectura
fichero.open("d:/ejemplo.txt", ios::in); //io::in=modo entrada
fichero >> texto; // Leo una primera linea
while (!fichero.eof( )) // Mientras se haya podido leer algo //
eof:devuelve un valor distinto a cero
{ cout << texto << endl; // Muestro lo que lei
fichero >> texto; // Y vuelvo a intentar leer
}
fichero.close( ); // Finalmente, cierro
}

37. Implementación básica de archivo en c++


#include"fstream.h"
#include"iostream.h"
#include"stdlib.h"
#include"iomanip.h"
void grabar( );
void recuperar( );
void main( )

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 32

{ int opc;
for(;;)
{ cout<<setw(35)<<"Grabar 1"<<endl;
cout<<setw(35)<<"Recuperar 2"<<endl;
cout<<setw(35)<<"Salir 3"<<endl;
cout<<"ingrese la opcion: ";
cin>>opc;
switch(opc)
{ case 1:grabar( );break;
case 2:recuperar( );break;
case 3:exit(0);break;
default:cout<<"ingrese la opcion correcta"<<endl;break;
}
}
}

void grabar( )
{ char ruta[20];
char texto[200];
cout<<"ingrese el texto: ";
cin>>texto;
//cin.getline(texto,201);
cout<<"ingrese la unidad a grabar: ";
cin>>ruta;
ofstream fichero(ruta);
fichero<<texto<<endl;
fichero<<"Adios"<<endl;
fichero.close( );
}

void recuperar( )
{ char ruta[20];
fstream fichero;
char texto[200];
cout<<"ingrese la ruta";cin>>ruta;
fichero.open(ruta,ios::in);
if(fichero.bad( ))
{ cout<<"Error no se encuentra el archivo";
}
else
{ fichero>>texto;
while(!fichero.eof( ))
{ cout<<texto<<endl;
fichero>>texto;
}
}
fichero.close( );
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 33

38. Fichero haciendo uso de FILE *


Muestra un Fichero
#include <stdio.h>

void main( )
{ FILE *archdisco;
archdisco = fopen("c:/alumnos3.txt", "r");
fclose(archdisco);
getchar( );
}

Crear un archivo *.txt con el codigo y nombre del alumno


#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
struct {
char codigo[10];
char nombre[30];
} alumno;
void main( ) {
//clrscr( );
// captura de campos
cout<<"Digite su codigo :";
gets(alumno.codigo);
cout<<"Digite su nombre :";
gets(alumno.nombre);
// grabando a disco

FILE *archdisco;
archdisco = fopen("c:alumnos3.txt","a");
fwrite(&alumno,sizeof(alumno),1,archdisco);
fclose(archdisco);
//avisando usuario
cout<<"alumno insertado";
getchar( );
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 34

UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURIMAC


FACULTAD DE INGENIERIA
ESCUELA ACADÉMICO PROFESIONAL DE INGENIERÍA INFORMÁTICA Y SISTEMAS

GUÍA DE LABORATORIO DE ESTRUCTURA DE DATOS

DATOS ACADÉMICOS
Unidad : Segunda Unidad
Temas : Punteros, Arreglos Dinámicos, Listas, Pilas y Colas
Docentes : Ing. Francisco Cari Incahuanaco

TEMA 5: PUNTEROS Y ARREGLOS DINÁMICOS

TIEMPO ESTIMADO: 08 horas.

OBJETIVO:
El alumno será capaz de:
 Utilizar los operadores de referencia y de indirección para realizar algorimos
básicos.
 Ralizar algoritmos para gestionar la memoria dinámica haciendo uso de los
punteros o apuntadores.
 Realizar operaciones básicas con arreglos dinámicos unidimensionales y
bidimensionales.

EJERCICIOS:

39. Variable puntero que muestra el valor y la posición de memoria

#include"iostream.h"
#include"stdio.h"
#include"conio.h"

int main( )
{
int a, *p, *q;
cout<<"ingrese un valor ";
cin>>a;
p=&a;
q=p;

cout <<"en la direccion "<<q <<" esta el valor "<<*q <<" y p apunta a "
<<*p <<endl;
return 0;
// printf("en la direccion %X esta el valor %d y p apunta a %X", q, *q, *p);
// getch( );
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 35

40. Array con punteros que imprime la posición del elemento, memoria y el
valor que corresponde a cada elemento.

#include "iostream.h"

main( )
{ int A[10];
int n,i, suma=0;
int *p;
p=&A[0];
cout<<"ingrese cantidad de elementos del vector"<<endl;
cin>>n;
for(i=0;i<n;i++)
{ cout<<"A["<<i<<"]:";
cin>>A[i];
}
for(i=0;i<n;i++)
{ cout<<"A["<<i<<"]:"<<p<<" "<<*p<<endl;
suma=suma+*p;
p++;
}
cout<<"la suma de los elementos es:"<<suma<<endl;
return 0;
}

41. método de burbuja utilizando punteros

#include "iostream.h"

main( )
{
int A[10];
int n,i,j,temp;
int *p;

p=&A[0];

cout<<"ingrese cantidad de elementos del vector"<<endl;


cin>>n;

for(i=0;i<n;i++)
{ cout<<"A["<<i<<"]:";
cin>>A[i];
}
cout<<"elementos desordenados"<<endl;
for(i=0;i<n;i++)
cout<<*(p+i)<<endl;
cout<<"el arreglo ordenado es:"<<endl;
for(i=0;i<n;i++)

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 36

for(j=i+1;j<n;j++)
if(*(p+i)>*(p+j))
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
for(i=0;i<n;i++)
cout<<*(p+i)<<endl;
return 0;
}

42. Programa para demostrar apuntadores y variables dinámicas

#include"iostream.h"

int main( )
{
int *p1, *p2;

p1=new int;
*p1=42;
p2=p1;
cout<<"*p1=="<<*p1<<endl;
cout<<"*p2=="<<*p2<<endl;

*p2=53;
cout<<"*p1=="<<*p1<<endl;
cout<<"*p2=="<<*p2<<endl;

p1=new int;
*p1=88;
cout<<"*p1=="<<*p1<<endl;
cout<<"*p2=="<<*p2<<endl;

cout<<"Ojala haya entendido este ejemplo\n";


return 0;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 37

43. Arreglo Dinámico

EN C++

#include<conio.h>
#include<iostream.h>

main( )
{ int *arrayDinamico,tamano,i;
cout<<"ingresa el tamano del arreglo: ";
cin>>tamano;
arrayDinamico = new int;
for(i=0;i<tamano;i++)
{ cout<<"Valor para la posicion "<<"["<<i<<"]:";
cin>>arrayDinamico[i];
}
for(i=0;i<tamano;i++)
{ cout<<"["<<i<<"]:"<<*(arrayDinamico+i)<<endl;
}
return 0;
}

44. Arreglo dinámico con tipo definido

#include "iostream.h"

typedef int* ApuntInt;

int main( )
{ ApuntInt p;
int n,i;
cout<<"cuantos desea ingresar";
cin>>n;
p=new int ;

for(i=0;i<=n;i++)
{ cout<<"["<<i<<"]: ";
cin>>p[i];
}

for(i=0;i<=n;i++)
{ cout<<*(p+i)<<endl;
}
return 0;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 38

45. Método de ordenamiento insertion sort

Con puteros

#include "iostream.h"
typedef int* ApuntInt;
main( )
{ int n,i,j,k,aux;
ApuntInt p;
cout<<"ingrese cantidad de elementos: "<<endl;
cin>>n;
p=new int;
for(i=1;i<=n;i++)
{ cout<<"P["<<i<<"]:";
cin>>p[i];}
//metodo de insertion sort
for(i=2; i<=n;i++)
{ aux=*(p+i);
k=i-1;
while((k>=1)&&(aux<*(p+k)))
{ *(p+k+1)=*(p+k);
k=k-1;
}

*(p+k+1)=aux;
}
for(k=1;k<=n;k++)
cout<<*(p+k)<<endl;
return 0;
}

46. Método de ordenamiento insertion sort

Array Dinámico

#include "iostream.h"
typedef int* ApuntInt;
int main( )
{
ApuntInt p;
int n,i,k,aux;
cout<<"cuantos desea ingresar: ";
cin>>n;
p=new int ;

for(i=1;i<=n;i++)
{ cout<<"["<<i<<"]: ";
cin>>p[i];
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 39

for(i=2; i<=n;i++)
{ aux=p[i];
k=i-1;
while((k>=1)&&(aux<p[k]))
{ p[k+1]=p[k];
k=k-1;
}
p[k+1]=aux;
}
for(k=1;k<=n;k++)
cout<<p[k]<<endl;
return 0;

for(i=1;i<=n;i++)
{ cout<<*(p+i)<<endl;
}
return 0;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 40

TEMAS 6, 7, 8: LISTAS, PILAS Y COLAS


TIEMPO: 16 horas.

OBJETIVO:
El alumno será capaz de:
 Elaborar algoritmos que realicen operaciones con estructuras dinamicas de
datos líneales.
 Simular listas de datos y sus operaciones correspondientes.
 Simular operaciones con pilas mediante la lógica de la lista LIFO.
 Simular una cola a través de la lista FIFO y sus operaciones respectivas.

EJERCICIOS:

47. Ejemplo de una lista simple

#include "iostream.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"

struct elemento
{
char apellido[30];
char nombre[20];
float nota;
struct elemento *siguiente;
};

main( )
{
struct elemento *p;
struct elemento *q;
int n;
cout<<"numero de elemento";
cin>>n;
p=NULL;
for(n;n>0;n--)
{
q=new elemento;
q->siguiente = p;
p=q;
cout<<"apellidos: "; gets(q->apellido);
cout<<"nombres: "; gets(q->nombre);
cout<<"nota: "; cin>>q->nota;
}
q=p;
while(q!=NULL)
{
cout<<q->apellido<<" "<<q->nombre<<" "<<q->nota<<endl ;

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 41

q=q->siguiente;
}
getch( );
}

48. Lista que almacena un nodo

#include "iostream.h"
#include "stdlib.h"

struct Nodo
{ int dato;
Nodo *enlace;
};
typedef Nodo* ApuntNodo;

main( )
{ ApuntNodo cabeza;
int el_numero;
ApuntNodo apunt_temp;
apunt_temp=new Nodo;
if(apunt_temp==NULL)
{ cout<<"Error: No hay suficiente memoria";
exit(0);
}
cout<<"ingrese un elemento";
cin>>el_numero;
apunt_temp->dato=el_numero;
apunt_temp->enlace=cabeza;
cabeza=apunt_temp;
cout<<"el elemento ingresado es:"<<cabeza->dato<<endl;
return 0;
}

49. Implementacion de una lista con funciones

#include "iostream.h"
#include "stdlib.h"

struct Nodo
{
int dato;
Nodo *enlace;
};
typedef Nodo* ApuntNodo;
void insertar_cabeza(ApuntNodo& cabeza, int el_numero)
{
ApuntNodo apunt_temp;
apunt_temp=new Nodo;

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 42

if(apunt_temp==NULL)
{ cout<<"Error";
exit(1);
}
apunt_temp->dato=el_numero;
apunt_temp->enlace=cabeza;
cabeza=apunt_temp;
}

void imprimir(ApuntNodo cabeza)


{
cout<<"la lista es:";
//while( !=NULL)
//{ cout<<cabeza->dato<<endl;
cabeza=cabeza->enlace;
//}
}

void main( )
{ ApuntNodo cabeza;
int el_numero;
cout<<"ingrese el numero";
cin>>el_numero;
insertar_cabeza(cabeza,el_numero);
imprimir(cabeza);
}

50. Implementacion de una lista para almacenar varios nodos

#include "iostream.h"
#include "stdlib.h"
#include "conio.h"
struct Nodo
{ int dato;
Nodo *enlace;
};
typedef Nodo* ApuntNodo;

void insertar_cabeza(ApuntNodo &cabeza, int el_numero)


{ ApuntNodo apunt_temp;
apunt_temp=new Nodo;
if(apunt_temp==NULL)
{ cout<<"Error";
exit(1);
}
apunt_temp->dato=el_numero;
apunt_temp->enlace=cabeza;
cabeza=apunt_temp;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 43

void imprimir(ApuntNodo cabeza)


{ cout<<"la lista es:";
while(cabeza!=NULL)
{ cout<<cabeza->dato<<"->";
cabeza=cabeza->enlace;
} cout<<endl;
}

void main( )
{ ApuntNodo cabeza=NULL;
int el_numero;
char opc;
for(;;)
{ cout<<"Seleccione las opciones:"<<endl;
cout<<"<1> Insertar"<<endl;
cout<<"<2> Imprimir"<<endl;
cout<<"<3> Salir"<<endl;
opc=getche( );
cout<<endl;
switch(opc)
{ case '1': cout<<"ingrese el numero: ";
cin>>el_numero;
insertar_cabeza(cabeza,el_numero);
break;
case '2': imprimir(cabeza);
break;
case '3': exit(1);
}
}
}

51. Lista que almacena numeros enteros

#include "iostream.h"
#include "conio.h"
#include "stdlib.h"
#include "stdio.h"

struct Nodo
{
int dato;
Nodo *enlace;
};

typedef Nodo *ApuntNodo;

void insertar_cabeza(ApuntNodo &cabeza, int el_numero)


{ ApuntNodo apunt_temp;
apunt_temp=new(struct Nodo);

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 44

if(apunt_temp==NULL)
{
cout<<"Error";
exit(1);
}
apunt_temp->dato=el_numero;
apunt_temp->enlace=cabeza;
cabeza=apunt_temp;
}

void imprimir(ApuntNodo cabeza)


{ cout<<"la lista es:"<<endl;
while(cabeza!=NULL)
{ cout<<cabeza->dato;
cabeza=cabeza->enlace;
}
getch( );
}

void eliminarelemento(ApuntNodo &cabeza, int el_numero)


{ ApuntNodo apunt_temp,anterior;
apunt_temp=cabeza;
while(apunt_temp!=NULL)
{ if(apunt_temp->dato==el_numero)
{
if(apunt_temp==cabeza)
cabeza=cabeza->enlace;
else
anterior->enlace=apunt_temp->enlace;
delete(apunt_temp);
return ;
}
anterior=apunt_temp;
apunt_temp=apunt_temp->enlace;
}
}

void main( )
{ ApuntNodo cabeza=NULL;
int el_numero;
char opcion;
for(;;)
{ cout<<"Seleccione las Opciones"<<endl;
cout<<"(1) Insertar"<<endl<<"(2) Mostrar"<<endl
<<"(3) Eliminar "<<endl<<"(4) Salir"<<endl;
opcion=getche( );
cout<<endl;
switch(opcion)
{ case '1':

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 45

cout<<"Ingrese elemento: ";


cin>>el_numero;
insertar_cabeza(cabeza,el_numero);
break;
case '2':
imprimir(cabeza);
break;
case '3':
cout<<"Ingrese elemento: ";
cin>>el_numero;
eliminarelemento(cabeza, el_numero);
break;
}
if(opcion=='4') break;
}
}

52. Lista que almacena caracteres

#include<iostream.h>
#include<conio.h>
struct nodo

{ char dato;
nodo *sgt;
};
typedef nodo *puntero;

void inserta_inicio(puntero &lista,char valor);


void eliminarelemento(puntero &lista,char valor);
void ver_lista(puntero );

main( )
{ int op,pos,i=0;
char valor;
puntero lista=NULL;
do { clrscr( );
cout<<"===MENU==="<<endl;
cout<<"1: inserte al inicio"<<endl;
cout<<"2: eliminar un elemento"<<endl;
cout<<"3: ver lista"<<endl;
cout<<"4: salir"<<endl;
cout<<"ingrese su opcion..";
cin>>op;
switch(op)
{ case 1:cout<<"ingrese el valor : ";
cin>>valor;
inserta_inicio(lista,valor);
break;

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 46

case 2:cout<<"ingrese valor a eliminar: ";


cin>>valor;
eliminarelemento(lista, valor);
break;
case 3:ver_lista(lista);
getch( );
break;
}
}while(op!=4);
}

void inserta_inicio(puntero &lista, char valor)


{ puntero nuevo;
nuevo=new(struct nodo);
nuevo->dato=valor;
nuevo->sgt=lista;
lista=nuevo;
}

void eliminarelemento(puntero &lista,char valor)


{ puntero nuevo,anterior;
nuevo=lista;
while(nuevo!=NULL)
{
if(nuevo->dato==valor)
{
if(nuevo==lista)
lista=lista->sgt;
else
anterior->sgt=nuevo->sgt;
delete(nuevo);
return ;
}
anterior=nuevo;
nuevo=nuevo->sgt;
}
}
void ver_lista(puntero lista)
{
while(lista!=NULL)
{
cout<<"|"<<lista->dato<<"|->";
lista=lista->sgt;
}
getch( );
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 47

53. Lista que inserta nodos en forma ordenada

#include <conio.h>
#include <stdlib.h>
#include <iostream.h>

typedef struct nodo

{
int dato;
struct nodo *sig;
} NODO;

typedef NODO * PTRNODO;

void insertar(PTRNODO *inicio, int elemento)


{
PTRNODO anterior, actual, nuevo;
nuevo=new NODO;
if(nuevo!=NULL)
{
nuevo->dato=elemento;
nuevo->sig=NULL;
anterior=NULL;
actual=*inicio;

while(actual!=NULL &&elemento > actual->dato)


{
anterior=actual;
actual=actual->sig;
}

if(anterior==NULL)
{ // si es el inicio
nuevo->sig=*inicio;
*inicio=nuevo;
}
else
{ anterior->sig=nuevo;
nuevo->sig=actual;
}
}
else cout<<"Memoria insuficiente";
}

int eliminar (PTRNODO *inicio, int elemento)


{
PTRNODO anterior, actual, temp;
if(elemento==(*inicio)->dato)

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 48

{ // si es el primero
temp=*inicio;
*inicio=(*inicio)->sig;
free(temp);
return elemento;
}

else
{ anterior=*inicio;
actual=(*inicio)->sig;
while(actual!=NULL && actual->dato != elemento)
{
anterior=actual;
actual=actual->sig;
}
if(actual!=NULL)
{ temp=actual;
anterior->sig=actual->sig;
free(temp);
return (elemento);
}
else return (-1);
}
}

void imprimir(PTRNODO inicio)


{
cout<<"La lista es: ";
while(inicio!=NULL)
{
cout<<inicio->dato<<" ";
inicio=inicio->sig;
}
cout<<endl;
}

void main(void)
{ PTRNODO inicio=NULL;
char opcion;
int elemento;
for(;;)
{ cout<<"Seleccione las Opciones"<<endl;
cout<<"(1) Insertar"<<endl<<"(2) Eliminar"<<endl<<"(3)
Mostrar"<<endl<<"(4) Salir"<<endl;
//cout<<"Seleccion: ";
opcion=getche( );
cout<<endl;
switch(opcion)
{

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 49

case '1':
cout<<"Ingrese elemento: ";
cin>>elemento;
insertar(&inicio,elemento);
break;

case '2':
if(inicio==NULL) cout<<"No hay elementos<<endl";
else
{
cout<<"Ingrese elemento: ";
cin>>elemento;
elemento=eliminar(&inicio, elemento);
if(elemento==-1) cout<<"No existe el elemento"<<endl;
}
break;

case '3':
if(inicio==NULL) cout<<"No hay elementos"<<endl;
else
{
imprimir(inicio);
}
break;
}
if(opcion=='4') break;
}
}

54. Ejemplo de una pila

#include "iostream.h"
#include "conio.h"

typedef struct pila


{ int calve;
pila *sig;
}pila;

void apilar (pila **, int);


void desapilar (pila **);

main( )
{ int elem;
char opc;
pila *CAB=NULL;
do{ cout<<"1. Insertar"<<endl;
cout<<"2. Borrar"<<endl;

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 50

cout<<"3. Salir"<<endl;
cin>>opc;
switch (opc)
{case '1': cout<<"ingrese un numero:"; cin>>elem;
apilar(&CAB, elem);
break;
case '2': desapilar(&CAB);
getch( );
break;
case '3': cout<<"nada";
break;
} }
while(opc!='3');
return 0;
}

void apilar(pila **cab, int elem)


{ pila *aux=new(pila);
if(!aux)
{ cout<<"no hay memoria suficiente"; }
else
{ aux->calve=elem;
aux->sig=(*cab);
(*cab)=aux; }
return ;
}

void desapilar( pila **cab)


{ pila *aux=(*cab);
if((*cab))
{ cout<<"dato:" <<aux->calve<<endl;
(*cab)=aux->sig;
delete(aux);
}
else
cout<<"pila vacia";
return;
}

55. Ejemplo de una cola

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream.h>

void insertar(void);
void extraer(void);
void visualizar(void);

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 51

struct cola
{ char nombre[20];
struct cola *sig;
}*CAB=NULL,*AUX=NULL,*FIN=NULL;

main( )
{ char opc;
do
{ cout<<"1.- Insertar"<<endl;
cout<<"2.- Extraer"<<endl;
cout<<"3.- Visualizar la cola"<<endl;
cout<<"4.- Salir"<<endl;
opc=getch( );
switch(opc)
{ case '1':
insertar( );
break;
case '2':
extraer( );
break;
case '3':
visualizar( );
}
}
while (opc!='4');
return 0;
}
void insertar(void)
{ AUX=new cola;
printf("Nombre: ");
gets(AUX->nombre);
AUX->sig=NULL;
if (FIN==NULL)
FIN=CAB=AUX;
else
{ FIN->sig=AUX;
FIN=AUX;
}
}
void extraer(void)
{ if (CAB==NULL) return;
AUX=CAB;
CAB=CAB->sig;
free(AUX);
if (CAB==NULL)
{
FIN=AUX=NULL;
}
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 52

void visualizar(void)
{
if (CAB==NULL) return;
AUX=CAB;
while (AUX!=NULL)
{
cout<<"nombre:"<<AUX->nombre<<endl;
AUX=AUX->sig;
}
getch( );
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 53

UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURIMAC


FACULTAD DE INGENIERIA
ESCUELA ACADÉMICO PROFESIONAL DE INGENIERÍA INFORMÁTICA Y SISTEMAS

GUÍA DE LABORATORIO DE ESTRUCTURA DE DATOS

DATOS ACADÉMICOS
Unidad : Tercera Unidad
Temas : Arboles y Grafos
Docentes : Ing. Francisco Cari Incahuanaco

TEMAS 9,10: ARBOLES Y GRAFOS

TIEMPO ESTIMADO: 16 horas.

OBJETIVO:
El alumno será capaz de:
 Simular operaciones con estructuras dinámicas de datos no lineales.
 Emplear la estructura de arbol para resolver problemas de casos reales.
 Simular grafos en la solución de problemas de costo-beneficio.

EJERCICIOS:

56. Implementación de un arbol

#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

struct nodo
{ int dato;
struct nodo *izq,*der;
};

void print(struct nodo *r);


void ins(struct nodo **,int);
void imp_in(struct nodo *);
void imp_pre(struct nodo *);
void imp_pos(struct nodo *);
struct nodo *nvonodo(int);
struct nodo *localizar(struct nodo,int);
void reemplazar(struct nodo **);
void eliminar(struct nodo **,int);
void imp_in(struct nodo *r)

{ if(r!=NULL)
{ imp_in(r->izq);

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 54

cout<<r->dato<<" ";
imp_in(r->der);
}
}
void imp_pre(struct nodo *r)
{ if(r!=NULL)
{ cout<<r->dato<<" ";
imp_pre(r->izq);
imp_pre(r->der);
}
}
void imp_pos(struct nodo *r)
{ if(r!=NULL)
{ imp_pos(r->izq);
imp_pos(r->der);
cout<<r->dato<<" ";
}
}

void ins(struct nodo **r,int x)


{ if(*r==NULL)
*r=nvonodo(x);
else
{ if(x<(*r)->dato)
ins(&((*r)->izq),x);
else
{ if(x>(*r)->dato)
ins(&((*r)->der),x);
}
}
}

struct nodo *nvonodo(int x)


{ struct nodo *q;
q=new nodo;
q->dato=x;
q->izq=NULL;
q->der=NULL;
return q;
}

struct nodo *localizar(struct nodo *r, int x)


{ if(r!=NULL)
return NULL;
else
{ if(r->dato==x)
return r;
else
{ if(x<r->dato)

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 55

return localizar(r->izq,x);
else
return localizar(r->der,x);
}
}
}

void eliminar(struct nodo **r, int x)


{ struct nodo *q;
if(*r==NULL)
{ cout<<"elemento no encontrado";}
else
{ if(x<(*r)->dato)
eliminar(&(*r)->izq,x);
else
if(x>(*r)->dato)
eliminar(&(*r)->der,x);
else
{ q=*r;
if(q->izq==NULL)
*r=q->der;
else
if(q->der==NULL)
*r=q->izq;
else
reemplazar(&q);
delete q;
}
}
}

void reemplazar(struct nodo **n)


{ struct nodo *a,*p;
p=*n;
a=(*n)->izq;
while(a->der)
{ p=a;
a=a->der;
}
(*n)->dato=a->dato;
if(p==*n)
p->izq=a->izq;
else
p->der=a->izq;
*n=a;
}

void print(struct nodo *r)

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 56

{ int o;
do
{
//clrscr( );
cout<<"\t\nlos elementos del arbol son:"<<endl;
cout<<"1.-en orden(IRD)"<<endl;
cout<<"2.-en pre_orden(RID)"<<endl;
cout<<"3.-en post_orden(IDR)"<<endl;
cout<<"4.-salir"<<endl;
cout<<"opcion"<<endl;
cin>>o;
getch( );
if(o==1)
{
//clrscr( );
imp_in(r);
getch( );
}
if(o==2)
{
//clrscr( );
imp_pre(r);
getch( );
}
if(o==3)
{ //clrscr( );
imp_pos(r);
getch( );
}
}
while(o>0 && o<4);
}

void main( )
{ struct nodo *r=NULL;
int x;
int op=1,op2=2;
while(op!=0)
{ //clrscr( );
cout<<"\t\n1.-insertar";
cout<<"\t\n2.-eliminar";
cout<<"\t\n3.-imprimir";
cout<<"\t\n4.-buscar";
cout<<"\t\n0.-salir";
cout<<"\t\nopcion"<<endl;
cin>>op;
if(op==1)
{ while(op2==2)
{ //clrscr( );

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 57

cout<<"insertar"<<endl;
cout<<"introduce 1 valor"<<endl;
cin>>x;
ins(&r,x);
cout<<"1.-imprimir 2.-nvo. dato 3.-menu"<<endl;
cin>>op2;
getch( );
}
}

if(op2==1)
{ //clrscr( );
cout<<"imprimir"<<endl;
print(r);
cout<<" 2.-nvo. dato 3.-menu"<<endl;
cin>>op2;
getch( );
}

if(op==2)
{
while(op==2)
{ //clrscr( );
cout<<"eliminar"<<endl;
cout<<"introduce 1 valor"<<endl;
cin>>x;
eliminar(&r,x);
cout<<"1.-imprimir 2.-nvo. dato 3.-menu"<<endl;
cin>>op2;
getch( );
}
}

if(op2==2)
{ //clrscr( );
cout<<"eliminar"<<endl;
print(r);
cout<<" 2.-nvo. dato 3.-menu"<<endl;
cin>>op2;
getch( );
}
if(op==3)
{ //clrscr( );
cout<<"impresion"<<endl;
print(r);
getch( );
}
if(op==4)
{

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 58

int a;
//clrscr( );
cout<<"dato a buscar"<<endl;
cin>>a;
localizar(r,a);
cout<<"dato encontrado"<<endl;
cout<<r->dato;
getch( );
}
}
}

57. Implementación de un grafo

#include<iostream.h>
#include<conio.h>
#define m 10
int g[m][m];
void menu();
void iniciar(int,int,int);
void escribe(int);
void verticemenos(int);
void verticemas(int);
void aristamenos(int);
void aristamas(int);
void taristas(int);
void saristas(int,int);
void earistas(int,int);
int numvertice(int[m][m]);
int buscavertice(int,int);
void camino(int);

void menu( )
{
clrscr( );
cout<<"1 = inicia grafo"<<endl;
cout<<"2 = agrega vertice"<<endl;
cout<<"3 = agrega arista"<<endl;
cout<<"4 = eliminar vertice"<<endl;
cout<<"5 = elimina arista"<<endl;
cout<<"6 = mostrar camino vertice"<<endl;
cout<<"7 = mostrar grafo"<<endl;
cout<<"8 = total de aristas"<<endl;
cout<<"9 = total de vertices"<<endl;
cout<<"10 = total de aristas de salida para un vertice"<<endl;
cout<<"11 = total de aristas de entrada para un vertice"<<endl;
cout<<"12 = salir"<<endl;
cout<<"Elija opcion :"<<endl;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 59

void taristas(int grafo[m][m])


{
if(grafo[0][0]==0)
{ cout<<"grafo vacio"<<endl;
}
else
{ int contador=0;
for(int i=1;i<=numvertice(g);i++)
{ for(int j=1;j<=numvertice(g);j++)
{ if(grafo[i-1][j]==1)
contador=contador+1;
}
}
cout<<"El numero total de aristas es : "<<contador;
}
}

void saristas(int grafo[m][m],int vertice)


{ if(grafo[0][0]==0)
{ cout<<"grafo vacio"<<endl;
}
else
{ int contador=0;
for(int i=1;i<=numvertice(g);i++)
{ if(grafo[vertice-1][i]==1)
contador=contador+1;
}
cout<<"El numero de aristas que salen del vertice "
<<vertice<<" son "<<contador;
}
}

void earistas(int grafo[m][m],int vertice)


{ if(grafo[0][0]==0)
{ cout<<"grafo vacio"<<endl;
}
else
{ int contador=0;
for(int i=1;i<=numvertice(g);i++)
{ if(grafo[i-1][vertice]==1)
contador=contador+1;
}
cout<<"El numero de aristas que entran en el vertice "
<<vertice<<" son "<<contador;
}
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 60

int buscavertice(int vertice,int grafo[m][m])


{ int i,existe,num;
i=0;
existe=0;
num=numvertice(g);
while(existe==0&&i<num)
{ if(grafo[i][0]==vertice)
existe=1;
else
i=i+1;
}
return existe;
}
int numvertice(int grafo[m][m])
{ int contador;
contador=0;
while(grafo[contador][0]!=0)
{ contador=contador+1;
}
return contador;
}

void aristamas(int grafo[m][m])


{ int origen,destino;
cout<<"ingrese vertice de origen :";cin>>origen;
cout<<"ingrese vertice de destino :";cin>>destino;
if(buscavertice(origen,g)==1)
{ if(buscavertice(destino,g)==1)
{ grafo[origen-1][destino]=1;
cout<<"arco agregado"<<endl;
}
else
{ cout<<"vertice de destino no existe"<<endl;
}
}
else
{ cout<<"vertice de origen no existe"<<endl;
}
}

void verticemas(int grafo [m][m])


{ int i;
i=0;
while(grafo[i][0]!=0)
{ i=i+1;
}
grafo[i][0]=i+1;
cout<<"vertice agregado"<<endl;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 61

void escribe(int grafo[m][m])


{ int i,j,contador;
if(grafo[0][0]==0)
{ cout<<"grafo vacio"<<endl;
}
else
{ contador=0;
while(grafo[contador][0]!=0)
{ contador=contador+1;
}
for(i=0;i<contador;i=i+1)
{ cout<<"\t"<<i+1;
}
cout<<"\n"<<endl;
for(i=0;i<contador;i=i+1)
{ cout<<i+1<<"\t";
for(j=1;j<contador+1;j++)
{ cout<<grafo[i][j]<<"\t";
}
cout<<endl;
}
}
}

void iniciar(int n,int h,int grafo[m][m])


{ int i,j;
for(i=0;i<n;i++)
{ for(j=0;j<h;j++)
{ grafo[i][j]=0;
}
}
}

void aristamenos(int grafo[m][m])


{ int origen,destino;
if(grafo[0][0]==0)
{ cout<<"grafo vacio"<<endl;
}
else
{ cout<<"ingrese vertice de origen : ";cin>>origen;
cout<<"ingrese vertice de destino : ";cin>>destino;
if(buscavertice(origen,g)==1)
{ if(buscavertice(destino,g)==1)
{ grafo[origen-1][destino]=0;
cout<<"arco eliminado"<<endl;
}
else
{ cout<<"vertice de destino no existe"<<endl;
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 62

else
{ cout<<"vertice de origen no existe"<<endl;}
}
}

void verticemenos(int grafo[m][m])


{ int j,contador,origen;
if(grafo[0][0]==0)
{ cout<<"grafo vacio"<<endl;
}
else
{ cout<<"ingrese vertice a eliminar : ";cin>>origen;
if(buscavertice(origen,g)==1)
{ contador=numvertice(g);
for(j=1;j<contador;j++)
{ grafo[origen-1][j]=0;
grafo[j-1][origen]=0;
}
cout<<"vertice eliminado";
}
else
{ cout<<"vertice no existe";
}
}
}

void camino(int grafo[m][m])


{ int j,contador,origen,destino;
if(grafo[0][0]==0)
{ cout<<"grafo vacio"<<endl;
}
else
{ cout<<"ingrese vertice de origen : ";cin>>origen;
cout<<"ingrese vertice de destino : ";cin>>destino;
if(buscavertice(origen,g)==1)
{ if(buscavertice(destino,g)==1)
{ if(grafo[origen-1][destino]==1)
cout<<origen<<"->"<<destino;
else cout<<"no hay camino";
}
else
{ cout<<"vertice de destino no existe"<<endl;
}
}
else
{ cout<<"vertice de origen no existe"<<endl;
}
}
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 63

void main()
{ int op;
op=-1;
while(op!=12)
{ menu();
cin>>op;
switch(op)
{ case 1:clrscr();
iniciar(10,10,g);
cout<<"grafo iniciado"<<endl;
getch();
break;
case 2:clrscr();
verticemas(g);
getch();
break;
case 3:clrscr();
aristamas(g);
getch();
break;
case 4:clrscr();
verticemenos(g);
getch();
break;
case 5:clrscr();
aristamenos(g);
getch();
break;
case 6:clrscr();
camino(g);
getch();
break;
case 7:clrscr();
escribe(g);
getch();
break;
case 8:clrscr();
taristas(g);
getch();
break;
case 9:clrscr();
cout<<"El numero de vertices del grafo son :
"<<numvertice(g);
getch();
break;

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.


ESTRUCTURA DE DATOS 64

case 10:clrscr();
int a;
cout<<"Ingrese el vertice :";cin>>a;
saristas(g,a);
getch();
break;
case 11:clrscr();
int b;
cout<<"Ingrese el vertice :";cin>>b;
earistas(g,b);
getch();
break;
case 12:clrscr();
cout<<"termino el programa"<<endl;
getch();
break;
}
}
}

Ingeniería Informática y Sistemas - UNAMBA Ing. Francisco Cari I.

Вам также может понравиться