You are on page 1of 13

Programación

Soluciones propuestas a las prácticas 12

Aclaración para el profesor:

Los ejercicios de la sección Amplía y profundiza tienen


su propuesta de solución en este suplemento.

Tenga presente que las distintas versiones de compilación


de C y de C++ pueden requerir cambios en la sintaxis y en
algunas declaraciones, definiciones, etc., por lo que debe-
rá adaptar en su caso el código de los programas.

El cometido fundamental del tema de programación es que


el alumno aprenda la metodología y estructuras básicas de
la programación estructurada. Usted también puede utilizar
otros lenguajes, como puede ser Visual Basic, para que el
alumno ponga en práctica sus conocimientos.
12
2 Prograamación
Ampllía y profu
undiza

• Am
mplía 1. O
Organigra
amas.
Prog
grama A

Este programa ha alla la sucessión de númeeros o serie dde Fibonacc ci. Esta serie
e es la
suceesión infinita d
de números naturales en n el que el pr imer elemento es el 0, el segun-
do ess el 1 y cadaa elemento re estante es la suma de loss dos anteriores. En este caso,
la se
erie no es infinita, sino qu
ue termina cuuando se alca anzan K elemmentos, siendo K,
una valor
v que se ha introducido manualmente. Finalm mente, el proggrama visualiza el
núme ero de eleme entos de la serie (K) y el valor de el ú ltimo elemen
nto (SUMA).
ese, que máss importante que el descu
Nóte ubrimiento enn sí de la serrie numérica, es la
compprensión porr parte del alu
umno de las estructuras y técnicas de e programación aquí
desa
arrolladas. Esstas son:
• Un bucle e o estructurra repetitiva con condició
ón al final deel bucle (tipo “ejecu-
ta hasta……”. En la maayoría de los lenguajes see utilizaría un
n for.
• La utiliza
ación del con
ntador N.
• La utiliza
ación del acu
umulador SU UMA.

grama B
Prog
El sig
guiente programa calcula
a el factorial de
d un númerro introducidoo previamentte (N).
El có
ódigo controla
a que el núm
mero introduc cido sea un ccero, en cuyo
o caso el facttorial es
1 y que
q no sea negativo, indiccándolo med diante los me
ensajes pertin
nentes. También en
este programa el alumno deb bería identificar:
• Un buclee o estructurra repetitiva con condició
ón al final deel bucle (tipo “ejecu-
ta hasta…
…”. En la maayoría de los lenguajes see utilizaría un
n for.
• La variab
ble N, que también se comporta como o un contado or decreciente detro
del bucle
e y el acumullador P, en este
e caso de productos.

• Am
mplía 2.
#inc
clude <std
dio.h>
main
n() {
in
nt n1, n2;
;

pr
rintf("Int
troduce el
l primer número:
n ")
);
sc
canf("%d",
, &n1);
rintf("\n Introduce
pr e el segun
ndo número
o: ");
sc
canf("%d",
, &n2);

pr
rintf("\n %d elevad
do a %d es
s: %ld", n
n1, n2, n1
1^n2);
}

• Am
mplía 3.
#inc
clude <std
dio.h>
main
n() {
in
nt masa, v
velocidad;
;

pr
rintf("Int
troduce la
a masa (en
n gramos):
: ");
sc
canf("%d",
, &masa);
pr
rintf("\n Introduce
e la veloc
cidad (en m/s): ");
;
sc
canf("%d",
, &velocid
dad);

pr
rintf("\n la energí
ía cinétic
ca de un o
objeto con
n masa %d gramos", masa);
pr
rintf("\n a una vel
locidad co
onstante d
de %d m/s"
", velocid
dad);
pr
rintf("\n es de %f"
", 1/2*mas
sa*velocid
dad^2);
}
2
Proggramación 12
Am
mplia y pro
ofundiza

• Amplía
A 4.

#include <s
stdio.h>

main() {

s, num, i;
int veces ;
int suma=
=0;

Introduce cuántos números


printf("I n qu
uieres sum
mar: ");
scanf("%d
d", &veces
s);

for(i=1; i<=veces;
; i++) {

tf("\n Int
print troduce el
l %d .er n
número : ",
" i);
scanf
f("%d", &n
num);
suma=
=suma+num;
;
}
printf ("
"\n La sum
ma de los %d número
os es &d",
, veces, suma);
}
12
2 Prograamación
Ampllía y profu
undiza

• Am
mplía 5.
#inc
clude <std
dio.h>

main
n() {
in
nt num;
pr
rintf("\In
ntroduce un
u múmero (del 1 al
l 7): ");
sc
canf("%d",
,&num);

sw
witch(num)
) {
case 1:
:
prin
ntf("\n El l semana es lunes"
l día de la ");
brea
ak;
case 2:
:
prin
ntf("\n El
l día de la
l semana es martes
s");
brea
ak;
case 3:
:
prin
ntf("\n El
l día de la
l semana es miérco
oles");
brea
ak;
case 4:
:
prin
ntf("\n El
l día de la
l semana es jueves
s");
brea
ak;
case 5:
:
prin
ntf("\n El
l día de la
l semana es vierne
es");
brea
ak;
case 6:
:
prin
ntf("\n El
l día de la
l semana es sábado
o");
brea
ak;
case 7:
:
prin
ntf("\n El
l día de la
l semana es doming
go");
brea
ak;
default
t:
prin
ntf("\n Er
rror, núme
ero incorr
recto");
brea
ak;
}
}
Proggramación 12
Am
mplia y pro
ofundiza

• Amplía
A 6.

El
E método de ordenación de un array por p selección n consiste en
n mantener fijo el primer eelemento y com-
c
pararlo con el resto del arrray. Cada ve
ez que se enccuentre un elemento
e mennor que él (ssi hablamos de
d
ordenación asscendente), ses intercamb bian las posicciones. De essta forma, po
or cada seriee o tanda de
co
omparacione es, los elemeentos menore es se van situuando al prin
ncipio.

Existen
E otros métodos de ordenación de urbuja y el dee la burbuja
d un array, como el méttodo de la bu a-
sw
witch.

5
12
2 Prograamación
Ampllía y profu
undiza

• Am
mplía 7.
#inc
clude <std
dio.h>

main
n() {

in
nt numeros
s[20];
in
nt i, num;
;

fo
or (i=0; i
i<20; i++)
) {

printf(
("\n Intro
oduce el número
n nº.
.%d:", i);
;
scanf(&
&numeros[i
i]);
}

pr
rintf("\n Escribe el
e número que quier
res buscar
r");
sc
canf(&num)
);

fo
or (i=0; i
i<20 && nu
umeros[i]!
!=num; i++
+);

if
f (numeros
s[i]==num)
) printf("
"\n El núm
mero intro
oducido es
stá en la posición
%d", i+
+1);
el
lse printf
f("\n El número
n int
troducido no se enc
cuentra en
n el array
y");

• Am
mplía 8.
#inc
clude <std
dio.h>
#inc
clude <con
nio.h>

int factoriall();
floa
at media());
int mayor();

main
n() {
in
nt numeros
s[4], int i;
ch
har opcion
n;

fo i<4; i++) {
or (i=0; i
printf
f("\n Intr
roduce un número: "
");
(&numeros[i]);
scanf(
}

rintf("\n a. Factor
pr rial de lo
os números
s.");
pr
rintf("\n b. Media aritmétic
ca.");
rintf("\n c. Mostra
pr ar el mayo
or.");
pr
rintf("\n \n Escoje
e una opci
ión: ");
ge
etche(opci
ion)

sw
witch(opci
ion) {
case "a"
":
for (
(i=0; i<4;
; i++) pri
intf ("\n El factor
rial de %d
d" es: %d"
", nume -
r
ros[i], fa
actorial(i
i));
case "b"
":
print
tf ("\n La
a media ar
ritmética es %f", media(nume
m eros);
case "c"
":
print
tf ("\n El
l mayor es
s %d", may
yor(numero
os);
default:
:
print
tf ("\n op
pción inco
orrecta");
;
}
}
6
Proggramación 12
Am
mplia y pro
ofundiza

int factori
ial(int nu
um)
{
act;
int i, fa
fact=num;
;
if (num==
=1 || num=
==0) fact=
=1;
else for (i=num-1;
; i>0; i--
-) fact=fa
act*i;
return(fa
act);
}
float media
a(int num[
[4])
{
int i, su
uma;
for (i=0;
; i<4; i++
+) suma=su
uma+i;
return(su
uma);
}
int mayor(i
int num[4]
])
{
int i, j,
, aux;
for (i=0;
; i<3; i++
+) { // se orde na el array para averiguar e
el mayor //
for (
(j=0:j<4;j
j++) {
i
if(num[i]>
>num[j]){
aux=num
m[i];
num[i]=
=num[j];
num[j]=
=aux;
}
}
}
um[3]; // El elemen
return nu nto mayor es el últtimo del array
a //
}
En manejar directamente
E este ejerciicio se ha preferido optarr por crear u n array de 4 números, en lugar de m
4 variables. E
Esto se ha hecho
h para ayudar
a al reffuerzo del propio
p d los arrayys y para desarrollar
tema de
es
structuras re
epetitivas en las funciones
s de una formma más eficieente.
Nótese
N que eel paso de un array com mo argumento o de una funnción implicaa lo que se ddenomina pa aso por
vaalor. Esto qu
uiere decir que la declaraación del parrámetro debe e ser de un tipo
t puntero compatible. En esta
unidad se ha preferido no o explicar el tipo de datoos puntero nin la declaración de prottotipos de función,
f
co
onceptos que van más alláa de una meram introdu cción que sirva para expplicar los conntenidos que
e abarca
la
a propia uniddad. De estaa forma, y aunque no se e detallen la
as distintas fo
ormas de paasar un arra ay a una
fu
unción como parámetro, el e método aq quí escogido lo considera aremos como o válido.

• Amplía
A 9.
#include <s
stdio.h>
#include <c
conio.h>
main() {
char cadeena[20];
int i=0;
Teclea car
printf("T racteres hasta
h puls
sar Intro (max 20)"
");
do {
cadenna[i]=getc
che();
i++;
} while(i
i<19 && caadena[i-1]
] != '\r')
);
for (i=0;
; i<20; i+
++) {
if (c
cadena[i]=
=='a' || cadena[i]=
c =='e' || cadena[i]=
c =='i' || c
cadena[i]=
=='o'
|| cadena[i]=='u') break;
b
}
if (i=20)
) printf("
"\n No has
s tecleado
o ninguna vocal");
else prin
ntf("\n la
a primera vocal est
tá en la posición
p %d",
% i+1);
;
}
7
12 Prograamación

• Am
mplía 10.
#inc
clude <std
dio.h>
#inc
clude <con
nio.h>
#inc
clude <std
dlib.h>

main
n() {

ch
har tecla;
;
in
nt dado;

do
o {

("Pulsa un
printf( na tecla ...");
.
tecla=g
getche();
if (tec
cla != 'N'
') {
ran
ndomize();;
dad
do=rand()%%6+1;
pri
intf("El valor
v del dado ha s ido %d”, dado);
}

} while(tec
cla != 'N'
');
}

• Am
mplía 11.

• Am
mplía 12.
Program
mación 12
1
Ampliia y profun
ndiza

• Am
mplía 13.
Progrramación
12
1
Activi
vidades de
e refuerzo

1. Realiza un program
ma en lengua aje C que piida introduc
cir un número mediantee el teclado y
después m
muestre si és
ste es par o impar (conntrolando quue no pueda
a introducirsse el 0).

2. Realizza un progra
ama en lengguaje C que visualice lo
os números enteros com s entre
mprendidos
dos númerros que ante es se han in
ntroducido ppor medio del
d teclado. El
E programaa debe valid
dar que
los número os que se piden
p no seaan iguales y que el prim
mero sea menor que el ssegundo.
Program
mación 12
1
Ampliia y profun
ndiza

3. Realiza un program
ma en lengua aje C que pe
ermita introducir diez números
n meediante el teclado
y después visualice el mayor y ell menor de e
ellos.

4. Realiza un program ma en lengua aje C que esscriba los primeros númmeros de la sucesión de
d
Fibonacci:: 0, 1, 1, 2, 3,
3 5, 8, 13... Busca
B en Intternet en qu
ué consiste esta serie n
numérica.
Actividades de refuerzo

5. Realiza un programa en Python que cree una lista con nuestra lista de la compra. Debe
contener al menos diez elementos. Escribe las instrucciones correspondientes para que
muestre:
a. El tercer elemento de la lista
b. Los elementos que ocupan la posición 0 y la posición 7
c. Los elementos que están entre las posiciones 3 y 5

6. Realiza un programa en Python en el que crees una variable con el valor que quieras y luego
utilices la instrucción if para que se vea en la consola uno de estos saludos: “Buenos días” si la
variable tiene un valor inferior a 50; “Buenas tardes” si la variable está entre 50 y 100; y
“Buenas noches” si es mayor que 100.

7. Realiza un programa en Python en el que crees una función que se llame variable_test() y
dos variables a y b (a las que asignarás los valores 10 y 20, respectivamente). El programa debe
devolver por pantalla el valor de a × b.
Program
mación 12
1
Ampliia y profun
ndiza

8. Reaaliza un proggrama en Py ython que ccree una ven


ntana con do os botones:: uno con ell texto
“Pulsa aqu
uí” y el otro con el texto
o “No pulse
es aquí”. Al pulsar
p el priimero de elllos, se debe
erá
mostrar en
n pantalla ell mensaje “MMuy bien, quué obedientte”, mientras que si se pulsa el seggundo
debe apare
ecer el mensaje “Te dije que no pu ulsaras aquíí”.