Está en la página 1de 43

EJERCICIO

Una ONG tiene puntos de reparto de vacunas que se pretende funcionen de la siguiente manera. Cada da,
empezar con 1000 vacunas disponibles y a travs de un programa que controla las entregas avisar si el
inventario baja de 200 unidades. Desarrollar pseudocdigo y diagrama de flujo.

SOLUCIN

Pseudocdigo:

1. Inicio [Control de Vacunas]


2. Existencias = 1000
3. Mientras Existencias >= 200 Hacer
Mostrar Introduzca el nmero de unidades entregadas
Pedir Entregadas
Existencias = Existencias Entregadas
Repetir
4. Mostrar El inventario ha bajado de 200 unidades. Debe comunicarlo

5. Fin

Comentarios: La variable Existencias funciona como un acumulador que parte de un valor inicial y cuyo
valor tras un movimiento depende de su contenido precedente.

Diagrama de flujo:

EJERCICIO

Un vivero forestal actualiza cada seis meses los precios de la planta que vende en funcin de los valores
oficiales de inflacin mensual. Desean desarrollar un programa que proporcione el precio actualizado a partir
del precio anterior y los valores de inflacin.

SOLUCIN

Consideramos que una vez transcurre el mes el nuevo precio es:

El siguiente mes el precio a aplicar ya no es el inicial, sino el precio afectado por la inflacin.

Pseudocdigo:

1. Inicio [Actualizacin Precios de Plantas]

2. Mostrar Introduzca el precio actual


3. Pedir Actual
4. Nuevo = Actual
5. Desde i = 1 hasta 6 Hacer
Mostrar Introduzca la inflacin del mes, i
Pedir inf(i)
Nuevo = Nuevo * (1 + inf(i) / 100)
Siguiente
6. Mostrar El precio nuevo del producto debe ser, Nuevo
7. Fin

Diagrama de flujo:

EJERCICIO

Desarrollar el pseudocdigo y diagrama de flujo para un algoritmo que calcule la superficie de un terreno que
le corresponde a un heredero despus de n generaciones, partiendo de una superficie inicial en la generacin
cero. Se supone que hay divisin a partes iguales entre herederos.

SOLUCIN

Organizacin previa de variables:

Descripcin - Uso

VARIABLE

Almacena el nmero de generaciones

Hgen(1), Hgen(2), ..., Hgen(n)

Array de las variables que almacenan el nmero de herederos

Supin

Superficie inicial (generacin 0)

Toca

Superficie que toca al heredero actualmente considerado

Pseudocdigo y diagrama de flujo

1. Inicio [Superficie herederos]


2. Mostrar Cul es el nmero de generaciones? : Pedir n
3. Mostrar Cul es la superficie inicial? : Pedir Supin

4. Toca = Supin
5. Desde i = 1 hasta n Hacer
Mostrar Cul es el nmero de herederos de la generacin, i, ?
Pedir Hgen(i)
Toca = Toca / Hgen(i)
Siguiente
6. Mostrar Al heredero actual le corresponde una superficie de, Toca
7. Fin

11 - Ejercicios resueltos
[Introduccin a la programacin - Pseudocdigo y
Python]
Anterior

Posterior

11 - Ejercicios resueltos
a) Enunciados

1.- Crear un algoritmo que escriba "Hola" cinco veces.


2.- Crear un algoritmo que pida al usuario un nmero y le diga si es positivo, negativo o
cero.
3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma.
4.- Crear un algoritmo que calcule la raz cuadrada del nmero que introduzca el usuario. Si
se introduce un nmero negativo, debe mostrar un mensaje de error y volver a pedirlo
(tantas veces como sea necesario).
5.- Crear un algoritmo que pida al usuario un nmero y un smbolo, y dibuje un cuadrado
usando ese smbolo. El cuadrado tendr el tamao que ha indicado el usuario. Por ejemplo,
si el usuario introduce 4 como tamao y * como smbolo, deber escribirse algo como:
****
****
****
****

b) Ejemplos de soluciones con PseInt

1.- Crear un algoritmo que escriba "Hola" cinco veces.


// 1.- Crear un algoritmo que escriba "Hola" cinco veces.
Proceso Resuelto01
Para x <- 1 Hasta 5 Hacer
Escribir "Hola";
FinPara
FinProceso

