Download Programador de Sistemas - Módulo 1

Document related concepts

Printf wikipedia , lookup

Boo (lenguaje de programación) wikipedia , lookup

Transcript
Programador de Sistemas
Material del Curso
Módulo 1. Teoría de la Programación
Antonio J. Emperador Sau
[email protected]
Septiembre 2011 – Febrero 2012
Programador de Sistemas
Módulos
Módulo 1. Teoría de la programación
Módulo 2. Conceptos de redes de comunicación
Módulo 3. Windows Server 2008
Módulo 4. Programación de Scripts para Windows Server 2008 con
PowerShell 2.0
Módulo 5. Linux
Módulo 6. Programación Shell-Script para Linux
Módulo 1 – Teoría de la Programación
Antonio J. Emperador Sau
3
Programador de Sistemas
Tabla de contenido
Módulo 1. Teoría de la Programación. Contenido de Presentación ............................................. 9
Módulo 1. Teoría de la Programación. Ejercicios Propuestos .................................................... 17
Módulo 1. Teoría de la Programación. Ejercicios Resueltos ....................................................... 25
Módulo 1 – Teoría de la Programación
Antonio J. Emperador Sau
5
Programador de Sistemas
Módulo 1
Teoría de la programación
30 horas
Módulo 1 – Teoría de la Programación
Antonio J. Emperador Sau
7
Programador de Sistemas
Módulo 1. Teoría de la Programación. Contenido de Presentación
Módulo 1 – Teoría de la Programación
Antonio J. Emperador Sau
9
Programador de Sistemas
Módulo 1 – Teoría de la Programación
Antonio J. Emperador Sau
10
Programador de Sistemas
Módulo 1 – Teoría de la Programación
Antonio J. Emperador Sau
11
Programador de Sistemas
Módulo 1 – Teoría de la Programación
Antonio J. Emperador Sau
12
Programador de Sistemas
Módulo 1 – Teoría de la Programación
Antonio J. Emperador Sau
13
Programador de Sistemas
Módulo 1 – Teoría de la Programación
Antonio J. Emperador Sau
14
Programador de Sistemas
Módulo 1 – Teoría de la Programación
Antonio J. Emperador Sau
15
Programador de Sistemas
Módulo 1 – Teoría de la
programación
Ejercicios propuestos
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
16
Programador de Sistemas
Módulo 1. Teoría de la Programación. Ejercicios Propuestos
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
17
Programador de Sistemas
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
18
Programador de Sistemas
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
19
Programador de Sistemas
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
20
Programador de Sistemas
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
21
Programador de Sistemas
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
22
Programador de Sistemas
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
23
Programador de Sistemas
Módulo 1. Teoría de la Programación. Ejercicios Resueltos
' Ejercicio 1.1.a
' Pasar a binario
37 =b 100101
104 =b 1101000
281 =b 100011001
' Ejercicio 1.1.b
' Pasar a decimal
101110 =d 54
110110101 =d 437
10001010110 =d 1110
00101011101 =d 349
' Ejercicio 1.1.c
' Pasar a octal y hexadecimal
10010111011 =o 2273 =h 4BB
1110111001101 =o 16715 =h 1DCD
' Ejercicio 1.1.d
' Opuesto a 17 por complemento a 2 y sumarlo a 17
17 =b 10001, -17 =c2 01111, 10001+01111 = 00000
' Ejercicio 1.1.e
' Pasar 123,75 a binario
128,75 =b 1111011,11
' Ejercicio 1.1.f
' Pasar 1101101,1011 a decimal
1101101,1011 =d 109,9375
' Ejercicio 1.2.a
' Sumar 1011011101 y 11101101
1011011101 + 11101101 = 1111001010 =d 970
' Ejercicio 1.2.b
' 101110110 AND 110100110
101110110 AND 110100110 = 100100110 =d 294
' Ejercicio 1.2.c
' 1101101110 OR 100011101
1101101110 OR 100011101 = 1101111111 =d 895
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
25
Programador de Sistemas
' Ejercicio 1.3.a
' Llover y coger el parauas
' Ejercicio 1.3.b
' Calcular el área de un círculo
Function AreaCirculo(radio)
AreaCirculo = 3.141598 * radio ^ 2
End Function
/*
* Ejercicio 1.3.b
* Calcular el área de un círculo
*/
INICIO
RADIO 0
AREA 0
#include <stdlib.h>
#include <stdio.h>
PEDIR RADIO
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
#define PI 3.141598 /* Constante PI */
float radio = 0; /* Variable de tipo real para el radio */
float area = 0;
/* Variable de tipo real para el área */
/* Pedir datos */
printf ("\n Escribe el radio del círculo: ");
scanf ("%f", &radio);
AREA 3.1415 *
RADIO
MOSTRAR
AREA
/* Calcular el área */
area = PI * radio * radio;
FIN
/* Mostrar el resultado */
printf ("\n El área del círculo de radio %f es %f.\n", radio, area);
/* Detener para que se vea y terminar */
system("PAUSE");
return(0);
}
' Ejercicio 1.3.c
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
26
Programador de Sistemas
' Suma de los primeros 20 números naturales
INICIO
Function Suma20Naturales()
Dim n As Integer
For n = 1 To 20
Suma20Naturales = Suma20Naturales + n
Next
End Function
/*
* Ejercicio 1.3.c
* Suma de los 20 primeros números naturales
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
int suma = 0; /* Variable de tipo entero para la suma */
int n = 0;
/* Variable de tipo entero para el número
natural */
SUMA = 0
N=0
N=N+1
NO
SUMA = SUMA + N
¿N = 20?
SI
IMPRIMIR
SUMA
FIN
/* Proceso de cálculo */
for (n = 0; n <= 20; n++) {
suma = suma + n;
}
/* Mostrar el resultado */
printf ("\n La suma de los 20 naturales es %d.\n", suma);
/* Detener para que se vea y terminar */
system("PAUSE");
return(0);
}
' Ejercicios de expresiones
a) A = 2
A es 2
B = a + 1
B es 3
A = A + B*2
A es 8
A = A % B
A es 2
b) A = 1
B = A * 2 + A = 3
A = 2 * (A + B * 2) = 14
A = A % B = 2
B = B / A = 1
c) A = 30, B = 20
5>4
VERDADERO
A<5
FALSO
A<=B
FALSO
A-10 = B
VERDADERO
A*2 = B*3
VERDADERO
A<>30
FALSO
d) A = 30, B = 20
A>5 AND B<40 = VERDADERO
A>5 AND A<30 = FALSO
A>5 OR A<30 = VERDADERO
A>B AND B<15 AND B>10 = FALSO
A>B OR A<15 OR B>10 = VERDADERO
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
27
Programador de Sistemas
e) A = 30, B = 20
B<15 AND A>B OR B>10 = VERDADERO
B<15 AND (A>B OR B>10) = FALSO
f) A = 30, B = 20
A>5 AND A<>44 AND B+A>B*2 = VERDADERO
(A>5 OR B<10) AND A<40 = VERDADERO
A>3 OR B=20 AND B=A = VERDADERO
' Ejercicio 2.1.
' Programa que calcula la media de tres números a introducir
Sub Media3Numeros()
Dim M As Double, A As
A = InputBox("Dame el
b = InputBox("Dame el
c = InputBox("Dame el
M = (A + b + c) / 3
MsgBox "La media es "
End Sub
Double, b As Double, c As Double
primer número")
segundo número")
tercer número")
& M
/*
* Ejercicio 2.1
* Media de tres números solicitados
*/
INICIO
A=0
B= 0
C= 0
MEDIA = 0
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
float a = 0;
/* Variable de tipo real para el primero
float b = 0;
/* Variable de tipo real para el segundo
float c = 0;
/* Variable de tipo real para el tercero
float media = 0; /* Variable de tipo real para la media
PEDIR A, B, C
*/
*/
*/
*/
/* Pedir datos */
printf ("\n Escribe el primer número: ");
scanf ("%f", &a);
printf ("\n Escribe el segundo número: ");
scanf ("%f", &b);
printf ("\n Escribe el tercer número: ");
scanf ("%f", &c);
MEDIA =
(A+B+C)/3
ESCRIBIR
MEDIA
FIN
/* Proceso de cálculo */
media = (a+b+c)/3;
/* Mostrar el resultado */
printf ("\n La media de los números es %f.\n", media);
/* Detener para que se vea y terminar */
system("PAUSE");
return(0);
}
' Ejercicio 2.2.
' Programa que intercambia los valores de dos variables (volteo de variables)
Sub VolteoVariables()
Dim X As Double, y As Double, aux As Double
X = InputBox("Dame el primer número")
y = InputBox("Dame el segundo número")
aux = X
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
28
Programador de Sistemas
X = y
y = aux
MsgBox "Ahora x = " & X & " e y = " & y
End Sub
/*
* Ejercicio 2.2
* Volteo de variales
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
float x = 0;
/* Variable de tipo real para el primero */
float y = 0;
/* Variable de tipo real para el segundo */
float aux = 0;
/* Variable de tipo real para la auxiliar
*/
INICIO
X=0
Y=0
AUX = 0
PEDIR X, Y
AUX = X
/* Pedir datos */
printf ("\n Escribe el primer número: ");
scanf ("%f", &x);
printf ("\n Escribe el segundo número: ");
scanf ("%f", &y);
/* Proceso de cálculo */
aux = x;
x = y;
y = aux;
X=Y
Y = AUX
MOSTRAR
X, Y
FIN
/* Mostrar el resultado */
printf ("\n Los números son %f y %f.\n", x, y);
/* Detener para que se vea y terminar */
system("PAUSE");
return(0);
}
' Ejercicio 2.3.
' Cajero: programa que desglosa un importe en billetes de 10 y 5 y monedas de 1 euro
Sub Cajero()
Dim c As Integer, b10 As Integer, b5 As Integer, m1 As Integer
c = InputBox("Indica un importe de euros a desglosar")
b10 = Int(c / 10)
c = c Mod 10
b5 = Int(c / 5)
m1 = c Mod 5
MsgBox "Billetes de 10 €: " & b10 & vbCrLf & _
"Billetes de 5 €: " & b5 & vbCrLf & "Monedas de 1 €: " & m1
End Sub
/*
* Ejercicio 2.3
* Cajero automático
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
29
Programador de Sistemas
{
INICIO
/* Declaración de constantes y variables */
int c = 0;
/* Variable de tipo entero para cantidad */
int a10 = 0; /* Variable de tipo entero para billetes de
10 */
int a5 = 0;
/* Variable de tipo entero para billetes de 5
int a1 = 0;
/* Variable de tipo entero para monedas de 1
*/
C=0
A10 = 0
A5 = 0
A1 = 0
*/
PEDIR
CANTIDAD C
/* Pedir datos */
printf ("\n Escribe la cantidad a repartir: ");
scanf ("%d", &c);
/* Proceso de cálculo */
a10 = c/10;
c = c%10;
a5 = c/5;
a1 = c%5;
A10 = C/10
C = C%10
/* Mostrar el resultado */
printf ("\nBilletes de 10 €: %d", a10);
printf ("\nBilletes de 5 €: %d", a5);
printf ("\nMonedas de 1 €: %d\n", a1);
A5 = C/5
A1 = C%5
/* Detener para que se vea y terminar */
system("PAUSE");
return(0);
ESCRIBIR
A10, A5, A1
}
' Ejercicio 2.4.
' Programa que lee dos números y escribe el mayor seguido del menor
Sub Mayor2Menor()
Dim A As Integer, b As Integer
A = InputBox("Dime el primer número")
b = InputBox("Dime el segundo número")
If A > b Then
MsgBox "El mayor es " & A & " y el
menor " & b
Else
MsgBox "El mayor es " & b & " y el
menor " & A
End If
End Sub
INICIO
A=0
B=0
PEDIR A, B
/*
* Ejercicio 2.4
* Mayor y menor entre dos números
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables
*/
float a = 0;
/* Real primer número */
float b = 0;
/* Real segundo número */
FIN
SI
¿A > B?
MAYOR A
MENOR B
NO
MAYOR B
MENOR A
FIN
/* Pedir datos */
printf ("\n Escribe el primer número: ");
scanf ("%f", &a);
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
30
Programador de Sistemas
printf ("\n Escribe el segundo número: ");
scanf ("%f", &b);
/* Proceso de cálculo y mostrar resultado*/
if (a > b){
printf ("\nMayor: %f\nMenor: %f\n", a, b);
}else{
printf ("\nMayor: %f\nMenor: %f\n", b, a);
}
/* Detener para que se vea y terminar */
system("PAUSE");
return(0);
}
' Ejercicio 2.5.
' Programa que lee dos números y escribe sólo el mayor
Sub MayorSolo()
Dim mayor As Integer, b As Integer
mayor = InputBox("Dame el primer número")
b = InputBox("Dame el segundo número")
If mayor < b Then
mayor = b
End If
MsgBox "El mayor es " & mayor
End Sub
/*
* Ejercicio 2.5
* Mayor entre dos números
*/
#include <stdlib.h>
#include <stdio.h>
INICIO
MAYOR = 0
B=0
PEDIR MAYOR, B
¿MAYOR < B?
SI
MAYOR = B
/* Función principal */
int main(void)
{
float mayor = 0;/* Real primer número */
float b = 0;
/* Real segundo número */
/* Pedir datos */
printf ("\n Escribe el primer número: ");
scanf ("%f", &mayor);
printf ("\n Escribe el segundo número: ");
scanf ("%f", &b);
NO
ESCRIBIR “EL
MAYOR ES “
MAYOR
FIN
/* Proceso de cálculo */
if (mayor < b){
mayor = b;
}
/* Mostrar el resultado */
printf ("\nEl mayor es %f\n", mayor);
/* Detener para que se vea y terminar */
system("PAUSE");
return(0);
}
' Ejercicio 2.6.
' Suma el valor de 5 números introducidos por teclado
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
31
Programador de Sistemas
Sub Suma5Numeros()
Dim Suma As Integer, Cont As Integer,
n As Integer
For i = 1 To 5
n = InputBox("Introduce número")
Suma = Suma + n
Next
MsgBox "La suma es " & Suma
End Sub
/*
* Ejercicio 2.6
* Suma de 5 números solicitados
*/
#include <stdlib.h>
#include <stdio.h>
INICIO
SUMA = 0
N=0
CONTADOR = 0
ESCRIBIR
SUMA
¿CONTADOR < 5?
SI
PEDIR N
FIN
SUMA = SUMA + N
CONTADOR = CONTADOR + 1
/* Función principal */
int main(void)
{
float suma = 0;
float n = 0;
int contador = 0;
/* Pedir y procesar */
while (contador < 5){
printf ("\nEscribe un número %d: ", contador+1);
scanf ("%f", &n);
suma = suma + n;
contador = contador + 1;
}
/* Mostrar el resultado */
printf ("\nLa suma es %f\n\n", suma);
/* Detener para que se vea y terminar */
system("PAUSE");
return(0);
}
INICIO
' Ejercicio 2.7.
' Calcula el factorial de un número
Function Factorial(Numero As Integer) As
Double
Factorial = 1
Do While Numero > 0
Factorial = Factorial * Numero
Numero = Numero - 1
Loop
End Function
/*
* Ejercicio 2.7
* Factorial de un número
*/
N=0
FACTORIAL = 1
PEDIR N
¿N > 0?
NO
ESCRIBIR
FACTORIAL
SI
FACTORIAL = FACTORIAL * N
FIN
N=N-1
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
int n = 0;
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
32
Programador de Sistemas
int factorial = 1;
/* Pedir datos */
printf ("\n Escribe el número: ");
scanf ("%d", &n);
/* Proceso de cálculo */
while (n > 0){
factorial = factorial * n;
n = n - 1;
}
/* Mostrar el resultado */
printf ("\nEl factorial es %d\n", factorial);
/* Detener para que se vea y terminar */
system("PAUSE");
return(0);
}
' Ejercicio 2.8.
' Suma de números hasta que el usuario introduce el 0
Sub SumaNumerosHasta0()
Dim Suma As Double, n As Double
Do
n = InputBox("Introduce un número")
Suma = Suma + n
Loop While n > 0
MsgBox "La suma es " & Suma
End Sub
/*
* Ejercicio 2.8
* Suma de números hasta introducir 0
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
float n = 0;
float suma = 0;
INICIO
N=0
SUMA = 0
NO
PEDIR N
SUMA = SUMA + N
¿N = 0?
SI
ESCRIBIR
SUMA
FIN
/* Pedir datos y procesar*/
do {
printf ("\nNúmero: ");
scanf ("%f", &n);
suma = suma + n;
} while (n != 0);
/* Mostrar el resultado */
printf ("\nLa suma es %f\n", suma);
/* Detener para que se vea y terminar */
system("PAUSE");
return(0);
}
' Ejercicio 2.9.
' Tabla de multiplicar
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
33
Programador de Sistemas
Sub TablaMultiplicar()
Dim n As Integer, i As Integer
n = InputBox("Dime un número")
Do
Debug.Print i & " * " & n & " = " & i * n
i = i + 1
Loop While i <= 10
End Sub
INICIO
/*
* Ejercicio 2.9
* Tabla de multiplicar de un número
*/
I=0
N=0
PEDIR N
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
int n = 0;
int i = 0;
ESCRIBIR
I * N = I*N
I=I+1
SI
/* Pedir el número */
printf ("\n Escribe el número: ");
scanf ("%d", &n);
¿I <= 10?
NO
FIN
/* Procesar y mostrar tabla*/
do {
printf ("\n%d * %d = %d", i, n, i*n);
i++;
} while (i <= 10);
/* Detener para que se vea y terminar */
system("PAUSE");
return(0);
}
' Ejercicio 2.10.
' Calcular los divisores de un número positivo
Sub Divisores()
Dim n As Integer, i As Integer
i = 1
n = InputBox("Dime el número")
Do While i <= n
If n Mod i = 0 Then
Debug.Print i & " es divisor de " & n
End If
i = i + 1
Loop
End Sub
/*
* Ejercicio 2.10
* Divisores de un número
*/
#include <stdlib.h>
#include <stdio.h>
INICIO
N=0
I=1
PEDIR N
¿I <= N?
NO
FIN
¿N%I == 0?
SI
NO
ESCRIBIR
I ES DIVISOR
I ++
/* Función principal */
int main(void)
{
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
34
Programador de Sistemas
/* Declaración de constantes y variables */
int n = 0;
int i = 1;
/* Pedir datos */
printf ("\nEscribe el número: ");
scanf ("%d", &n);
/* Procesar y mostrar divisores */
while ( i <= n ){
if ( n % i == 0){
printf ("\n%d es divisor de %d.", i, n);
}
i++;
}
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 2.11.
' Indica cuántos digitos tiene un número
Function NumeroDigitos(Numero As Long) As
Integer
Do While Numero > 0
Numero = Int(Numero / 10)
NumeroDigitos = NumeroDigitos + 1
Loop
End Function
INICIO
N=0
D=0
PEDIR N
/*
* Ejercicio 2.11
* Dígitos de un número solicitado
*/
#include <stdlib.h>
#include <stdio.h>
¿N > 0?
NO
ESCRIBIR
DIGITOS D
SI
FIN
D=D+1
/* Función principal */
int main(void)
{
/* Declaración de constantes y
variables */
int n = 0;
int d = 0;
N = N / 10
/* Pedir datos */
printf ("\n Escribe el número: ");
scanf ("%d", &n);
/* Proceso de cálculo */
while (n > 0){
d = d + 1;
n = n / 10;
}
/* Mostrar el resultado */
printf ("\nNúmero de dígitos: %d", d);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
35
Programador de Sistemas
return(0);
}
' Ejercicio 2.12.
' Suma de dígitos pares de un número
Function SumaDigPares(Numero As Long) As Integer
Dim D As Integer
Do While Numero > 0
D = Numero Mod 10
Numero = Int(Numero / 10)
If D Mod 2 = 0 Then SumaDigPares =
SumaDigPares + D
Loop
End Function
/*
* Ejercicio 2.12
* Suma de dígitos pares de un número
*/
#include <stdlib.h>
#include <stdio.h>
INICIO
N=0
D=1
SUMA = 0
PEDIR N
¿N>0?
ESCRIBIR
SUMA
NO
SI
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables
*/
int n = 0;
int d = 1;
int suma = 0;
FIN
D = N % 10
N = N / 10
¿ D % 2 == 0 ?
SI
SUMA = SUMA + D
/* Pedir datos */
printf ("\n Escribe el número: ");
scanf ("%d", &n);
NO
/* Proceso de cálculo */
while (n > 0){
d = n % 10;
n = n / 10;
if (d % 2 == 0){
suma = suma + d;
}
}
/* Mostrar el resultado */
printf ("\nLa suma es: %d", suma);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 2.13.
' Pasa de base 10 a base 2
Function Nto2(Numero As Long) As String
Dim r As Integer
Do While Numero > 1
r = Numero Mod 2
Numero = Int(Numero / 2)
Nto2 = r & Nto2
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
36
Programador de Sistemas
Loop
Nto2 = Numero & Nto2
End Function
/*
* Ejercicio 2.13
* Decimal a binario
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables
*/
unsigned long n1 = 0;
unsigned long alg, mult=1, n2=0;
int base1=2, base2=10;
INICIO
N=0
BINARIO = “”
PEDIR N
¿N>1?
NO
BINARIO = N .
BINARIO
SI
/* Pedir datos */
printf ("\n Escribe el número: ");
scanf ("%lu", &n1);
/* Proceso de cálculo */
while (n1 > 0){
alg = n1 % base1;
n1 /= base1;
n2 += (alg*mult);
mult *= base2;
}
BINARIO = N%2 .
BINARIO
ESCRIBIR
BINARIO
N=N/2
FIN
/* Mostrar el resultado */
printf ("\nEl número en binario es %lu", n2);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 2.14.
' Descomposición factorial de un número:
' Indica los divisores primos de un número con su exponente
Sub DescompFact()
Dim n As Integer, i As Integer, E As Integer
i = 2
n = InputBox("Escribe el número a descomponer")
Do While n > 1
Do While n Mod i = 0
n = Int(n / i)
E = E + 1
Loop
If E > 0 Then Debug.Print i & "^" & E
E = 0
i = i + 1
Loop
End Sub
/*
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
37
Programador de Sistemas
* Ejercicio 2.14
* Descomposición factorial de un número
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
int n = 0;
int i = 2;
int e = 0;
INICIO
N=0
I=2
E=0
PEDIR N
¿N>1?
NO
FIN
SI
N=N/I
SI
/* Pedir datos */
printf ("\n Escribe el número: ");
scanf ("%d", &n);
¿N%I=0?
NO
E=E+1
/* Proceso de cálculo y resultado*/
while (n > 1){
while (n % i == 0){
n = n / i;
e++;
}
if (e > 0){
printf ("\n%d ** %d", i, e);
}
e = 0;
i++;
}
¿E>0?
SI
ESCRIBIR
I ** E
NO
E=0
I=I+1
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 4.1.
a) Un entero pequeño (por ejemplo, en C short o en VB Byte)
b) Al ser necesarias cifras decimales, a pesar de no representar una
magnitud muy grande, debería utilizarse algún coma flotante (por
ejemplo, float en C o Single en VB)
c) El nombre de una persona es una cadena de caracteres, definida por
char(n) en C o Str(n) en VB (donde n sería el tamaño máximo, 30 por
ejemplo)
d) La letra de un apartamento solo necesita un carácter por lo que su
definición sería char en C y Str(1) en VB
e) Deberá ser un valor lógico o booleano, no definido explícitamente en C y
como Boolean en VB
' Ejercicio 4.2.a)
' Numero * 20 y / 10, etc., etc.
Sub OperaNumEntero()
Dim n As Integer, Mult As Integer, Div As Integer, msg As String
n = InputBox("Indica un número entero")
Mult = n * 20
Div = Int(Mult / 10)
msg = Div & vbCrLf
Mult = Mult + Div
Div = Int(Mult / 10)
msg = msg & Div
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
38
Programador de Sistemas
If Mult Mod 10 <> 0 Then msg = msg & vbCrLf & Mult Mod 10
MsgBox msg
End Sub
/*
* Ejercicio 4.2.a
* Operar con un número entero solicitado
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
int n = 0;
int mult = 0;
int div = 0;
/* Pedir datos */
printf ("\n Escribe el número: ");
scanf ("%d", &n);
/* Proceso de cálculo y resultado*/
mult = n * 20;
div = mult / 10;
printf ("\nPrimer resultado: %d\n", div);
mult = mult + div;
div = mult / 10;
printf ("Segundo resultado: %d\n", div);
if (mult % 10 != 0){
printf ("Tercer resultado: %d\n", mult % 10);
}
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 4.2.b)
' Numero * 20 y / 10, etc., etc.
Sub OperaNumReal()
Dim n As Double, Mult As Double, Div As Double, msg As String
n = InputBox("Indica un número entero")
Mult = n * 20
Div = Mult / 10
msg = Div & vbCrLf
Mult = Mult + Div
Div = Mult / 10
msg = msg & Div
If Mult Mod 10 <> 0 Then msg = msg & vbCrLf & Mult Mod 10
MsgBox msg
End Sub
/*
* Ejercicio 4.2.b
* Operar con un número entero solicitado
*/
#include <stdlib.h>
#include <stdio.h>
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
39
Programador de Sistemas
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
float n = 0;
float mult = 0;
float div = 0;
/* Pedir datos */
printf ("\n Escribe el número: ");
scanf ("%f", &n);
/* Proceso de cálculo y resultado*/
mult = n * 20;
div = mult / 10;
printf ("\nPrimer resultado: %f\n", div);
mult = mult + div;
div = mult / 10;
printf ("Segundo resultado: %f\n", div);
if ((int)mult % 1 != 0){
printf ("Tercer resultado: %f\n", (int)mult % 1);
}
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 4.2.c)
' Raices de una ecuación de segundo grado
Sub Raices2Grado()
Dim A As Double, b As Double, c As Double
Dim x1 As Double, x2 As Double
A = InputBox("Coeficiente a: ")
b = InputBox("Coeficiente b: ")
c = InputBox("Coeficiente c: ")
x1 = (-b + (b ^ 2 - 4 * A * c) ^ (1 / 2)) /
(2 * A)
x2 = (-b - (b ^ 2 - 4 * A * c) ^ (1 / 2)) /
(2 * A)
MsgBox "x1 = " & x1 & vbCrLf & "x2 = " & x2
End Sub
/*
* Ejercicio 4.2.c
* Soluciones de una ecuación de segundo grado
*/
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables
*/
float a = 0;
float b = 0;
float c = 0;
float discriminante = 0;
float x1 = 0;
float x2 = 0;
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
40
Programador de Sistemas
/* Pedir datos */
printf ("\n Escribe el coeficiente a: ");
scanf ("%f", &a);
printf ("\n Escribe el coeficiente b: ");
scanf ("%f", &b);
printf ("\n Escribe el coeficiente c: ");
scanf ("%f", &c);
/* Proceso de cálculo y resultado*/
discriminante = (float)(pow(b,2) - 4*a*c);
if (discriminante < 0){
printf ("\nNo existen raíces de esta ecuación\n");
}else{
x1 = (float)((-b + sqrt(discriminante)) / 2*a);
x2 = (float)((-b - sqrt(discriminante)) / 2*a);
printf ("\nSoluciones:\n x1 = %f\n x2 = %f\n", x1, x2);
}
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 4.2.d)
' Mostrar letras minúsculas y su código ASCII
Sub LetrasASCII()
Dim i As Integer
For i = 97 To 122
Debug.Print i & " = "; Chr(i)
Next
End Sub
/*
* Ejercicio 4.2.d
* Letras minúsculas de código ASCII
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
int i = 0;
/* Proceso de cálculo y resultado*/
printf ("\nLas letras minúsculas y sus códigos ASCII:\n\n");
for (i = 97; i <= 122; i++){
printf ("\nCódigo %d: %c", i, (char)i);
}
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 4.2.e)
' Ordenar dos caracteres
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
41
Programador de Sistemas
Sub OrdenaCaracter()
Dim A As String, b As String
A = InputBox("Teclea el primer carácter")
b = InputBox("Teclea el segundo carácter")
If A > b Then
MsgBox b & " - " & A
Else
MsgBox A & " - " & b
End If
End Sub
/*
* Ejercicio 4.2.e
* Letras minúsculas de código ASCII
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
char car1;
char car2;
/* Pedir datos */
printf ("\n Escribe los dos caracteres: ");
scanf ("%c", &car1);
scanf ("%c", &car2);
/* Proceso de cálculo y resultado*/
if (car1 > car2){
printf ("Ordenados: %c y %c", car2, car1);
}else{
printf ("Ordenados: %c y %c", car1, car2);
}
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 4.3.a)
' Número de meses, días, horas, minutos y segundos en un nº de años
Sub NumeroEnAnos()
Dim meses As Double, dias As Double, horas As Double, minutos As Double,
segundos As Double
Dim anos As Double
anos = CDbl(InputBox("Dime el número de años"))
meses = anos * 12
dias = anos * 365
horas = dias * 24
minutos = horas * 60
segundos = minutos * 60
MsgBox "Datos para " & anos & " años:" & vbCrLf & _
"- Meses: " & meses & vbCrLf & "- Días: " & dias & vbCrLf & _
"- Horas: " & horas & vbCrLf & "- Minutos: " & minutos & vbCrLf & _
"- Segundos: " & segundos
End Sub
/*
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
42
Programador de Sistemas
* Ejercicio 4.3.a
* Letras minúsculas de código ASCII
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
float anos = 0;
float meses = 0;
float dias = 0;
float horas = 0;
float minutos = 0;
float segundos = 0;
/* Pedir datos */
printf ("\n Introduce el número de años: ");
scanf ("%f", &anos);
/* Proceso de cálculo*/
meses = anos * 12;
dias = anos * 365;
horas = dias * 24;
minutos = horas * 60;
segundos = minutos * 60;
/* Mostrar el resultado */
printf ("\n%.0f años tienen:", anos);
printf ("\n- %.0f meses\n- %.0f dias", meses, dias);
printf ("\n- %.0f horas\n- %.0f minutos", horas, minutos);
printf ("\n- %.0f segundos", segundos);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 4.3.b)
' Area de un cilindro
Function AreaCilindro(r As Double, h As Double) As Double
Const Pi = 3.141598
AreaCilindro = 2 * (Pi * r ^ 2 * h) + (2 * Pi * r) * h
End Function
/*
* Ejercicio 4.3.a
* Letras minúsculas de código ASCII
*/
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
#define PI 3.141598 /* Constante PI */
float radio = 0;
float altura = 0;
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
43
Programador de Sistemas
float area = 0;
/* Pedir datos */
printf ("\n ÁREA DE UN CILINDRO\n");
printf ("\n Introduce el radio: ");
scanf ("%f", &radio);
printf ("\n Introduce la altura: ");
scanf ("%f", &altura);
/* Proceso de cálculo*/
area = 2 * (PI * pow(radio, 2) * altura) + (2 * PI * radio) * altura;
/* Mostrar el resultado */
printf ("\nArea = %f", area);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 4.3.c)
' Entero de la raíz cuadrada de un número
Function RaizEntera(Numero As Double) As Long
RaizEntera = Round(Sqr(Numero), 0)
End Function
/*
* Ejercicio 4.3.c
* Entero de una raíz cuadrada
*/
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
float n = 0;
int raiz = 0;
/* Pedir datos */
printf ("\n Introduce el número: ");
scanf ("%f", &n);
/* Proceso de cálculo*/
raiz = (int)(sqrt(n));
/* Mostrar el resultado */
printf ("\nRaíz = %d", raiz);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 4.3.d)
' Horas a semanas, días y horas
Sub HorasASemanas()
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
44
Programador de Sistemas
Dim Numero As Double
Dim semanas As Double, dias As Double, horasr As Double
Dim msg As String
Numero = InputBox("Indica el número de horas")
horasr = Numero Mod 24
dias = Int(Numero / 24)
semanas = Int(dias / 7)
dias = dias Mod 7
msg = Numero & " horas es:" & vbCrLf
msg = msg & "- Semanas: " & semanas & vbCrLf
msg = msg & "- Días: " & dias & vbCrLf
msg = msg & "- Resto horas: " & horasr
MsgBox msg
End Sub
/*
* Ejercicio 4.3.d
* Desglose de horas
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
int n = 0;
int semanas = 0;
int dias = 0;
int horas = 0;
/* Pedir datos */
printf ("\n Introduce el número de horas: ");
scanf ("%d", &n);
/* Proceso de cálculo*/
horas = n % 24;
dias = n / 24;
semanas = dias / 7;
dias = dias % 7;
/* Mostrar el resultado */
printf ("\nDesglose de %d horas", n);
printf ("\n- Semanas: %d", semanas);
printf ("\n- Días: %d", dias);
printf ("\n- Horas: %d", horas);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 4.3.e)
' Nombre y apellidos con su extracción
Sub ExtraerNomAp()
Dim cadena As String * 32
Dim nombre As String * 8, ap1 As String * 12, ap2 As String * 12
cadena = "Antonio " & "Emperador
" & "Sau
"
nombre = Left(cadena, 8)
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
45
Programador de Sistemas
ap1 = Mid(cadena, 8, 12)
ap2 = Right(cadena, 12)
MsgBox "Nombre: " & nombre & vbCrLf & "Apellido 1: " & ap1 & vbCrLf &
"Apellido 2: " & ap2
End Sub
' Ejercicio 4.3.e) v. 2
' Nombre y apellidos con su extracción
Public Type CadenaNomAp
nombre As String * 8
ap1 As String * 12
ap2 As String * 12
End Type
Sub ExtraerNomAp_v2()
Dim nomapel As CadenaNomAp
nomapel.nombre = "Antonio "
nomapel.ap1 = "Emperador
"
nomapel.ap2 = "Sau
"
MsgBox "Nombre: " & nomapel.nombre & vbCrLf &
"Apellido 1: " & nomapel.ap1 & vbCrLf & "Apellido 2: " &
nomapel.ap2
End Sub
/*
* Ejercicio 4.3.e v2
* Estructuras de variables
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
struct CadenaNomAp {
char nombre[8];
char ap1[12];
char ap2[12];
};
struct CadenaNomAp nomapel;
/* Dar
strcpy
strcpy
strcpy
valores a la estructura */
(nomapel.nombre, "Antonio");
(nomapel.ap1, "Emperador");
(nomapel.ap2, "Sau");
/* Lectura de la estructura */
printf ("\n %s %s %s", nomapel.nombre, nomapel.ap1, nomapel.ap2);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 5.1.a)
' Indica si es par o impar un número dado
Sub ParOImpar()
Dim Numero As Integer
Numero = InputBox("Dame un número entero:")
If Numero Mod 2 = 0 Then
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
46
Programador de Sistemas
MsgBox "El número " & Numero & " es par"
Else
MsgBox "El número " & Numero & " es impar"
End If
End Sub
/*
* Ejercicio 5.1.a
* Indicar par o impar
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
int numero = 0;
/* Pedir datos */
printf ("\n Introduce el número: ");
scanf ("%d", &numero);
/* Proceso de cálculo y mostrar*/
if (numero % 2 == 0){
printf ("\nEl número %d es par\n", numero);
}else{
printf ("\nEl número %d es impar\n", numero);
}
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 5.1.b)
' Calcula la suma de enteros anteriores
Function SumaEnterosAnteriores(Numero As Integer) As Long
Dim i As Integer
i = 0
For i = Numero To 1 Step -1
SumaEnterosAnteriores =
SumaEnterosAnteriores + i
Next
End Function
/*
* Ejercicio 5.1.b
* Suma desde N hasta 1
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
int numero = 0;
int suma = 0;
/* Pedir datos */
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
47
Programador de Sistemas
printf ("\n Introduce el número: ");
scanf ("%d", &numero);
/* Proceso de cálculo y mostrar*/
if (numero <=0){
printf ("\nEl número debe ser mayor que 0\n");
}else{
while (numero > 0){
suma = suma + numero;
numero = numero - 1;
}
printf ("\nLa suma para %d es %d\n", numero, suma);
}
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 5.1.c)
' Calcula a elevado a b
Sub AelevadoB()
Dim A As Double, b As Long, potencia As Double
Dim j As Long
potencia = 1
A = InputBox("Dame la base:")
b = InputBox("Dame el exponente (entero):")
For j = 0 To b - 1 Step 1
potencia = potencia * A
Next
MsgBox (A & " elevado a " & b & " = " &
potencia)
End Sub
/*
* Ejercicio 5.1.c
* Potencia entera de un número
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables
*/
float a = 0;
int b = 0;
float potencia = 1;
int j;
/* Pedir datos y comprobación */
printf ("\n Introduce la base a: ");
if (scanf("%f", &a) < 1){
printf("Error en la lectura de a\n");
return(0);
}
printf ("\n Introduce el exponente b: ");
if (scanf("%d", &b) < 1){
printf("Error en la lectura de b\n");
return(0);
}
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
48
Programador de Sistemas
/* Proceso de cálculo y mostrar*/
for (j = 0; j < b; j++){
potencia = potencia * a;
}
/* Mostrar el resultado */
printf ("\n%f elevado a %d = %f\n", a, b, potencia);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 5.1.d)
' Pantalla con serie N
Sub SerieN()
Dim n As Long
Dim i As Long, j As Long
Dim mensaje As String
n = InputBox("Dame un número natural")
For i = 1 To n Step 1
For j = 1 To i Step 1
mensaje = mensaje & j & " "
Next
mensaje = mensaje & vbCrLf
Next
Debug.Print mensaje
End Sub
/*
* Ejercicio 5.1.d
* Pirámide de números
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
int n = 0;
int i = 1;
int j = 1;
/* Pedir datos y comprobación */
printf ("\n Introduce un número: ");
if (scanf("%d", &n) < 1){
printf("Error en la lectura del número\n");
return(0);
}
/* Proceso de cálculo y mostrar*/
for (i = 1; i <= n; i++){
for (j = 1; j <= i; j++){
printf("%d ",j);
}
printf ("\n");
}
/* Detener para que se vea y terminar */
printf ("\n\n");
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
49
Programador de Sistemas
system("PAUSE");
return(0);
}
' Ejercicio 5.1.e)
' Días de un mes
Function DiasDeMes(mes)
Dim meses(12, 2)
meses(1, 0) = 1: meses(1, 1) =
meses(2, 0) = 1: meses(2, 1) =
meses(3, 0) = 1: meses(3, 1) =
meses(4, 0) = 1: meses(4, 1) =
meses(5, 0) = 1: meses(5, 1) =
meses(6, 0) = 1: meses(6, 1) =
meses(7, 0) = 1: meses(7, 1) =
meses(8, 0) = 1: meses(8, 1) =
meses(9, 0) = 1: meses(9, 1) =
meses(10, 0) = 1: meses(10, 1)
meses(11, 0) = 1: meses(11, 1)
meses(12, 0) = 1: meses(12, 1)
"Enero": meses(1, 2) = 31
"Febrero": meses(2, 2) = 28
"Marzo": meses(3, 2) = 31
"Abril": meses(4, 2) = 30
"Mayo": meses(5, 2) = 31
"Junio": meses(6, 2) = 30
"Julio": meses(7, 2) = 31
"Agosto": meses(8, 2) = 31
"Septiembre": meses(9, 2) =
= "Octubre": meses(10, 2) =
= "Noviembre": meses(11, 2)
= "Diciembre": meses(12, 2)
30
31
= 30
= 31
DiasDeMes = meses(mes, 2)
MsgBox "El mes número " & mes & ", o sea " & meses(mes, 1) & ", tiene " &
meses(mes, 2) & " días."
End Function
/*
* Ejercicio 5.1.e
* Días de un mes
*/
#include <stdlib.h>
#include <stdio.h>
enum Meses {enero, febrero, marzo, abril, mayo,
junio, julio, agosto, septiembre,
octubre, noviembre, diciembre};
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
enum Meses mes;
int diasMes;
/* Pedir datos y comprobación */
printf ("\n Introduce el número de un mes");
printf ("\n (0 = enero, 11 = diciembre:");
scanf("%d", (int *) &mes);
/* Proceso de cálculo y mostrar*/
switch(mes){
case abril:
case junio:
case septiembre:
case noviembre:
diasMes = 30;
break;
case febrero:
diasMes = 28;
break;
default:
diasMes = 31;
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
50
Programador de Sistemas
}
/* Mostrar el resultado */
printf ("\nEl mes número %d tiene %d días\n", mes, diasMes);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 5.2.a)
' Máximo, mínimo y media de una lista de números
Sub MaxMinMedia()
Dim n As Double
Dim contador As Long
Dim maximo As Double, minimo As Double, media As Double
Dim mensaje As String
minimo = 1E+17: maximo = -1E+17
Do While True
n = InputBox("Dame un número")
If n < 0 Then Exit Do
contador = contador + 1
If n > maximo Then maximo = n
If n < minimo Then minimo = n
media = media + n
Loop
mensaje = "Número
mensaje = mensaje
mensaje = mensaje
minimo & vbCrLf
mensaje = mensaje
media / contador
MsgBox mensaje
End Sub
de datos en lista: " & contador & vbCrLf
& "El máximo es: " & maximo & vbCrLf
& "El mínimo es: " &
& "La media es: " &
/*
* Ejercicio 5.2.a
* Max, min y promedio de una lista
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables
*/
float n = 0;
float max = -100000000;
float min = 100000000;
float media = 0;
int cont = 0;
/* Pedir datos y procesar */
while (1){
printf ("\n Introduce un número: ");
scanf ("%f", &n);
if (n < 0) break;
cont++;
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
51
Programador de Sistemas
media = media + n;
if (n > max) max = n;
if (n < min) min = n;
}
/* Mostrar el resultado */
printf ("\nNúmero de datos en lista: %d\n", cont);
printf ("El máximo es %f\n", max);
printf ("El mínimo es %f\n", min);
printf ("La media es %f\n", media / cont);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 5.2.b)
' Vocal o consonante
Sub VocalOConsonante()
Dim Letra As String * 1
Dim mensaje As String
Letra = InputBox("Escribe una letra:")
Select Case Letra
Case "a", "e", "i", "o", "u"
mensaje = "La letra es vocal"
Case Else
mensaje = "La letra es consonante"
End Select
MsgBox mensaje
End Sub
/*
* Ejercicio 5.2.b
* Vocal o consonante
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
char c;
/* Pedir datos */
printf ("\n Escribe una letra: ");
scanf ("%c", &c);
/* Procesar y mostrar resultado */
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'){
printf ("\n%c es vocal\n", c);
}else{
printf ("\n%c es consonante\n", c);
}
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
52
Programador de Sistemas
' Ejercicio 5.2.c)
' Mayor de tres números
Sub Mayor3numeros()
Dim A(2) As Double, mayor As Double
mayor = -1E+18
For i = 0 To 2
A(i) = InputBox("Dame el número " & i)
If mayor < A(i) Then mayor = A(i)
Next
MsgBox "El mayor es " & mayor
End Sub
/*
* Ejercicio 5.2.c
* Mayor de tres números
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
float mayor = -999999999;
int i = 0;
float n = 0;
/* Pedir datos */
/* Pedir datos y Procesar */
for (i = 1; i <= 3; i++){
printf ("\n Escribe el número %d: ", i);
scanf ("%f", &n);
if (n > mayor) mayor = n;
}
/* Mostrar el resultado */
printf ("\nEl mayor es: %f\n", mayor);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 5.2.d)
' Primo o no primo, ese es el dilema
Sub PrimoONo()
Dim n As Integer, i As Integer, indicador As Boolean
i = 2: indicador = True
n = InputBox("Dime el número")
Do While i < n
If n Mod i = 0 Then
indicador = False
End If
i = i + 1
Loop
If indicador Then
MsgBox "El número " & n & " es primo"
Else
MsgBox "El número " & n & " no es primo"
End If
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
53
Programador de Sistemas
End Sub
/*
* Ejercicio 5.2.d
* Determinar si un número es primo
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y
variables */
int n = 0;
int i = 2;
int indic = 1;
/* Pedir datos */
printf ("\n Escribe el número: ");
scanf ("%d", &n);
/* Procesar */
while (i < n){
if (n % i == 0) indic = 0;
i++;
}
/* Mostrar el resultado */
if (indic == 1){
printf("\nEl número es primo");
}else{
printf("\nEl número no es primo");
}
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 5.2.e)
' Los 100 primeros números primos
Sub PrimerosPrimos()
Dim n As Long, i As Long, primos As Integer
Dim mensaje As String
n = 1: primos = 0
Do While True
i = 2: indicador = True
Do While i < n
If n Mod i = 0 Then
indicador = False
End If
i = i + 1
Loop
If indicador = True Then
mensaje = mensaje & n & vbCrLf
primos = primos + 1
End If
n = n + 1
If primos = 100 Then Exit Do
Loop
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
54
Programador de Sistemas
Debug.Print mensaje
End Sub
/*
* Ejercicio 5.2.e
* Los 100 primeros primos
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y
variables */
int n = 1;
int i = 2;
int primos = 0;
int indic = 1;
/* Procesar y mostrar primos */
while (1){
i = 2;
indic = 1;
while (i < n){
if (n % i == 0) indic = 0;
i++;
}
if (indic == 1){
printf ("\n %d", n);
primos++;
}
n++;
if (primos >= 100) break;
}
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 5.2.f)
' La calculadora humana
Sub Calculadora()
Dim opcion As String * 1, num1 As Double, num2 As Double
Dim resultado As Double
Dim mensaje As String, operacion As String
mensaje
mensaje
mensaje
mensaje
mensaje
mensaje
=
=
=
=
=
=
"
PROGRAMA CALCULADORA" & vbCrLf & vbCrLf
mensaje & "a) Sumar" & vbCrLf
mensaje & "b) Restar" & vbCrLf
mensaje & "c) Multiplicar" & vbCrLf
mensaje & "d) Dividir" & vbCrLf
mensaje & "e) Salir" & vbCrLf
Do While opcion <> "e"
opcion = InputBox(mensaje)
Select Case opcion
Case "a", "b", "c", "d"
num1 = InputBox("Primer número")
num2 = InputBox("Segundo número")
Select Case opcion
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
55
Programador de Sistemas
Case "a" 'Suma
resultado = num1 + num2
operacion = "Suma"
Case "b" 'Resta
resultado = num1 - num2
operacion = "Resta"
Case "c" 'Multiplicación
resultado = num1 * num2
operacion = "Multiplicación"
Case "d" 'División
resultado = num1 / num2
operacion = "División"
End Select
MsgBox "La " & operacion & "
de " & num1 & " y " & num2 & " es " &
resultado
End Select
Loop
End Sub
/*
* Ejercicio 5.2.f
* Calculadora
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables
*/
char opcion;
float num1 = 0;
float num2 = 0;
float resultado = 0;
/* Procesar y mostrar primos */
while (1) {
num1 = 0; num2 = 0;
resultado = 0;
fflush ( stdin);
system("cls");
printf("\n\nLA CALCULADORA
HUMANA\n");
printf("=====================\n");
printf("\n Elige una de las siguientes operaciones:\n");
printf("\n a) Sumar");
printf("\n b) Restar");
printf("\n c) Multiplicar");
printf("\n d) Dividir");
printf("\n e) Salir");
printf("\n\nPulsa opción (a, b, c, d, e): ");
scanf("%c", &opcion);
if (opcion == 'e') break;
printf("\n\n
- Escribe el primer número: ");
scanf("%f", &num1);
printf("
- Escribe el segundo número: ");
scanf("%f", &num2);
if (opcion == 'a') resultado = num1 + num2;
if (opcion == 'b') resultado = num1 - num2;
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
56
Programador de Sistemas
if (opcion == 'c') resultado = num1 * num2;
if (opcion == 'd') resultado = num1 / num2;
printf ("\n\n\nResultado: %f\n\n", resultado);
system("PAUSE");
}
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 6.1.a)
' Función que retorna el doble de un número
Function DobleN(Numero As Double) As Double
DobleN = 2 * Numero
End Function
/*
* Ejercicio 6.1.a
* Doble de un número
*/
#include <stdlib.h>
#include <stdio.h>
/* Función doble */
/* Calcula el doble de un número
pasado como parámetro */
float doble(float n){
float b = 0;
b = 2 * n;
return(b);
}
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
float a = 0;
/* Pedir dato */
printf ("\nTeclea un número: ");
scanf("%f", &a);
/* Procesar */
/* Mostrar resultado */
printf ("\n\nEl doble de %f es %f", a, doble(a));
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 6.1.b)
' Función que calcula el volumen de un cubo
Function VolumenCubo(lado As Double) As Double
VolumenCubo = lado ^ 3
End Function
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
57
Programador de Sistemas
/*
* Ejercicio 6.1.b
* Volumen de un cubo
*/
#include <stdlib.h>
#include <stdio.h>
/* Función VolumenCubo */
/* Calcula el volumen de un cubo
pasando el lado como parámetro */
float VolumenCubo(float n){
float b = 0;
b = n * n * n;
return(b);
}
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
float a = 0;
/* Pedir dato */
printf ("\nVOLUMEN DE UN CUBO");
printf ("\n==================\n\n");
printf ("\nTeclea la longitud del lado: ");
scanf("%f", &a);
/* Procesar */
/* Mostrar resultado */
printf ("\n\nEl volumen es %f", VolumenCubo(a));
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 6.1.c)
' Función que calcula el área de un círculo
Function AreaCirc(radio As Double) As Double
Const Pi = 3.141598
AreaCirc = Pi * radio ^ 2
End Function
/*
* Ejercicio 6.1.c
* Área de un círculo
*/
#include <stdlib.h>
#include <stdio.h>
/* Función AreaCirculo */
/* Calcula el área de un círculo
pasando el radio como parámetro */
float AreaCirculo(float n){
#define PI 3.141598 /* Constante PI */
float b = 0;
b = PI * n * n;
return(b);
}
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
58
Programador de Sistemas
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
float a = 0;
/* Pedir dato */
printf ("\nÁREA DE UN CÍRCULO");
printf ("\n==================\n\n");
printf ("\nTeclea la longitud del radio: ");
scanf("%f", &a);
/* Procesar */
/* Mostrar resultado */
printf ("\n\nEl área es %f", AreaCirculo(a));
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 6.1.d)
' Función que calcula el volumen de un cilindro
Function VolCilin(radio As Double, altura As Double) As Double
VolCilin = AreaCirc(radio) * altura
End Function
/*
* Ejercicio 6.1.d
* Volumen de un cilindro
*/
#include <stdlib.h>
#include <stdio.h>
/* Función AreaCirculo */
/* Calcula el área de un círculo
pasando el radio como parámetro */
float AreaCirculo(float n){
#define PI 3.141598 /* Constante PI */
float b = 0;
b = PI * n * n;
return(b);
}
float VolumenCilindro(float r, float h){
return(AreaCirculo(r) * h);
}
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
float radio = 0;
float altura = 0;
/* Pedir dato */
printf ("\nVOLUMEN DE UN CILINDRO");
printf ("\n======================\n\n");
printf ("\nTeclea la longitud del radio de la base: ");
scanf("%f", &radio);
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
59
Programador de Sistemas
printf ("\nTeclea la longitud de la altura: ");
scanf("%f", &altura);
/* Procesar */
/* Mostrar resultado */
printf ("\n\nEl volumen es %f", VolumenCilindro(radio, altura));
/* Detener para que se vea y terminar */
printf ("\n\n\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 6.1.e)
' Función que pide un número por pantalla y retorna el valor escrito
Function PideNumero() As Double
Dim aux As Variant
Do
aux = InputBox("Escribe un número")
Loop While Not IsNumeric(aux)
PideNumero = aux
End Function
/*
* Ejercicio 6.1.e
* Pide un número y lo presenta en pantalla
*/
#include <stdlib.h>
#include <stdio.h>
/* Función AreaCirculo */
/* Calcula el área de un círculo
pasando el radio como parámetro */
void Contestar(float n){
printf("%f", n);
return;
}
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
float a = 0;
/* Pedir dato */
printf ("\nCONTESTAR LO ESCRITO");
printf ("\n====================\n\n");
printf ("\nEscribe un número: ");
scanf("%f", &a);
/* Procesar */
Contestar(a);
/* Mostrar resultado */
/* Detener para que se vea y terminar */
printf ("\n\n\n\n");
system("PAUSE");
return(0);
}
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
60
Programador de Sistemas
' Ejercicio 6.2.a)
' Procedimiento que muestra un mensaje por pantalla
Sub MuestraMsg(texto As String)
MsgBox texto, vbCritical + vbOKOnly, "Mensaje del sistema"
End Sub
/*
* Ejercicio 6.2.a
* Muestra un mensaje estándar por pantalla
*/
#include <stdlib.h>
#include <stdio.h>
/* Función AreaCirculo */
/* Calcula el área de un círculo
pasando el radio como parámetro */
void MostrarMsg(void){
char a;
printf("Mensaje del sistema\n");
printf("===================\n\n");
printf("Pulsa INTRO para continuar\n");
scanf("%c", &a);
system("cls");
return;
}
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
/* Pedir dato */
printf ("\nMOSTRAR MENSAJE ESTÁNDAR");
printf ("\n========================\n\n");
/* Procesar */
MostrarMsg();
/* Mostrar resultado */
/* Detener para que se vea y terminar */
printf ("\n\n\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 6.2.b)
' Muestra un menú con tres opciones
Sub MuestraMenu3()
Dim texto As String, aux As Variant
texto = " M E N Ú
D E
T R E S
O P C I O N E S"
texto = texto & vbCrLf & vbCrLf
texto = texto & "1) Opción primera" & vbCrLf
texto = texto & "2) Opción segunda" & vbCrLf
texto = texto & "3) Opción tercera" & vbCrLf
texto = texto & vbCrLf & vbCrLf
texto = texto & "(Introduce valores 1, 2 ó 3)"
Do
aux = InputBox(texto, "Selección de opciones")
Loop While aux <> 1 And aux <> 2 And aux <> 3
MuestraMsg (aux)
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
61
Programador de Sistemas
End Sub
/*
* Ejercicio 6.2.b
* Muestra un menú con tres opciones
*/
#include <stdlib.h>
#include <stdio.h>
/* Función AreaCirculo */
/* Calcula el área de un círculo
pasando el radio como parámetro */
void Menu3opt(void){
char a;
do {
system("cls");
printf("M E N Ú
D E
T R E S
O P C I O N E S\n");
printf("=========================================\n\n");
printf("1) Opción primera\n");
printf("2) Opción segunda\n");
printf("3) Opción tercera\n");
printf("\n\n");
printf("Introduce valor de la opción (1, 2 ó 3): ");
scanf("%c", &a);
} while (a != '1' && a != '2' && a != '3');
printf("\n\nOpción elegida: %c\n\n", a);
return;
}
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
/* Pedir dato */
printf ("\nMOSTRAR MENÚ DE OPCIONES");
printf ("\n========================\n\n");
system("PAUSE");
/* Procesar */
Menu3opt();
/* Mostrar resultado */
/* Detener para que se vea y terminar */
printf ("\n\n\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 7.1.a)
' Pide la temperatura media mensual y responde la media anual
Sub TemperaturaAnual()
Dim meses(1 To 12, 0 To 2)
Dim i As Byte, media As Double
Dim mensaje As String
meses(1,
meses(2,
meses(3,
meses(4,
meses(5,
0)
0)
0)
0)
0)
=
=
=
=
=
1:
2:
3:
4:
5:
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
meses(1,
meses(2,
meses(3,
meses(4,
meses(5,
1)
1)
1)
1)
1)
=
=
=
=
=
"Enero"
"Febrero"
"Marzo"
"Abril"
"Mayo"
62
Programador de Sistemas
meses(6, 0) = 6: meses(6, 1)
meses(7, 0) = 7: meses(7, 1)
meses(8, 0) = 8: meses(8, 1)
meses(9, 0) = 9: meses(9, 1)
meses(10, 0) = 10: meses(10,
meses(11, 0) = 11: meses(11,
meses(12, 0) = 12: meses(12,
= "Junio"
= "Julio"
= "Agosto"
= "Septiembre"
1) = "Octubre"
1) = "Noviembre"
1) = "Diciembre"
For i = 1 To 12
Do
aux = InputBox("Indica la temperatura media en " & meses(i, 1))
Loop While Not IsNumeric(aux) Or aux < -20 Or aux > 60
meses(i, 2) = aux
Next
media = 0
For i = 1 To 12
media = media + meses(i, 2)
Next
mensaje = "Resumen anual de temperaturas"
mensaje = mensaje & vbCrLf & vbCrLf
mensaje = mensaje & "Temperatura media del
año: " & media / 12
MuestraMsg (mensaje)
End Sub
/*
* Ejercicio 7.1.a
* Temperatura media de 12 meses
*/
#include <stdlib.h>
#include <stdio.h>
#define NUMERO_MESES 12
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables
*/
float tempMeses[NUMERO_MESES];
int j;
float tempMedia = 0;
/* Lectura de los valores */
for (j = 0; j < NUMERO_MESES; j++){
printf("Introduce la temperatura del mes %d: ", j+1);
scanf("%f", &tempMeses[j]);
}
/* Procesar */
for (j = 0; j < NUMERO_MESES; j++)
tempMedia = tempMedia + tempMeses[j];
tempMedia = tempMedia / NUMERO_MESES;
/* Mostrar el mensaje */
printf("\nLa temperatura media anual es %f", tempMedia);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
63
Programador de Sistemas
return(0);
}
' Ejercicio 7.1.b)
' Crea una matriz unid. de 10 elem., rellena con valores entre 1 y 10 y la imprime
Sub Matrix10()
Dim Matriz(1 To 10)
Dim i As Byte
Randomize
For i = 1 To 10
Matriz(i) = Int(Rnd() * 10 + 1)
Next
For i = 1 To 10
Debug.Print Matriz(i)
Next
End Sub
/*
* Ejercicio 7.1.b
* Matriz de 10 números aleatorios
*/
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
int matr[10];
int j;
/* Lectura de los valores */
/* Procesar */
srand (time(NULL));
for (j = 0; j < 10; j++)
matr[j] = rand() % 100;
/* Mostrar el mensaje */
for (j = 0; j < 10; j++)
printf ("Elemento %d: %d\n", j+1, matr[j]);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 7.1.c)
' Crea una matriz 5x5, rellana con valores entre 1000 y 2000, la imprime
' y muestra el valor máximo y mínimo
Sub Matrix5x5()
Dim Matriz(1 To 5, 1 To 5) As Long
Dim i As Byte, j As Byte
Dim maximo As Long, minimo As Long
Dim mensaje As String
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
64
Programador de Sistemas
Randomize
For i = 1 To 5
For j = 1 To 5
Matriz(i, j) = Int(1000 * Rnd() + 1000)
Next
Next
maximo = 1000: minimo = 2000
For i = 1 To 5
For j = 1 To 5
mensaje = mensaje & Matriz(i, j) & " "
If maximo < Matriz(i, j) Then maximo = Matriz(i, j)
If minimo > Matriz(i, j) Then minimo = Matriz(i, j)
Next
mensaje = mensaje & vbCrLf
Next
mensaje = mensaje & vbCrLf
mensaje = mensaje & "El valor máximo es: " & maximo & vbCrLf
mensaje = mensaje & "El valor mínimo es: " & minimo
MuestraMsg (mensaje)
End Sub
/*
* Ejercicio 7.1.c
* Matriz de 5x5 números aleatorios
*/
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
int matr[5] [5];
int i;
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
65
Programador de Sistemas
int j;
int max = -9999999;
int min = 9999999;
/* Lectura de los valores */
/* Procesar */
srand (time(NULL));
for (i = 0; i < 10; i++){
for (j = 0; j < 10; j++){
matr[j] [i] = rand() % 1000 + 1000;
}
}
/* Mostrar el mensaje */
for (i = 0; i < 10; i++){
for (j = 0; j < 10; j++){
printf ("%d ", matr[j] [i]);
if (matr[j] [i] > max) max = matr[j] [i];
if (matr[j] [i] < min) min = matr[j] [i];
}
printf ("\n");
}
printf ("\nEl máximo es %d", max);
printf ("\nEl mínimo es %d", min);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 7.1.d)
' Pide notas de alumnos hasta que se pone un negativo. Al final
' muestra máximo, mínimo, media y número de alumnos
Sub EvaluaciónAlumnos()
Dim Notas()
Dim i As Integer, aux As Variant
Dim maximo As Single, minimo As Single, media As Single
Dim Numero As Integer
Dim mensaje As String
i = 0
Do While True
Do
aux = InputBox("Introduce la nota del alumno número " & i + 1)
Loop While Not IsNumeric(aux) Or aux >= 10
If aux < 0 Then Exit Do
If i = 0 Then
ReDim Notas(0)
Else
ReDim Preserve Notas(UBound(Notas) + 1)
End If
Notas(i) = aux
i = i + 1
Loop
maximo = 0: minimo = 10
media = 0: Numero = 0
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
66
Programador de Sistemas
For i = 0 To UBound(Notas)
If maximo < Notas(i) Then maximo =
Notas(i)
If minimo > Notas(i) Then minimo =
Notas(i)
media = media + Notas(i)
Numero = Numero + 1
Next
mensaje = "RESUMEN DE NOTAS DE MATEMÁTICAS"
mensaje = mensaje & vbCrLf & vbCrLf
mensaje = mensaje & "Número de alumnos: " &
Numero & vbCrLf
mensaje = mensaje & "Nota máxima: " & maximo
& vbCrLf
mensaje = mensaje & "Nota mínima: " & minimo
& vbCrLf
mensaje = mensaje & "Media de notas: " &
media / Numero & vbCrLf
MuestraMsg (mensaje)
End Sub
' Ejercicio 7.1.e)
' Tenga una función que recibe como parámetro un array y un elemento.
' La función determina si el elemento se encuentra en el array,
' devolviendo 0 si no está y 1 si lo está
Sub EnviaArray()
Dim elem As String, A(4) As String
Dim mensaje As String
elem = "a"
A(0) = "b": A(1) = "a": A(2) = "c": A(3) = "z": A(4) = "t"
MsgBox RecibeArray(elem, A())
End Sub
Function RecibeArray(elemento As String, ParamArray Matriz() As Variant)
aux = 0
For i = 1 To UBound(Matriz)
If Matriz(i) = elemento Then aux = 1
Next
RecibeArray = aux
End Function
' Ejercicio 7.2.a)
' Da la longitud de una cadena de texto
Function LongCadena(cadena As String) As Long
Dim i As Long
i = 1
Do While Mid(cadena, i, 1) <> ""
i = i + 1
Loop
LongCadena = i - 1
End Function
/*
* Ejercicio 7.2.a
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
67
Programador de Sistemas
* Longitud de una cadena
*/
#include <stdlib.h>
#include <stdio.h>
#define MAX_CADENA 100
/* Función principal */
int main(void)
{
/* Declaración de constantes y variables */
char cadena[MAX_CADENA];
int longitud = 0;
/* Lectura de los valores */
printf("Introduce una cadena de caracteres: ");
scanf("%s", &cadena);
/* Procesar */
while (cadena[longitud] != '\0'){
longitud++;
}
/* Mostrar el mensaje */
printf("La longitud de \"%s\" es %d\n", cadena, longitud);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 7.2.b)
' Devuelve la misma cadena sin vocales
Function SinVocales(cadena As String) As String
Dim i As Long, aux As String
For i = 1 To LongCadena(cadena)
aux = Mid(cadena, i, 1)
Select Case aux
Case "a", "e", "i", "o", "u"
Case Else
SinVocales = SinVocales & aux
End Select
Next
End Function
/*
* Ejercicio 7.2.b
* Cadena sin vocales
*/
#include <stdlib.h>
#include <stdio.h>
/* Función principal */
int main(
int argc, char *argv[])
{
/* Declaración de constantes y variables */
char *mensaje;
char *mensaje_duplica;
int i, j, longitud;
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
68
Programador de Sistemas
/* Lectura de los valores */
if (argc != 2){
printf ("\nUso: %s <mensaje a acortar>\n", argv[0]);
exit(-1);
}
/* Procesar */
mensaje = argv[1];
longitud = 0;
for (i = 0; mensaje[i] != '\0'; i++){
longitud++;
}
mensaje_duplica = (char *)malloc(sizeof(char)*(longitud+1));
if (mensaje_duplica == NULL){
printf("No se puede asignar memoria\n");
return(0);
}
j = 0;
for (i = 0; i <= longitud; i++){
if (
(mensaje[i] != 'a') &&
(mensaje[i] != 'e') &&
(mensaje[i] != 'i') &&
(mensaje[i] != 'o') &&
(mensaje[i] != 'u')
)
{
mensaje_duplica[j] = mensaje[i];
j++;
}
}
mensaje_duplica[j] = '\0';
/* Mostrar el mensaje */
printf("%s\n", mensaje_duplica);
free(mensaje_duplica);
/* Detener para que se vea y terminar */
printf ("\n\n");
system("PAUSE");
return(0);
}
' Ejercicio 7.2.c)
' Dice si la cadena es un palíndromo
Function Palindromo(cadena As String) As String
Dim i As Long, largo As Long
largo = LongCadena(cadena)
Palindromo = "Sí"
For i = 1 To Int(largo / 2)
If Mid(cadena, i, 1) <> Mid(cadena, largo - i + 1, 1) Then
Palindromo = "No"
End If
Next
End Function
' Ejercicio 7.2.d)
' Primera y última letra alfabéticamente de una cadena
Sub PriUltLetra()
Dim cadena As String, primera As String, ultima As String
Dim Letra As String * 1
primera = "z": ultima = "a"
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
69
Programador de Sistemas
cadena = InputBox("Escribe una cadena de texto")
For i = 1 To LongCadena(cadena)
Letra = Mid(cadena, i, 1)
If Letra > ultima Then ultima = Letra
If Letra < primera Then primera = Letra
Next
MsgBox "La primera es: " & primera & vbCrLf & "La última es: " & ultima
End Sub
' Ejercicio 7.2.e)
' Crea una cadena aleatoria de 10 car. e indica cuántas veces se repite una letra
Sub RepiteLetra()
Dim cadena As String, Letra(), Numero()
Dim i As Byte, caracter As String
Dim j As Byte, esta As Byte
Randomize
For i = 1 To 10
cadena = cadena & Chr(Int(Rnd() * 26 + 97))
Next
MsgBox cadena
ReDim Letra(0), Numero(0)
For i = 1 To 10
caracter = Mid(cadena, i, 1)
For j = 0 To UBound(Letra)
If caracter = Letra(j) Then esta = j
Next
If esta > 0 Then
Numero(esta) = Numero(esta) + 1
Else
ReDim Preserve Letra(UBound(Letra) + 1)
ReDim Preserve Numero(UBound(Letra) + 1)
Letra(UBound(Letra)) = caracter
Numero(UBound(Letra)) = 1
End If
esta = 0
Next
mensaje = "Cadena aleatoria:
" & cadena & vbCrLf & vbCrLf
For i = 1 To UBound(Letra)
mensaje = mensaje & "- Letra " & Letra(i) & ", " & _
Numero(i) & " veces" & vbCrLf
Next
MsgBox mensaje
End Sub
' Ejercicio 7.2.f)
' Partir cadena solicitada en tres partes
Sub PartirCadenaEn3()
Dim cadena As String, Parte(2) As String
Dim mensaje As String
cadena = InputBox("Dame una cadena de texto")
mensaje = "La cadena es: " & cadena & vbCrLf & vbCrLf
If Len(cadena) < 7 Then
mensaje = mensaje & "La cadena tiene menos de 7 caracteres"
Else
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
70
Programador de Sistemas
Parte(0) = Left(cadena, 2)
Parte(1) = Mid(cadena, 4, 3)
Parte(2) = Right(cadena, 4)
End If
If Len(cadena) >= 7 Then
For i = 0 To 2
mensaje = mensaje & "- " & Parte(i) & vbCrLf
Next
End If
MsgBox mensaje
End Sub
Módulo 2 – Conceptos de Redes
Antonio J. Emperador Sau
71