Sunteți pe pagina 1din 10

Segunda Evaluación en

Línea
Algoritmos y Estructura de Datos
II Ciclo
Ingeniería de Sistemas

DATOS DE IDENTIFICACIÓN

CURSO : Algoritmos y Estructura de datos

FECHA DE ENTREGA : 11/12/2010

SEMESTRE ACADÉMICO :

ESTUDIANTE :

FACULTAD :

ESCUELA PROFESIONAL :

PROFESOR : Ing. Rosa América Cobeñas Sánchez

Programa Académico de Educación


a Distancia
Segunda Evaluación en Línea
Indicaciones Generales
Desarrolle cada pregunta, según las instrucciones de cada ítem.
I. TEORÍA:
1. Mencione y describa las principales funciones para el manejo de cadenas:( 2 PTOS)
a)
b)
c)
d)
e)

2. ¿Cual de los métodos de ordenamiento y búsqueda elegiría y porque?, tenga en cuenta


que tiene que implementar un algoritmo para ordenar datos en una entidad bancaria donde
se manejan miles de registros.( 3 PTOS)
a) SELECCIÓN
b) INSERCION
c) BURBUJA

II. INSTRUCCIONES: Diseñe un algoritmo en Pseudocódigo, diagrama N-S y diagrama de


flujo para cada uno de los siguientes algoritmos.( 3 PTOS cada uno)
1. Diseñe un algoritmo que halle el mayor de cada fila de una matriz de N filas y M
columnas y los almacene en un vector:

Puede Tomar de ejemplo la siguiente matriz:

80 40 50 70
10 27 42 31
15 30 25 10
90 5 175 85
55 35 45 105

2. Diseñar un algoritmo que encuentre el menor y mayor valor del siguiente vector:

A[]= 70 80 100 50 20 10 30 60 35 40

3. Diseñe un algoritmo que determine cuantos elementos son mayores e iguales a 20 y


cuantos elementos son menores a 20, en un conjunto de N números enteros almacenados
en un vector.

N=10
A[]= 15 30 12 50 70 30 25 35 33 13

4. Diseñe un algoritmo que permita ingresar una frase y una palabra a buscar, y determine si
encontró la palabra o no.

2
5. Diseñe un algoritmo para ordenar el siguiente vector, utilice el método de ordenamiento
por selección.

N=10
A[]= 15 30 12 50 70 30 25 35 33 13

DESARROLLO
1. Mencione y describa las principales funciones para el manejo de cadenas

 Calculo de la longitud
 comparacion
 concatenacion
 extracción de subcadenas
 búsqueda de informacion

 Las funciones de copiado strncat(), strncmp() y


strncpy() son versiones más restringidas que sus contrapartes
más generales. Realizan una tarea similar, pero solamente para
los primeros n caracteres. Observar que el caracter de
terminación NULL podría ser violado cuando se usa estas
funciones, por ejemplo:

char *s1 = "Hola";


char *s2 = 2;
int longitud = 2;

(void) strncpy(s2, s1, longitud); /* s2 = "Ho" */

donde s2 no tiene el terminador NULL.

 La función strcmp() compara lexicográficamente las dos


cadenas y regresa:

*Menor que cero -- si s1 es léxicamente menor que s2;

*Cero -- si s1 y s2 son léxicamente iguales;

*Mayor que cero -- si s1 es léxicamente mayor que s2;

 *char *strcpy(const char *dest, const char *orig) -- Copia la cadena de


caracteres apuntada por orig (incluyendo el carácter terminador '\0') al
vector apuntado por dest. Las cadenas no deben solaparse, y la de
destino, debe ser suficientemente grande como para alojar la copia.
 int strcmp(const char *s1, const char *s2) -- Compara las dos cadenas de
caracteres s1 y s2. Devuelve un entero menor, igual o mayor que cero
si se encuentra que s1 es, respectivamente, menor que, igual a, o
mayor que s2.
 char *strerror(int errnum) -- Devuelve un mensaje de error que
corresponde a un número de error.

3
 int strlen(const char *s) -- Calcula la longitud de la cadena de caracteres.
 char *strncat(char *s1, const char *s2, size_t n) -- Agrega n caracteres de
s2 a s1.
 int strncmp(const char *s1, char *s2, size_t n) -- Compara los primeros n
caracteres de dos cadenas.
 char *strncpy(const char *s1, const char *s2, size_t n) -- Copia los