2.- Crear un algoritmo que pida al usuario un nmero y le diga si es positivo, negativo o
cero.
// 2.- Crear un algoritmo que pida al usuario un numero y le diga si es
positivo, negativo o cero.
Proceso Resuelto02
Escribir "Dime un numero";
Leer x;
Si x > 0 Entonces
Escribir "Es positivo";
Sino
Si x < 0 Entonces
Escribir "Es negativo";
Sino
Escribir "Es cero";
FinSi
FinSi
FinProceso

3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma.


// 3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma.
// Forma (a), sin usar matrices
Proceso Resuelto03
suma <- 0
Para x <- 1 Hasta 5 Hacer
Escribir "Dime un dato";
Leer x;
suma <- suma + x;
FinPara
Escribir "Su suma es ", suma;
FinProceso

o de forma alternativa, usando matrices:


// 3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma.
// Forma (b), usando matrices
Proceso Resuelto03
Dimension dato[5]
Para x <- 1 Hasta 5 Hacer
Escribir "Dime un dato";
Leer dato[x];
FinPara
suma <- 0
Para x <- 1 Hasta 5 Hacer
suma <- suma + dato[x];
FinPara
Escribir "Su suma es ", suma;

FinProceso

4.- Crear un algoritmo que calcule la raz cuadrada del nmero que introduzca el usuario. Si
se introduce un nmero negativo, debe mostrar un mensaje de error y volver a pedirlo
(tantas veces como sea necesario).
//
//
//
//

4.- Crear un algoritmo que calcule la raz cuadrada del nmero


que introduzca el usuario. Si se introduce un nmero negativo,
debe mostrar un mensaje de error y volver a pedirlo
(tantas veces como sea necesario).

Proceso Resuelto04
Repetir
Escribir "Dime un numero";
Leer x;
Si x < 0 Entonces
Escribir "No puede ser negativo";
FinSi
Hasta Que x >= 0
Escribir "Su raiz es ", rc(x);
FinProceso

5.- Crear un algoritmo que pida al usuario un nmero y un smbolo, y dibuje un cuadrado
usando ese smbolo. El cuadrado tendr el tamao que ha indicado el usuario.
(Se puede plantear en pseudocdigo, pero no funcionar correctamente en PseInt -al
menos en la versin 2009.04- porque no permite escribir sin avanzar de lnea)
// 5.- Crear un algoritmo que pida al usuario un nmero y un smbolo,
// y dibuje un cuadrado usando ese smbolo. El cuadrado tendr el tamao
// que ha indicado el usuario.
// No funciona con PseInt de 2009.04 porque no permite
// escribir sin avanzar de linea ni concatenar textos
Proceso Resuelto05
Escribir "Dime el lado";
Leer lado;
Escribir "Dime el simbolo de relleno";
Leer simbolo;
Para fila<-1 Hasta lado Hacer
Para columna <- 1 Hasta lado Hacer
EscribirSinAvanzar simbolo ; // Escribir sin bajar de lnea
FinPara
Escribir "";
FinPara

// Avance de lnea tras cada fila

FinProceso

c) Ejemplos de soluciones con Python

1.- Crear un algoritmo que escriba "Hola" cinco veces.


# 1.- Crear un algoritmo que escriba "Hola" cinco veces.
for x in range(1,6):
print("Hola")

