Introducci on a los Computadores Estructuras de...
Transcript of Introducci on a los Computadores Estructuras de...
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Introduccion a los ComputadoresEstructuras de control repetitivas en C
CNM-130
Departamento de MatematicasFacultad de Ciencias Exactas y Naturales
Universidad de Antioquia
Copyleft «2009. Reproduccion permitida bajo los
terminos de la licencia de documentacion libre GNU.
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Contenido
1 Introduccion
2 Estructura repetitiva for
3 Estructura repetitiva while
4 Estructura repetitiva do-while
5 Ejemplos
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Estructuras de control repetitivas
Las estructuras de control permiten modificar el flujo de ejecucionde las instrucciones de un algoritmo o programa
Se utilizan cuando en el desarrollo de la solucion de un problema sehace necesario ejecutar una serie de instrucciones un numero repetidode veces
El conjunto de instrucciones que se ejecuta repetidamente se llamaciclo o bucle
Cada vez que se ejecuta el bucle se dice que se ha producido unaiteracion
Los bucles constituyen, junto con las sentencias condicionales, lospilares de la programacion estructurada.
Caracterısticas de los ciclos
Deben incluir una condicion de parada
Deben finalizar luego de un numero finito de veces
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Tipos de estructuras repetitivas
Ciclo para (for)
Se conoce a priori el numero de veces que se debe repetir el conjunto deinstrucciones
El numero de repeticiones no depende de las sentencias contenidas en elciclo
Ciclo mientras (while)
No se conoce a priori el numero de veces que se debe repetir el conjuntode instrucciones
La condicion de parada se evalua antes de ejecutarse el ciclo
El numero de repeticiones puede depender de las sentencias contenidasen el ciclo
Ciclo repetir (do-while)
No se conoce a priori el numero de veces que se debe repetir el conjuntode instrucciones
Se ejecuta primero el ciclo y luego se evalua la condicion de parada
El numero de repeticiones puede depender de las sentencias contenidasen el ciclo
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Estructura repetitiva for
Elementos del ciclo:
exp1: inicializa la variable de control del ciclo (V = VI)
exp2: condicion de parada del ciclo (V <= VF)
exp3: actualiza la variable de control del ciclo (incrementa o decrementa a V)
for (exp1; exp2; exp3) sentencias;
o para varias sentencias
for (exp1; exp2; exp3) {
sentencias;
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 2.1
Ejemplo 2.1
Realice un programa en C que imprima los enteros desde el 1 hasta el 10.No utilice estructuras repetitivas.
Solucion
naturales.c
#include<stdio.h>
main(){
// imprime enteros del 1 al 10printf("1 \n");printf("2 \n");printf("3 \n");printf("4 \n");printf("5 \n");printf("6 \n");printf("7 \n");printf("8 \n");printf("9 \n");printf("10 \n");
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 2.2
Ejemplo 2.2
Resuelva el ejemplo (2.1) en C utilizando estructuras repetitivas.
Solucion
naturales2.c
#include<stdio.h>
main(){int i;
for (i=1; i<=10; i++) printf(" %d \n", i);
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 2.3
Ejemplo 2.3
Realice una programa en C que imprima los enteros impares desde el 1hasta el 10.
Solucion
naturales3.c
#include<stdio.h>
main(){int i;
for (i=1; i<=10; i+=2) printf(" %d \n", i);
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 2.4
Ejemplo 2.4
Realice un programa en C que imprima los enteros en orden descendentedesde el 10 hasta el 1.
Solucion
naturales4.c
#include<stdio.h>
main(){int i;
for (i=10; i>=1; i--) printf(" %d \n", i);
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Contadores en C
Contador: variable que se incrementa o decrementa de formaconstante cada vez que se ejecuta la instruccion que lo contiene
Uso:
Cuenta las veces que ocurre un determinado suceso
Controla la ejecucion de un bucle que se realiza un determinado numerode veces.
Inicializacion: todo contador debe tomar un valor inicial antes de serusado,
tipo Variable Contador = valor;
Sintaxis de un contador en C:
Variable Contador = Variable Contador + constante;
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 2.5
Ejemplo 2.5
Realice un programa en C que lea N numeros enteros desde el teclado ycuente cuantos de ellos son ceros.
Solucion
Datos:
N: variable de tipo entero que representa el numero de datos que seingresan
NUM: variable de tipo entero, se utilizara para almacenar los valores delos enteros ingresados.
Variables de salida:
NUMCEROS: variable de tipo entero que actuara de contador, cuenta elnumero de ceros
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 2.5
cuenta ceros.c
#include<stdio.h>
main(){int k, N, NUM, NUMCEROS;
NUMCEROS = 0; // inicializa variable contadora
printf("Numero de datos a ingresar: ");
scanf("%d", &N);
for (k=1; k<=N; k++) {
printf("Ingrese numero: ");
scanf("%d", &NUM);
if (NUM==0) NUMCEROS = NUMCEROS + 1;
}
printf("Numero de ceros: %d \n", NUMCEROS);
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Acumuladores en C
Acumulador: variable que almacena un valor que se incrementa odecrementa de forma variable durante un proceso repetitivo.
Sintaxis de un acumulador:
Variable Acumulador = Variable Acumulador + variable;
Variable Acumulador = Variable Acumulador - variable;
Variable Acumulador = Variable Acumulador * variable;
Inicializacion: todo acumulador debe tomar un valor inicial antes de serusado
Cuando el acumulador varıa por suma sucesiva de variables se inicializaa 0:
(tipo) Variable Acumulador = 0;
Cuando el acumulador varıa por producto sucesiva de variables seinicializa a 1:
(tipo) Variable Acumulador = 1;
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 2.6
Ejemplo 2.6
Realice programa en C que sume los numeros enteros desde 1 hasta N .
Solucion
Datos:
N: variable de tipo entero que representa el entero hasta donde serealiza la suma
SUMA: variable de tipo entero que actuara de acumulador; almacena lasuma de los primeros N numeros naturales
1 + 2 + · · · + N
Variables de salida:
SUMA
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 2.5
suma enteros.c
#include<stdio.h>
main(){int i, N, SUMA;
SUMA = 0; // inicializa variable acumuladora
printf("Numero numero de enteros a sumar: ");
scanf("%d", &N);
for (i=1; i<=N; i++) {SUMA += i; // SUMA = SUMA + i
}
printf("La suma es: %d \n", SUMA);
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 2.7
Ejemplo 2.7
El factorial de un numero entero no negativo n se define como
n! = 1 · 2 · · · (n− 1) · n , con 0! = 1 y 1! = 1
Escriba un programa en C que calcule el factorial de un entero N ≥ 1.
Solucion
Datos:
N: variable de tipo entero que representa el entero hasta donde serealiza el producto
PROD: variable de tipo entero que actuara de acumulador; almacena elproducto de los primeros N numeros naturales
1 * 2 * · · · * N
Variables de salida:
PROD
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 2.7
factorial.c
#include<stdio.h>
main(){int i, N, PROD;
PROD = 1; // inicializa variable acumuladora
printf("Ingrese N: ");
scanf("%d", &N);
for (i=1; i<=N; i++) {PROD *= i; // PROD = PROD * i
}
printf("El factorial es: %d \n", PROD);
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Estructura repetitiva mientras
La estructura repetitiva while (mientras) es utilizada en un ciclocuando no sabemos el numero de veces que este se ha de repetir
Elementos del bucle:
EXPRESION: sentencia booleana que determina si se ejecuta el bucle
sentencias: instrucciones a ejecutar si EXPRESION es verdadera
while (EXPRESION) sentencias;
o para varias sentencias:
while (EXPRESION) {
sentencias;
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 3.1
Ejemplo 3.1
Realice un programa en C que muestre en pantalla la suma de dos numerosenteros leidos por teclado y que permita repetir el proceso cuantas veces sedesee.
Solucion
Variables:
NUM1: variable de tipo entero, almacena el primer numero leido
NUM2: variable de tipo entero, almacena el segundo numero leido
suma: variable de tipo entero, almacena la suma de los numeros leidos
RESPUESTA: variable de tipo de caracter, dependiendo de la respuestaalmacenada se ejecuta o no el ciclo
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 3.1
suma2.c
#include<stdio.h>
main(){int NUM1, NUM2, suma;char RESPUESTA;
printf("Desea sumar dos enteros (S/N)?: ");scanf(" %c", &RESPUESTA);
while (RESPUESTA==’S’) {printf("Ingrese entero 1: ");scanf(" %c", &NUM1);
printf("Ingrese entero 2: ");scanf(" %d", &NUM2);
suma = NUM1 + NUM2;
printf("La suma es %d \n", suma);
printf("Desea sumar dos enteros (S/N)?: ");scanf(" %c", &RESPUESTA);
}}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 3.2
Ejemplo 3.2
Realice un programa en C que calcule el promedio de los primeros N
numeros naturales. Utilice las estructurtas repetitivas mientras y para.
Solucion
Variables:
N: variable de tipo entero, almacena el ultimo entero
NUM: variable de tipo entero, almacena uno a uno cada numero a sumar
SUM: variable de tipo entero que actuara de acumulador, almacena lasuma de los naturales
PROM: variable de tipo real, almacena almacena el promedio de losdatos
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
promedio mientras.c
#include<stdio.h>
main(){int N, NUM = 1, SUM = 0;
float PROM;
printf("Ingrese N: ");
scanf(" %d", &N);
while (NUM<=N) {SUM = SUM + NUM;
NUM = NUM + 1;
}PROM = (float)SUM/(float)N;
printf("Promedio = %g \n", PROM);
}
promedio para.c
#include<stdio.h>
main(){int N, i, SUM = 0;
float PROM;
printf("Ingrese N: ");
scanf(" %d", &N);
for (i=1;i<=N;i++) SUM = SUM + i;
PROM = (float)SUM/(float)N;
printf("Promedio = %g \n", PROM);
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Dato Centinela
Centinela: valor particular que no pertenece al rango de valoresadmitidos como validos para una variable
Permiten finalizar un proceso de entrada de datos
Ejemplos:
1 Proceso: leer numeros positivos; Centinela = -1
2 Proceso: leer los 10 primeros enteros pares positivos; Centinela = 22
3 Proceso: leer nombres de personas; Centinela = "FIN"
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 3.3: dato centinela
Ejemplo 3.3
Realice un programa en C que reciba por teclado enteros positivos y sume lospares.
Solucion
Datos:
NUM: variable de tipo entero, se utilizara para almacenar los enterosingresados
-1: dato centinela que se utilizara para finalizar el algoritmo
Variables de salida:
SUMAPARES: variable de tipo entero que actuara de acumulador,almacena la suma de los pares
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
suma pares.c
#include<stdio.h>
main(){int NUM, SUMAPARES = 0;float PROM;
printf("Ingrese numero: ");scanf(" %d", &NUM);
while (NUM!=-1) {if (NUM %2==0) SUMAPARES = SUMAPARES + NUM;
printf("Ingrese numero: ");scanf(" %d", &NUM);
}printf("Suma de pares = %d \n", SUMAPARES);
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Variables tipo bandera o “switche”
Banderas: variables booleanas; determinan dos alternativas a seguirdentro del algoritmo
Posibles valores de las banderas:
"VERDADERO" o "FALSO"
"SI" o "NO"
1 o 0
Usos de las banderas:
Controlan el flujo logico de un programa
Permiten variar la secuencia de ejecucion del algoritmo dependiendo desu valor en cada instante
Dependiendo de su valor, determinan si el algoritmo ha pasado por undetermnado punto
Salir de un ciclo
Ejecutar una u otra accion dependiendo de su valor
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 3.4: variable bandera
Ejemplo 3.4
Realice un programa en C que genere los primeros N terminos de lasucesion
17 , 15 , 18 , 16 , 19 , 17 , 20 , 18 , 21 , . . .
Solucion
Variables:
NT: variable de tipo entero; numero de terminos a generar
CONT: variable de tipo entero que actuara de contador para controlar elciclo
TER: variable de tipo entero, almacena cada termino de la sucesion
BAN: variable de tipo bandera, selecciona si se suma -2 o +3 a TER
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
sucesion.c
#include<stdio.h>
main(){int NT, TER = 17, CONT = 1, BAN = 1;
printf("Ingrese numero de terminos: ");scanf(" %d", &NT);
while (CONT<=NT) {printf(" %d",TER);
if (BAN==1) {TER = TER - 2;BAN = 2;
}else {
TER = TER + 3;BAN = 1;
}CONT = CONT + 1;
}}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 3.5: variable bandera
Ejemplo 3.5
Realice un programa en C que lea desde el teclado enteros positivos y sumelos multiplos de 3. El algoritmo debe finalizar al ingresar un numeronegativo.
Solucion
Variables:
CONTINUAR: variable de tipo bandera, determina cuando finaliza elalgoritmo
NUM: variable de tipo entero; almacena el entero ingresado en cadaiteracion
SUMA: variable de tipo entero que actuara de acumulador, almacena lasuma de los multiplos de 3
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
multiplos3.c
#include<stdio.h>#include<string.h>
main(){int NUM, SUMA = 0;char CONTINUAR[3] = "si";
while (!strcpy(CONTINUAR,"si")) {printf("Ingrese entero: ");scanf(" %d", &NUM);
if (NUM<0) strcpy(CONTINUAR,"no");
else if (NUM %3==0) SUMA = SUMA + NUM;}printf("Suma = %d \n", SUMA);
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 3.6: ruptura de ciclos
Ejemplo 3.6
Realice un programa en C que lea desde el teclado N enteros y se detengacuando al menos uno de los numeros leidos sea cero.
Solucion
Variables:
N: variable de tipo entero, almacena el numero de enteros a ingresar
k: variable de tipo entero que actuara de contador del ciclo
ENCONTRADO: variable de tipo bandera, determina cuando finaliza elalgoritmo; si ENCONTRADO==F el algoritmo continua, si ENCONTRADO==V elalgoritmo llega a su fin
NUM: variable de tipo entero; almacena el entero ingresado en cadaiteracion
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
ruptura ciclo.c
#include<stdio.h>
#include<string.h>
main(){int k = 1, N, NUM;
char ENCONTRADO = ’F’;
printf("Numero de terminos a ingresar: ");
scanf(" %d", &N);
while ( (k<=N) && (ENCONTRADO==’F’) ) {printf("Ingrese entero: ");
scanf(" %d", &NUM);
if (NUM==0)
ENCONTRADO = ’V’;
else
k++;
}
if ( ENCONTRADO == ’V’ )
printf("Al menos uno es cero");
else
printf("Ninguno es cero");
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 3.7: maximo y mınimo
Ejemplo 3.7
Como parte de un experimento un biologo requiere tomar la temperaturaexterior de un lugar cada hora por un perıodo de 6 horas. Realice unprograma en C que reciba como datos las temperaturas tomadas y determinela mayor y la menor.
Solucion
Variables:
TEMP: variable de tipo real, almacena la temperatura medida en cadahora
MAX: variable de tipo real, almacena la mayor temperatura leida
MIN: variable de tipo real, almacena la menor temperatura leida
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
max min.c
#include<stdio.h>
#include<string.h>
main(){int k = 2, TEMP, MAX, MIN;
printf("Ingrese temperatura: ");
scanf(" %d", &TEMP);
MAX = TEMP;
MIN = TEMP;
while (k<=6) {printf("Ingrese temperatura: ");
scanf(" %d", &TEMP);
if (TEMP>MAX)
MAX = TEMP;
else if (TEMP < MAX)
MIN = TEMP;
k++;
}
printf("El maximo es %d y el mınimo es %d \n",MAX, MIN);
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Estructura repetitiva do-while
Se ejecuta primero el ciclo y luego se evalua la condicion de parada
Elementos del bucle:
EXPRESION: sentencia booleana que determina si se ejecuta el bucle
INSTRUCCIONES: sentencias a ejecutar si EXPRESION es verdadera
do {
INSTRUCCIONES;
} while (EXPRESION)
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 4.1
Ejemplo 4.1
Realice un programa en C que le solicite al usuario un entero; cuando elnumero proporcionado sea 666 se debe imprimir el mensaje “adivinaste”.
Solucion
satanas.c
#include<stdio.h>
main(){int NUM;
do {printf("Ingrese entero: ");scanf(" %d", &NUM);
} while (NUM != 666);
printf("Adivinaste");
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 4.2
Ejemplo 4.2
Realice un programa en C que calcule la suma de los primeros N enterospositivos.
Solucion
suma hasta.c
#include<stdio.h>
main(){int N, SUMA = 0, NUM = 1;
printf("Ingrese entero: ");scanf(" %d", &N);
do {SUMA += NUM; // SUMA = SUMA + NUMNUM++; // NUM = NUM + 1
} while (NUM <= N);
printf("La suma es %d \n", SUMA);
}
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 5.1
Ejemplo 5.1
Realice un programa en C que obtenga la suma de los terminos de lasucecion
2 , 5 , 7 , 10 , 12 , 15 , 17 , . . . , 1800.
Solucion
Variables:
TER: variable de tipo entero, almacena cada termino de la sucesion
BAN: variable de tipo bandera, selecciona si se suma 2 o 3 a TER
SUMA: variable de tipo entero que actuara de acumulador paraalmacenar la suma
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 5.1
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 5.2
Ejemplo 5.2
Realice un programa en C lea un entero N y calcule la suma
1−1
2+
1
3−
1
4+ · · · ±
1
N
Solucion
Variables:
N: variable de tipo entero; determina hasta donde se hace la suma
k: variable de tipo entero; contador del ciclo
TER: variable de tipo entero, almacena cada termino de la sucesion
BAN: variable de tipo bandera, selecciona si se suma 2 o 3 a TER
SUMA: variable de tipo entero que actuara de acumulador paraalmacenar la suma
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo (5.3): epsilon de la maquina
Ejemplo 5.3
En aritmetica de punto flotante el epsilon de la maquina (ε-mach) sedefine como el menor valor ε almacenado en la maquina que satisface
1 + ε > 1 ,
es decir, el menor numero que el computador reconoce como mayor a cero.Realice un programa en C que calcule el epsilon de la maquina.
Observaciones
Precision simple 32-bits:
1 = 1 00000001| {z }8 bits
00000000000000000000000| {z }23 bits
1 + ε = 1 00000001| {z }8 bits
00000000000000000000001| {z }23 bits
=⇒ ε = 2−23
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo (5.3): epsilon de la maquina
Idea del algoritmo
1.0 +1
2= 1.5
1.0 +1
22= 1.25
1.0 +1
23= 1.125
1.0 +1
24= 1.0625
...
1.0 +1
2n= 1.0
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo (5.4): la conjetura de Collatz (Ulam)
Ejemplo 5.4 (Problema de Collatz)
Sea n un entero positivo. Si n es par, divıdalo entre 2, sino lo es,multiplıquelo por 3 y sumele 1. Itere este proceso hasta que el numero quealcance sea 1. Realice un programa en C que implemente dicho proceso.
Observaciones
Para n = 10 la sucesion generada es
10 , 5 , 16 , 8 , 4 , 2 , 1
Conjetura de Collatz:
“Para cualquier entero positivo n, el proceso iterativo deCollatz arriba descrito siempre terminara en 1 en un numerofinito de pasos”
La conjetura de Collatz es un problema abierto en matematicas y hastaahora no ha sido resuelto
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo (5.4): la conjetura de Collatz (Ulam)
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo (5.5): conjetura de Collatz (continuacion)
Ejemplo 5.5 (Problema de Collatz 2)
Modifique el programa del problema de Collatz (5.5) de manera tal que noimprima los terminos de la sucesion generada sino solamente el numero deiteraciones necesarias para alcanzar el 1. Realice varios experimentosnumericos. ¿Siempre se alcanza 1? Compare sus resultados con losmostrados en las figuras.
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo (5.5): conjetura de Collatz (continuacion)
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo (5.6): sucesion de Fibonacci
Ejemplo 5.6
Realice un programa en C que imprima los n primeros terminos de lasucecion de Fibonacci
0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 , . . . , n
Solucion
Los terminos de la sucesion estan dados por
f0 = 0
f1 = 1
...
fn = fn−1 + fn−2 para n = 2, 3, . . .
Variables:
PRI: variable de tipo entero; representa el primer numero a sumar
SEG: variable de tipo entero; representa el segundo numero a sumar
TER: variable de tipo entero; representa el termino de la serie
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo 5.7 (Divisores)
Realice un programa en C que encuentre todos los divisores positivos de unentero no negativo N y que imprima ademas el numero de divisores queposee.
Solucion
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo (5.8): numeros primos
Ejemplo 5.8 (Detecta numeros primos)
Un numero entero positivo N es primo si los unicos enteros positivos quelo dividen son 1 y N . Realice un programa en C que determine si un enterono negativo N es primo.
Solucion
Variables:
N: variable de tipo entero
i: variable de tipo entero; almacena los divisores de N y controla elciclo
primo: variable de tipo bandera, determina si N es primo y el cicloacaba
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Numeros primos
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Maximo comun divisor
Ejemplo 5.9
Desarrolle un programa en C que calcule el maximo comun divisor(mcd) de dos numeros naturales a y b, i.e.,
Solucion
El mcd de dos enteros no negativos a y b es el mayor entero positivoque es divisor de a y de b
mcd(48, 60) = ?
Divisores de 48 = {1, 2, 3, 4, 6, 8, 12, 16, 24, 48}
Divisores de 60 = {1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60}
⇓
mcd(48, 60) = 12
Propiedades:
mcd(a, b) ≤ a mcd(a, b) ≤ b mcd(a, 0) = |a|
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Maximo comun divisor
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Numeros perfectos
Ejemplo 5.10
Un numero natural se denomina numero perfecto si es precisamente iguala la suma de todos sus divisores positivos sin incluirse el mismo. Realice unprograma en C que determine si un entero positivo N es un numero perfecto.
Solucion
Numeros perfectos:
Divisores de 6 = {1, 2, 3, 6} y 1 + 2 + 3 = 6
Divisores de 28 = {1, 2, 4, 7, 14, 28} y 1 + 2 + 4 + 7 + 14 = 28
Variables:
N: variable de tipo entero
i: variable de tipo entero; almacena los divisores de N y controla el ciclo
suma: variable de tipo entero, almacena la suma de los divisores de N
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Numeros perfectos
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo (5.11)
Ejemplo 5.11
Realice un programa en C que, dado un valor de x, calcule el valor de lafuncion
f(x) = 1− x+x2
2!− x3
3!+x4
4!− x5
5!+ · · ·
Tenga en cuenta solo los terminos de la serie que en valor absoluto sonmayores o iguales a 10−3.
Solucion
Variables:
i: variable de tipo entero, genera el exponente y el factorial
ter: variable de tipo real, almacena cada termino de la serie
ter = (−1) ∧ i ∗ (x ∧ i/i!)
fac: variable de tipo entera, almacena el factorial
fx: variable de tipo real, acumula la suma de los terminos de la serie
fx = fx + ter
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Ejemplo (5.11)
Introduccion Ciclo for Ciclo while Ciclo do-while Ejemplos
Referencias
M.A. CriadoProgramacion en lenguajes estructuradosAlfaomega Grupo Editor, S.A. de C.V. Primera Edicion, 2006
H.M. Mora EscobarIntroduccion a C y a metodos numericosUniversidad Nacional de Colombia (Sede Bogota), 2004
M.J. PaezC y C++ de afanSegunda edicion. Editorial Universidad de Antioquia, 2004
E. ScheinermanC++ for MathematiciansTaylor & Francis Group, LCC., 2005