Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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:
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
El siguiente mes el precio a aplicar ya no es el inicial, sino el precio afectado por la inflacin.
Pseudocdigo:
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
Descripcin - Uso
VARIABLE
Supin
Toca
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
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
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).
//
//
//
//
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
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.
x = int( input
if x > 0 :
print ("Es
elif x < 0 :
print ("Es
else :
print ("Es
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.
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 ):
Definicin de Vector:
Ejemplo: Para el ejemplo anterior la declaracin del vector quedara de esta forma:
Asignacin
Ejemplo:
Algoritmo Inicializar_Vector
Final
debe cumplirse que los dos vectores sean del mismo tipo y de la misma longitud.
u v
Este tipo de
asignacin
es
la
que
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.
- Para i de 1 a n
c
a[i]
a [i] b[i]
b [i] c
- Fin_Para
- Para i de 1 a n
Escribir a[,i,]=,a[i]
Escribir b[,i,]=,b[i]
- Fin_Para
Final
Como
hemos
visto
anteriormente,
en
algortmica
podemos utilizar
la
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.
Suma de vectores
Algoritmo suma_vectores
Constante n= ...
Variable entera i
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.
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
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.
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),
qn-1 = pn
qn-2 = pn-1 +a qn-1
...
q0 = p1 + aq1
r = p0 + aq0
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
Veamos en este
vectores.
apartado
las
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
elemento
menor,
se coloca en la posicin
a1
a2
...
ak-1
ak
...
...
...
ai
...
...
an
a1
a2
...
ak-1
ak
...
...
...
ai
...
...
an
Algoritmo Seleccin
constante n=...
variable entera i,j,k
real x variable de apoyo
vector de reales a(1..n)
Leer a
k i
Fin para
x a(i)
a(i) a(k)
a(k) x
Fin para
Escribir a
Final
Ejercicio Propuesto:
a=(75,63,8,15,26,12,2)
Bsqueda Lineal
largo
elemento.
Algoritmo bsqueda_lineal
constante n= ...
variable entera i
real x
vector de reales a(1..n)
Leer a
Leer x
y 1
si i n entonces
escribir ("Dato ";x;" Encontrado en la posicin: ";i)
Final
Bsqueda Binaria
Uno
Algoritmo Busqueda_Dicotmica
constante 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.
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)
particulares de una
Asignacin.
para i de 1 a m hacer
para j de 1 a n hacer
a(i,j) 0.0
fin para
fin para
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
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.
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
b(1,7,6,18,-3,27)
Evidentemente, las matrices han de ser del mismo tipo y deben tener las mismas
dimensiones.
Algoritmo
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
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.
3.- Obtener un algoritmo que lea un conjunto de n datos reales, los almacene en un
vector "a" y determine:
a
b.- El valor medio:
1 n
ai
n i 1
1 n
(ai a ) 2
n i 1
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
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;
}
}
{
printf("Tamao de palabra %d \n",palabra);
palabra = 0;
}
}
printf("Tamao de palabra %d \n",palabra);
printf("consonantes %d \n",c);
return 0;
}
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;
}
//
//
//
//
//
#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;
}