2.- Crear un algoritmo que pida al usuario un nmero y le diga si es positivo, negativo o
cero.
# 2.- Crear un algoritmo que pida al usuario un numero y le diga si es
positivo, negativo o cero.
x = int( input
if x > 0 :
print ("Es
elif x < 0 :
print ("Es
else :
print ("Es

("Dime un numero "))


positivo")
negativo")
cero")

3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma.


# 3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma.
# Forma (a), sin usar matrices
suma = 0
for x in range(1,6):
x = int(input ("Dime un dato "))
suma = suma + x
print ("Su suma es")
print (suma)

o de forma alternativa, usando matrices:


# 3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma.
# Forma (b), usando matrices
datos = { }
for i in range(1,6):
datos[i-1] = input ("Dime un dato ")
suma = 0
for i in range(1,6):
suma = suma + datos[i-1]
print ("Su suma es")
print (suma)

4.- Crear un algoritmo que calcule la raz cuadrada del nmero que introduzca el usuario. Si
se introduce un nmero negativo, debe mostrar un mensaje de error y volver a pedirlo
(tantas veces como sea necesario).
#
#
#
#

4.- Crear un algoritmo que calcule la raiz cuadrada del numero


que introduzca el usuario. Si se introduce un numero negativo,
debe mostrar un mensaje de error y volver a pedirlo
(tantas veces como sea necesario).

from math import sqrt


while True:
x = int(input( "Dime un numero: " ))
if x < 0:
print ( "No puede ser negativo" )
else:
print ( "Su raiz es {}".format( sqrt(x) ) )
break

5.- Crear un algoritmo que pida al usuario un nmero y un smbolo, y dibuje un cuadrado
usando ese smbolo. El cuadrado tendr el tamao que ha indicado el usuario.
Esta es la forma ms cercana a la de PseInt, con dos "for" anidados. Como el "smbolo" es
texto, no podemos usar "input" para leerlo, o Python intentara interpretarlo como nmero;
en su lugar, usaremos "raw_input":
# 5.- Crear un algoritmo que pida al usuario un numero y un simbolo,
# y dibuje un cuadrado usando ese simbolo. El cuadrado tendra el tamanyo
# que ha indicado el usuario.
# Forma "general"
lado = int(input( "Dime el lado: " ))
simbolo = raw_input( "Dime el simbolo de relleno: " )
for fila in range( 1 , lado+1 ):
textoFila = ''
for columna in range( 1 , lado+1 ):
textoFila += simbolo
print( textoFila )

Y esta es una forma alternativa ms compacta, usando * para repetir una cadena de texto
varias veces:
# 5.- Crear un algoritmo que pida al usuario un numero y un simbolo,
# y dibuje un cuadrado usando ese simbolo. El cuadrado tendra el tamanyo
# que ha indicado el usuario.
# Forma compacta
lado = int(input( "Dime el lado: " ))
simbolo = raw_input( "Dime el simbolo de relleno: " )
for fila in range( 1 , lado+1 ):

textoFila = simbolo * lado


print( textoFila )

TEMA 4: VECTORES Y MATRICES

4.- NOCIN DE VECTOR

Nueva estructura de objeto, frecuentemente utilizada en informtica y a la que


se aplican numerosos tratamientos iterativos. Por ejemplo, supongamos una empresa con
40 sucursales y que deseamos calcular el total de rentas.

El procedimiento a seguir sera ir sumando cada elemento del vector.

a) Total Venta(1) + Venta(2) + Venta(3) + ... + Venta(40)

De esta forma se define el vector en algortmica a travs de un n ndice que va a


indicar el elemento del vector con el cual estamos haciendo operaciones.

b) VENTA (I) I [1..40]

TOTAL 0 Variable donde vamos a almacenar la sumatoria.


Para I de 1 hasta 40 hacer
TOTAL TOTAL + VENTA(I)
Fin para

Definicin de Vector:

Conjunto ordenado que contiene un n fijo de elementos (su dimensin) de


cualquier tipo vlido definido con la condicin de que todos deben ser del mismo tipo.

Forma de declarar un vector:

Vector tipo nombre [ndice mnimo .. ndice mximo]

Ejemplo: Para el ejemplo anterior la declaracin del vector quedara de esta forma:

vector entero venta [1..40]

4.1.- OPERACIONES CON VECTORES

Asignacin

En general, los lenguajes de programacin incluyen como mucho instrucciones de


lectura/escritura de vectores completos, siendo muy pocos la que tienen definidas otras
operaciones primitivas con el vector tomado como dato nico.

La estructura de control asociada de manera natural con los vectores es la estructura


de tipo "PARA"

Ejemplo:

Algoritmo Inicializar_Vector

Vector de reales V [1 .. 100]


Para i de 1 hasta 100 hacer
V(i) 0.0
Fin para

Final

En algunos lenguajes se permite la asignacin directa entre vectores de igual


dimensin y tipo.

La condicin principal para

poder realizar este tipo de asignaciones es que

debe cumplirse que los dos vectores sean del mismo tipo y de la misma longitud.

u v

el vector 'u' pasa a contener los datos de 'v'

Otra forma de hacer esta asignacin es a travs de la asignacin de elemento en


elemento.

Este tipo de

asignacin

es

la

que

se realiza de forma comn en

programacin, y la que utilizaremos en nuestros algoritmos.

Para i de 1 hasta n hacer


u(i) v(j)
Fin para

De este modo veamos un ejemplo: Tenemos dos vectores con las mismas
caractersticas (tipo y longitud). Se pretende intercambiar los datos entre dos vectores a
b. Para ello utilizaremos un elemento de apoyo c.

Algoritmo Intercambio de vectores


Variables enteras i, n, c
Vectores de enteros a [1..100], b[1..100]
Escribir Introduzca el nmero de elementos de los vectores
Leer n
- Para i de 1 a n
Escribir Introduzca el elemento a[,i,]
Leer a[i]
Escribir Introduzca el elemento b[,i,]
Leer b[i]
- Fin_Para

- Para i de 1 a n
c

a[i]

Obsrvese como se realiza el proceso de

a [i] b[i]

intercambio. Necesitamos la variable de

b [i] c

apoyo para no perder por sobrescritura los datos de un vector.

- Fin_Para
- Para i de 1 a n
Escribir a[,i,]=,a[i]
Escribir b[,i,]=,b[i]
- Fin_Para

Final

4.1.1.- NECESIDAD DEL PREDIMENSIONAMIENTO POR EXCESO

Es muy importante entender que la zona de declaracin de variables de un


algoritmo SIEMPRE SE EJECUTA ANTES QUE LAS SENTENCIAS DEL MISMO. Debido
a esto, ES IMPOSIBLE COLOCAR UNA VARIABLE COMO DIMENSION DE UN VECTOR
O MATRIZ. Por ello, siempre que pretendamos manipular un nmero de datos escogido
por el usuario, tendremos que recurrir a un predimensionamiento por exceso,
considerando un tamao superior al que ste escoger. Habitualmente se puede poner
100 como dimensin por defecto, salvo casos en los que se vea claro que sean
necesarios ms elementos.

4.2.- LECTURA Y ESCRITURA

Como

hemos

visto

anteriormente,

en

algortmica

podemos utilizar

la

asignacin de forma directa o por medio de la asignacin de los elementos. De igual


forma a la hora de leer podemos utilizar la lectura directa o lectura por elementos.

Ejemplo de lectura / escritura por elementos:

Para i de 1 a n hacer
Leer v(i)
Fin para

Para i de 1 a n hacer
Escribir v(i)
Fin para

Finalmente, decir que aunque por facilitar la comprensin de los ejemplos aqu
mostrados, se obviarn las operaciones de lectura y escritura realizndolas en forma
directa, los algoritmos de examen SIEMPRE debern indicarse estas operaciones
desarrolladas, es decir, por elementos.

4.3.- OPERACIONES ELEMENTALES CON VECTORES NUMRICOS

Suma de vectores

Algoritmo suma_vectores
Constante n= ...
Variable entera i

Forma de resolver el problema del


predimensionamiento por exceso

Vectores reales a[1..n], b[1..n], c[1..n]


Leer a,b

LECTURA DIRECTA, NO USAR!

ESCRITURA DIRECTA, NO USAR!

Para i de 1 a n hacer
c(i) a(i)+b(i)
Fin para
Escribir c
Final

Los vectores que se suman han de ser del mismo tipo y dimensin.

Producto por un escalar


Algoritmo producto por escalar
Constante n= ...
Variable real x
entera i
vectores reales a(1..n),b(1..n)
Leer a
Leer x
Para i de 1 a n hacer
b(i) x*a(i)
Fin para
Escribir b
Final

Producto escalar de dos vectores

Algoritmo producto escalar


constante n= ...
variable entera i
real c
vectores reales a(1..n), b(1..n)
Leer a,b
c 0.0
Para i de 1 a n hacer
c c+a(i)*b(i)
Fin para
Escribir c
Final

Mdulo de un vector

Algoritmo modulo
constante n= ...
variable entera i
real modulo, suma_cuadrados
vector real a (1..n)
Leer a
suma_cuadrados 0.0

Para i de 1 a n hacer
suma_cuadrados suma_cuadrados + a(i)*a(i)
Fin para
modulo sqr (suma_cuadrados)
Escribir mdulo
Final

4.4.- IDENTIFICACIN DE POLINOMIOS CON VECTORES

Sea un polinomio de grado n:

P ( x ) Pn x x Pn 1 x n 1 ... P1 x P0

Pude representarse mediante un vector donde sus elementos son los coeficientes
del polinomio.

vector real P(0..n)

Suma de polinomios

Algoritmo suma_polinomios
constante n=...
vectores reales p(0..n),q(0..n),r(0..n)

variable entera i

Leer p,q
Para i de 1 a n hacer
r(i) p(i) + q(i)
Fin para
Escribir r
Final

Evaluacin de un polinomio

Regla de Ruffini:

valor p(x) para x=a . Se basa en dividir el polinomio p[0..n] por (x-a),

obteniendo el polinomio cociente, q[0..n-1]

qn-1 = pn
qn-2 = pn-1 +a qn-1
...
q0 = p1 + aq1
r = p0 + aq0

Veamos ahora el algoritmo.

Algoritmo Ruffini
constante n=...

Variable real a
entera i
Vectores reales p(0..n), q(0..n-1)

Leer p
Leer a
q(n-1) p(n)
Para i de n-1 a 1 incremento -1 hacer
q(i-1) p(i) + a*q(i)
Fin para
r p(0)+a*q(0)
Escribir Polinomio cociente = q
Escribir Resto (valor de p(a) = , r

Final

4.5.- ORDENACION Y BUSQUEDA

Veamos en este
vectores.

apartado

las

operaciones comunes en el tratamiento de

Ordenacin por seleccin

Supongamos un vector, donde parte de sus elementos

estn ordenados y

otros no. Los pasos a seguir para realizar la ordenacin son los siguientes:

a1

a2

...

ak-1

ak

...

...

...

ai

...

...

an

Elementos desordenados

a) Para realizar la ordenacin por seleccin se hacen varios barridos del vector.
Primeramente cogemos el primer elemento del vector y lo comparamos con
todos los elementos restantes buscando aquel elemento que posea el valor ms
pequeo.

a1

a2

...

ak-1

ak

...

...

...

ai

...

...

an

b) Una vez encontrado el