primeros n caracteres de s2 a s1.
 strcasecmp(const char *s1, const char *s2) -- versión que ignora si son
mayúsculas o minúsculas de strcmp().
 strncasecmp(const char *s1, const char *s2, size_t n) -- versión insensible
a mayúsculas o minúsculas de strncmp() que compara los primeros n
caracteres de s1.

2. ¿Cual de los métodos de ordenamiento y búsqueda elegiría y porque?, tenga en cuenta


que tiene que implementar un algoritmo para ordenar datos en una entidad bancaria donde
se manejan miles de registros.( 3 PTOS)
a) SELECCIÓN
b) INSERCION
c) BURBUJA

SOLUCION 1

Num : arreglo [1..5] [1..5] de enteros


vec: arreglo [1..5] de enteros
x:,y entero
may: entero
con: entero
Inicio
Con=0;

Para x 1 hasta 5 hacer


Para y 1 hasta 5 hacer
Escribir (‘ingrese valores numero’,x,’?’)
Leer (Num[x][y])
Fin _ para
Fin _ para

__ hallando el mayor de cada fila------

Para x1 1 hasta 5 hacer


May<-num[x1][0]

Para y1 1 hasta 5 hacer


Si (num[x1][y1]>may) entonces
Vec[con]<-num[x1][y1]
Con<-con+1
Fin_si

Fin _ para
Fin _ para
fin

4
SOLUCION 2

variables
Num : arreglo [1..10] de enteros
X: entero
may: entero
men<-entero

Inicio
may<-0;
Para x 1 hasta 10 hacer
Escribir (‘ingrese valores numero’,x,’?’)
Leer (Num[x])
Fin _ para
-----hallando el mayor --------
Para y1 1 hasta 10 hacer
si(num[y1]>may) entonces
may<-num[y1];
fin_si
Fin _ para
-----------------------------------

Hallando el menor
men<-may

Para y2 1 hasta 10 hacer


si(num[y2]<men) entonces
men<-num[y2];
fin_si

Fin _ para
----------------------------------------
Escribir(‘el numero mayor es’,may)
Escribir(‘el numero menor es’,men)
Fin

OTRA SOLUCIÒN
A[]=

Algoritmo:

1. Inicializar el vector A[] de N valores.


2. variable Z tipo entero.
3. variable X tipo entero.
4. inicia ciclo desde X = 0 y Z = 0.
5 Si el valor del índice X del vector es mayor que Z, entonces Z es igual a ese valor.
6. Sumarle uno a X.
7. Si X es menor a N ir al paso 5. en caso contrario ir al 8.
8. Regresar valor de Z como el mayor de A[].
9 FIN.

5
Código
inicio
//declarando el vector
int A[10];
//poblando el array de números
A[0] = 70;
A[1] = 80;
A[2] = 100;
A[3] = 50;
A[4] = 20;
A[5] = 10;
A[6] = 30;
A[7] = 60;
A[8] = 35;
A[9] = 40;
//declarando un entero que contendrá el número mayor
int numMayor = 0;
//ciclo para recorrer el array
for (int i=0; i<5; i++)
{
if (A[i] > numMayor)
{
numMayor = A[i];
}
}

SOLUCION 3

Inicio
variables
Num : arreglo [1..10] de enteros
X: entero
Con1: entero
Con2 <-entero

Inicio
Con1<-0;
Con2<-0;

Para x 1 hasta 10 hacer


Escribir (‘ingrese valores numero’,x,’?’)
Leer (Num[x])
Fin _ para

--- hallando elementos mayores e iguales a 20 y menores a 20----


Para x2 1 hasta 10 hacer
Si(Num[x]>=20 )entonces
Con1<-con1+1

6
Fin_si

Si(Num[x]<20 )entonces
Con2<-con2+1
Fin_si

Fin _ para

Escribir(‘elementos mayores o iguales a 20’,con1)


Escribir(‘elementos menores a 20’,con2)
Fin

SOLUCION 4

esta_en_frase(cadena palabra[], cadena frase[]) es entero