elemento

menor,

se coloca en la posicin

correspondiente, realizando un intercambio de posiciones entre el elemento


que hemos comparado y el que hemos encontrado.

a1

a2

...

ak-1

ak

...

...

...

ai

...

...

an

c) Una vez ordenado el primer elemento, realizamos la misma operacin con


los restantes. Finalmente el vector quedar ordenado.

a1

a2

...

ak-1

ak

...

...

...

ai

...

...

an

El algoritmo de ordenacin por seleccin es el siguiente.

Algoritmo Seleccin
constante n=...
variable entera i,j,k
real x variable de apoyo
vector de reales a(1..n)

Leer a

Para i de 1 a n-1 hacer

el ultimo 'n' ya estar ordenado.

k i

k es el ndice del elemento menor a permutar

con a[i], inicialmente lo ponemos igual que i


Para j de i+1 a n hacer
si a(j) < a(k) entones
k j
Finsi

Si aparece un elemento de menor valor, fijamos


k a su ndice

Fin para
x a(i)

Permutamos a[i] con a[k]

a(i) a(k)
a(k) x
Fin para

Escribir a
Final

Ejercicio Propuesto:
a=(75,63,8,15,26,12,2)

Realizar la traza para la ordenacin por seleccin del vector

Bsqueda Lineal

Dado un vector que suponemos desordenado, localizar un elemento que tenga un


valor determinado requerir un barrido a lo

largo

del mismo hasta encontrar dicho

elemento.

Algoritmo bsqueda_lineal
constante n= ...
variable entera i
real x
vector de reales a(1..n)

Leer a
Leer x
y 1

mientras (a(i) x and i n) hacer


i i+1
fin mientras

si i n entonces
escribir ("Dato ";x;" Encontrado en la posicin: ";i)

sino escribir ("Dato no encontrado")


finsi

Final

Bsqueda Binaria

Si el vector est ordenado, existen mtodos de bsqueda mas eficientes.


de ellos es

Uno

el de la bsqueda dicotmica. Veamos un ejemplo donde el vector est

ordenado de forma ascendente (menor -> mayor).

Algoritmo Busqueda_Dicotmica
constante n=...

variable entera i,j,m


real x
vector a(1..n)

Leer a
Leer x
i 1
j n

repetir
m (i+j)/2
si x < a(m) entonces
j m-1
finsi
si x > a(m) entonces
i m+1
finsi
hasta que (a(m)=x or i>j)

si a(m) = x entonces
escribir ("Dato ";x;" Encontrado en la posicin: ";m)
sino escribir ("Dato no encontrado")

finsi

Final

4.6.- MATRICES.

Podemos extender el concepto de vector a estructuras con dos ndices, es decir,


matrices.