{
//funcion que regresa la posicion de "palabra" en "frase"
//regresa -1 si no encuentra la palabra en la frase
i,j,x,y,b1,b2 :entero
//obtenemos las longitudes de las palabras
x=longitud(frase);
y=longitud(palabra);
//Indicamos que aun no hemos encontrado la palabra en la frase
b1=-1;
//ciclo que recorre la frase
para(j=0 hasta j<x-y+1)//pregunta 1: porque no hay que recorrer hasta el final
de la frase?

//indicamos que no hemos encontrado letras diferentes


b2=0;
//ciclo que recorre la palabra
para i<-0 hasta i<y
si(palabra[i]!=frase[j+i]) entonces//buscamos si algun caracter no coincide con
la palabra
fin_si
//si una letra no cincide, pues le paramos
b2++;//hay al menos una letra diferente

fin_para
si(b2=0)entonces//si no encontramos letras distintas en la frase, es que
acabamos de encontrar la palabra en la frase!

b1=j;//posicion donde encontramos la palabra


retornar b1;//regresamos valor y termina la funcion

7
}
retornar b1;//si llegamos aqui es que no encontramos la palabra
}

inicio()
{
Z: entero
Frase[200], palabra[25] : cadena
escribir (‘Ingrese una linea de texto’)
leer(frase)
escribir (‘Ahora ingrese la palabra de cual desea saber su ubicación’)
leer(palabra)
z=esta_en_frase(palabra,frase)
si(z>=0) entonces
escribir(‘La palabra ( "<<palabra<<" ) inicia en la posicion ‘)
sino
escribir(‘La palabra no se encuentra en la frase’)
fin
___

Comprobación en c

#include<iostream>
#include<string>
#include<conio>
using namespace std;int esta_en_frase(char palabra[], char frase[])
{
//funcion que regresa la posicion de "palabra" en "frase"
//regresa -1 si no encuentra la palabra en la frase
int i,j,x,y,b1,b2;
//obtenemos las longitudes de las palabras
x=strlen(frase);
y=strlen(palabra);
//Indicamos que aun no hemos encontrado la palabra en la frase
b1=-1;
//ciclo que recorre la frase
for(j=0;j<x-y+1;j++)//pregunta 1: porque no hay que recorrer hasta el final de la
frase?
{
//indicamos que no hemos encontrado letras diferentes
b2=0;
//ciclo que recorre la palabra
for(i=0;i<y;i++)
if(palabra[i]!=frase[j+i])//buscamos si algun caracter no coincide con la palabra
{
//si una letra no cincide, pues le paramos
b2++;//hay al menos una letra diferente

8
break;
}
if(b2==0)//si no encontramos letras distintas en la frase, es que acabamos de
encontrar la palabra en la frase!
{
b1=j;//posicion donde encontramos la palabra
return b1;//regresamos valor y termina la funcion
}
}
return b1;//si llegamos aqui es que no encontramos la palabra
}

int main()
{
int z;
char frase[200], palabra[25];
cout<<"Ingrese una linea de texto"<<endl;
cin.getline(frase, 200);
cout<<"\nAhora ingrese la palabra de cual desea saber su ubicacion"<<endl;
cin.getline(palabra, 25);
z=esta_en_frase(palabra,frase);
if(z>=0)
cout<<"La palabra ( "<<palabra<<" ) inicia en la posicion "<<z<<endl;
else
cout<<"La palabra no se encuentra en la frase"<<endl;
getch();
}

SOLUCION 5

Algoritmo seleccion
Var
Num : arreglo [1..10] de enteros
I,j,k,tem : enteros
Inicio
Para x 1 hasta 5 hacer
Escribir (‘ingrese valores numero’,x,’?’)
Leer (Num[x])

Fin _ para

Para i<-0 hasta 5 hacer

K=i
9
Para j<- 0 hasta 5 hacer
Si (a[j]>a[k]) entonces

temp=a[j]
a[j]=a[k];
a[k]=temp;
fin_si
fin _para
escribir (‘lista ordenada’);
para i<-0 hasta 5
escribir(a[i]) -- muetra la lista ordenada
fin para
fin

comprobación en c

//orde por seleeccion


#include<stdio.h>
#define max 5
main()
{int a[max],i,j,k,temp;
for(i=0;i<max;i++){
printf("\n\ra[%d]:",i);
scanf("%d",&a[i]);
}
printf("\n\r Lista en Desorden\n\r");
for(i=0;i<max;i++)
printf("%5d",a[i]);

for(i=0;i<max;i++){
k=i;
for(j=0;j<max;j++)
if (a[j]>a[k])
{
temp=a[j];
a[j]=a[k];
a[k]=temp;
}
}
printf("\n\r Lista en Orden\n\r");
for(i=0;i<max;i++)
printf("%5d",a[i]);
}

10

S-ar putea să vă placă și