De forma anloga a la utilizacin de un bucle, normalmente de tipo "para",en el


tratamiento de los elementos de un vector para el caso de una matriz, lgicamente,
se requerirn dos bucles compuestos.

Al igual que en el caso de vectores, todos los elementos de una matriz deben ser
del mismo tipo. Declaracin:

Matriz tipo nombre (ndice fila mn..ndice fila mx, ndice col mn..ndice col mx)

Los conceptos de vector y matriz no son sino casos


estructura general de "p" dimensiones que denominaremos tabla.

particulares de una

4.7.- OPERACIONES CON MATRICES.

Asignacin.

Por ejemplo: inicializacin a cero :

para i de 1 a m hacer
para j de 1 a n hacer
a(i,j) 0.0
fin para
fin para

Definicin de matriz identidad

para i de 1 a n hacer
para j de 1 a n hacer
si i=j entonces
I(i,j) 1

sino I(i,j) 0
finsi
fin para
fin para

Asignacin de valores introducidos por el usuario:

para i de 1 a m hacer
para j de 1 a n hacer
leer a(i,j)
fin para
fin para

Al igual que con los vectores, a efectos de simplificar los algoritmos de ejemplo,
expresaremos en ocasiones la lectura y escritura de forma abreviada (NO PERMITIDO EL
EJERCICIOS DE EXAMEN):

leer a
escribir a

4.8.-

OPERACIONES

ELEMENTALES

SUMA DE MATRICES.

Algoritmo

suma de matrices

CON

MATRICES

NUMRICAS.

constantes m=..., n=...


variables enteras i, j
matrices reales

a(1..m,1..n), b(1..m,1..n), c(1..m,1..n)

leer a, b
para j de 1 a m hacer
para j de 1 a n hacer
c(i,j) a(i,j) + b(i,j)
fin para
fin para

escribir c
Final

Ejercicio Propuesto: Hallar la traza para: a(2,3,-1,4,5,10) y

b(1,7,6,18,-3,27)

Evidentemente, las matrices han de ser del mismo tipo y deben tener las mismas
dimensiones.

Producto de una matriz por un escalar

Algoritmo

producto por un escalar

constantes m=..., n=...


variables enteras i, j
variable real
matrices reales

x
a(1..m,1..n), b(1..m,1..n)

leer a
leer x

para i de 1 a m hacer
para j de 1 a n hacer
b(i,j) x * a(i,j)
fin para
fin para
escribir b
Final

Producto matricial

Algoritmo

producto matricial

constantes m=..., n=..., q=...


variables enteras i, j, k
matrices reales

a(1..m,1..n), b(1..n,1..q), c(1..m,1..q)

leer a, b
para i de 1 a m hacer
para j de 1 a q hacer
c(i,j) 0.0
para k de 1 a n hacer
c(i,j) c(i,j) + a(i,k)*b(k,j)

fin para
fin para
fin para

escribir c
Final

Ejercicios Propuestos

1.- Dado un vector "a" de n componentes reales, formular un algoritmo para determinar
los componentes mximo y mnimo.

2.- Escribir un algoritmo para obtener la traspuesta de una matriz A(m,n).

3.- Obtener un algoritmo que lea un conjunto de n datos reales, los almacene en un
vector "a" y determine:

a.- El recorrido, r = max(aj) - min(aj)

a
b.- El valor medio:

1 n
ai
n i 1

1 n
(ai a ) 2

n i 1

c.- La desviacin tpica:

d.- El coeficiente de variacin:

4.- Modificar el algoritmo de ordenacin por seleccin, de forma que opcionalmente la


ordenacin pueda ser ascendente o descendente.

5.- Sean dos matrices de dimensiones m,n y l,k. Disear un un algoritmo que detecte
aquellos elementos presentes
posicin

en

en

ambas matrices

los

escriba,

indicando

su

las dos matrices (suponiendo que no hay valores repetidos dentro de

ninguna de las dos matrices).

6.- Dado un vector de

n elementos enteros desordenado, escribir un algoritmo que

detecte aquellos elementos que estn repetidos, escribiendo el elemento y el nmero de


veces que se repite.

PROBLEMAS RESUELTOS DE LA PRACTICAS


TOMADAS LA SEMANA PASADA
/* programa para mostrar la suma acumulada de
los multiplos de M y N a partir del numero 100
hasta un numero dado por el programador */
#include<stdio.h>
main()
{
/* determinar el numero mayor */
int m,n,final,i;

int acum_m,acum_n;
int total;
acum_m =0;
acum_n =0;
printf("Ingrese los valores de M y N separados por un
espacio\n:");
scanf("%d %d",&m,&n);
printf("Ingrese el numero final \n:");
scanf("%d",&final);
for(i=100;i<=final;i++)
{
if(i%m==0) acum_m += i;
if(i%n==0) acum_n += i;
}
total = acum_m + acum_n;
printf("La respuesta es %d \n:",total);
return 0;
}
/* ingresar 10 resultados
de partidos entre 2 equipos ** 1 y 2 **
el programa debera:
- publicar cual equipo gano mas veces
- publicar la cantidad de goles del eq que mas gano
- cuantas veces perdio el eq 2
*/
#include <stdio.h>
main()
{
int goles1,goles2,uno,dos,acugol1,acugol2,perdio2,i;
uno=0; dos=0; acugol1=0; acugol2=0; perdio2=0;
printf("Ingreso de SCORES\n");
printf("-----------------\n");
for(i=1;i<=10;i++)
{
scanf("%d %d",&goles1,&goles2);
acugol1 += goles1;
acugol2 += goles2;
if (goles1>goles2)
{
uno++;
perdio2++;
}
if (goles2>goles1) dos++;
if (goles2==goles1)
{
acugol1 += goles1;
acugol2 += goles2;
}
}
if (uno>dos) {
printf("EQ UNO gano mas veces \n");
printf("Hizo %d goles \n",acugol1);
}
if (dos>uno) {
printf("EQ DOS gano mas veces \n");
printf("Hizo %d goles \n",acugol2);

}
if (dos==uno) printf("Igualaron en partidos\n");
printf("\n El EQ DOS perdio %d veces \n",perdio2);
return 0;
}
/* Determinar cual es la persona mayor de un grupo de
5 personas, por cada persona se ingresa
dd Dia
mm mes
aa ao de nacimiento
suponga que todos los meses son de 30 dias y
el ao es de 360 dias
*/
#include<stdio.h>
main()
{
int dd,mm,aa;
int hdd,hmm,haa;
int i,mayor;
float maxedad;
float t1,t2,edad;
maxedad = 0;
printf("Ingrese la fecha de hoy [dd mm aaaa]\n:");
scanf("%d %d %d",&hdd,&hmm,&haa);
// tiempo transcurrido hasta hoy
t1= (haa-1)*360 +(hmm-1)*30 + hdd;
printf("Ahora ingresar EDADES:\n");
printf("----------------------\n");
for(i=1;i<=5;i++)
{
printf(" %d.- Ingrese [dd mm aaaa]\n:",i);
scanf("%d %d %d",&dd,&mm,&aa);
//tiempo transcurrido hasta la fecha de nacimiento
t2= (aa-1)*360 +(mm-1)*30 + dd;
// edad
edad=(t1-t2)/360.0;
if (edad > maxedad)
{
maxedad = edad;
mayor=i;
}
}
printf("la persona ingresada en la posicion %d es la
mayor\n",mayor);
printf("Su edad es: %f \n",maxedad);
return 0;
}
/* Uso de Getche() para determinar
cuantas veces se repite una vocal
se termina el ingreso cuando se presiona x
*/
#include <stdio.h>
#include <conio.h>
main()
{

int parar,a,e,i,o,u;
char ch;
parar = 0;
a = 0;
e = 0;
i = 0;
o = 0;
u = 0;
printf("Ingresar caracteres hasta presionar x : \n");
while(parar == 0) {
ch = getche();
if (ch == 'a') a++;
if (ch == 'e') e++;
if (ch == 'i') i++;
if (ch == 'o') o++;
if (ch == 'u') u++;
if (ch == 'x') parar=1;
}
printf("\n Conteo de vocales \n");
printf("\n la vocal a se repitio %d veces \n",a);
printf("\n la vocal e se repitio %d veces \n",e);
printf("\n la vocal i se repitio %d veces \n",i);
printf("\n la vocal o se repitio %d veces \n",o);
printf("\n la vocal u se repitio %d veces \n",u);
return 0;
}
/* Uso de Getche() para tamao de tres palabras
se termina el ingreso cuando se presiona ENTER
*/
/* PROGRAMA PARA DETERMINAR EL TAMAO DE TRES PALABRAS
Tenga en cuenta que cada palabra se separa por un espacion en blanco
*/
#include <stdio.h>
#include <conio.h>
main()
{
int parar,palabra,c;
char ch;
parar = 0;
palabra = 1;
c = 0;
printf("Ingresar caracteres hasta presionar ENTER : \n");
while(parar == 0 && palabra <=3) {
ch = getche();
if (ch == 13) parar=1;
else
if(ch!=' ')
// ch no es espacio en blanco
c++;
else
{
palabra++;
printf("Tamao de palabra %d \n",c);
c=0;
}
}

if(ch == 13) printf("Tamao de palabra %d \n",c);


return 0;
}
/* Uso de Getche() para determinar
cuantas veces se repite una vocal
se termina el ingreso cuando se presiona x
*/
/* factorial para pares menores o iguales a 10 */
#include <stdio.h>
main()
{
float factorial;
int i,f;
printf("Ingresar un numero: \n");
scanf("%d",&f);
factorial = 1;
if ((f%2==0) && (f<11)) {
for(i=1;i<=f;i++) factorial = factorial * i;
printf("\n El factorial de %d es %f \n",f,factorial);
}
return 0;
}
/* Uso de Getche() generalizado
se termina el ingreso cuando se presiona "." punto
*/
#include <stdio.h>
#include <conio.h>
main()
{
int parar,palabra,v,c;
char ch;
parar = 0;
palabra = 0;
v = 0; c = 0;
printf("Ingresar caracteres hasta presionar PUNTO : \n");
while(parar == 0) {
ch = getche();
if (ch == '.') parar=1;
else
if(ch!=' ') {
palabra++;
switch(ch){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
v++;
break;
default:
c++;
break;
}
}
else

{
printf("Tamao de palabra %d \n",palabra);
palabra = 0;
}

}
printf("Tamao de palabra %d \n",palabra);
printf("consonantes %d \n",c);
return 0;
}

PARA LOS ALUMNOS QUE AUN NO CAPTAN


PROBLEMAS DE ESTRUCTURAS REPETITIVAS
Veamos los siguientes casos sencillos
Haga un seguimiento de las variables paso a paso
/*
Como acumular en una estructura repetitiva
NOTAR COMO LOS VALORES INGRESADOS EN "a" SE VAN ACUMULANDO EN S
- Las vueltas son 5
*/
#include<stdio.h>
main()
{
int i,a,s;
s=0;
// ojo debe inicializar la variable s en 0 para poder acumular
for(i=0;i<5;i++)
{
printf("%d\n",i);
scanf("%d",&a);
s = s + a;
//acumular
}
printf("%d\n",s); //mostrar el acumulado al final
return 0;
}
// LO MISMO DEL ANTERIOR PERO USANDO WHILE
// ESTA VEZ LOS ACUMULADOS SE HACEN INGRESANDO VALORES EN i
// PERO TENGA EN CUENTA QUE EL BUCLE DARA VUELTAS HASTA QUE
// SE ingrese en i un valor de cero
- Las vueltas son indeterminadas
#include<stdio.h>
main()
{
int i,s;
s=0;
i=1;
while(i!=0) // mientras i distinto de 0
{
scanf("%d",&i);
s = s + i;
//acumular
}
printf("%d\n",s); //mostrar el acumulado al final

return 0;
}
// aqui solo se acumulan los pares
// para determinar si i es mltiplo de 2
// note que el residuo de dividir por dos osea "i%2" debe ser 0 (cero)
#include<stdio.h>
main()
{
int i,s;
s=0;
i=1;
while(i!=0) // mientras i distinto de 0
{
scanf("%d",&i);
if(i%2 == 0) s=s+i;
//acumular solo los pares
}
printf("%d\n",s); //mostrar el acumulado al final
return 0;
}
//
//
//
//
//

acumula solo los impares


note como se usa laestructura "do while" (POST-TEST)
eso significa que EL BUCLE SE EJECUTA UNA VEZ POR LO MENOS
MIENTRAS QUE EN "WHILE" O "FOR" es posible que el bucle
no se ejecute ni una sola vez

#include<stdio.h>
main()
{
int i,s;
s=0;
i=1230;
do
{
scanf("%d",&i);
if(i%2 != 0) s=s+i;
//acumular solo los impares
} while(i!=0);
printf("%d\n",s); //mostrar el acumulado al final
return 0;
}

También podría gustarte