Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROBLEMAS Y ALGORITMOS
Los algoritmos son procedimientos especficos que sealan paso a paso la solucin de un
problema y que garantizan el logro de una solucin.
Generalmente estamos realizando, en forma cotidiana, una serie de pasos, procedimientos o
acciones para alcanzar algn resultado o resolver un problema. Por ejemplo, al levantarnos,
baarnos, desayunar.
Es decir todo el tiempo estamos aplicando algoritmos para resolver problemas.
Algoritmo: conjunto de pasos, procedimientos o acciones que nos permiten alcanzar un
resultado o resolver un problema.
PROBLEMA
Anlisis del
problema
Construccin del
algoritmo
Verificacin del
algoritmo
Datos de
entrada
Procesami
ento datos
Impres.
De result
Estructura de un algoritmo:
EJEMPLOS DE ALGORITMOS:
1. Algoritmo Promedio
Descripcin: Calcular la media de 3 nmeros
Variables: Entero: n1, n2, n3, Real: prom
Inicio
1
2
3
Fin
3. ALGORITMO: Sueldo
DESCRIPCCION: Calcular el sueldo de un empleado dados como datos de entrada: el nombre, hrs.
De trabajo y el pago en hr.
CONSTANTE: Real: Pagohr=50.30
VARIABLE: Cadena: nombre
Entero: hrs.
Real: Sueldo
INICIO
1
Leer nombre
2
Leer hrs.
3
Sueldo= Pagohr*hrs
4
FIN
4. ALGORITMO: Evaluacin
DESCRIPCCION: Elaborar un algoritmo que obtenga e imprima el valor de Y a partir de la ecuacin.
Y= 3*X2 + 7X - 15
CONATANTE: -----------------VARIABLE: Real: X, Y
INICIO
1
Leer X
2
Y= (3*X*X)+(7*x) -15
3
Escribir Y
FIN
5. ALGORITMO: Sistema de ecuaciones
DECRIPCCION: El sistema de ecuaciones lineales:
ax + by= c
dx + ey= f
Se puede resolver con las formulas:
X= ce bf
ae bd
y= af cd
ae bd
Si ae bd 0
Elabore un algoritmo que lea los coeficientes a, b, c, d, e, f; y calcule los valores de x, y.
CONSTANTE: -----------------------VARIABLE: Real: a, b, c, d, e, f, x, y
INICIO
1
2
3
4
FIN
Leer a, b, c, d, e, f
x=(c*e) (b*f) /(a*e) (b*d)
y=(a*f) (c*d) / (a*e) (b*d)
Escribir x, y
x Si x > 0
-x Si x < o
INICIO
1.
Leer x
2.
Si (x < 0) entonces
x = x * (-1)
Fin_si
3.
Escribir x
FIN
7. ALGORITMO: Par o impar
DESCRIPPCION: Elabora un algoritmo para leer un nmero y determinar si es par o impar.
CONSTANTE: --------------------------VARIABLE: Entero: N
INICIO
1.
Leer N
2.
Si (N % 2 == 0) entonces
Escribir "N en par"
Si no Escribir "N en impar"
Fin _ s
FIN
8. ALGORITMO: Nmeros
DESCRIPCCION: Elaborar un algoritmo para leer 3 nmeros y determinar si uno de ellos es la suma
de los otros dos.
CONSTANTES: ----------------------------VARIABLES: entero: N1, N2, N3
INICIO
1.
Leer N1, N2, N3
2.
S (N1 = N2 + N3) entonces
Escribir N1 es la suma de N2 + N3
S no s (N2 = N1 + N3) entonces
Escribir N2 es la suma de N1 + N3
S ni s (N3 = N1 + N2) entonces
Escribir N3 es la suma de N1 + N2)
S no Escribir Ningn es la suma de los otros dos
Fin _ s
Fin _ s
Fin _ s
FIN
1.
2.
Escribir N2 es la suma de N1 + N3
S ni s (N3 = N1 + N2) entonces
Escribir N3 es la suma de N1 + N2)
S no Escribir Ningn es la suma de los otros dos
Fin _ s
Fin _ s
Fin _ s
FIN
DIAGRAMAS DE FLUJO:
Representan la esquematizacin grfica de un algoritmo.
Muestra grficamente los pasos o procesos a seguir para alcanzar la solucin de un problema.
Representa la solucin del problema, el programa representa la implementacin en un lenguaje de
programacin.
SIMBOLOS:
Marca el inicio o fin del diagrama de flujo
Decisin. Se colocan condiciones, que dependiendo del resultado, se sigue por una de las ramas o caminos
alternativos.
INICIO
Lectura
de datos
ETAPAS EN LA CONSTRUCCION DE
UN DIAGRAMA DE FLUJO
Procesami
datos
Impre.
resultado
FIN
TIPOS DE DATOS:
Se representan de forma diferente en la memoria de la computadora.
TIPO DE DATO
Int
Float
Long
double
Char
DESCRIPCION
Son cantidades ENTERAS
Son nmeros REALES. Nmero
de coma flotante.
ENTEROS LARGOS
Nmero de coma flotante de
doble precisin (ms cifras
significativas y mayor valor
posible del exponente)
Carcter. Abecedario, nmeros
o smbolos especiales
REQUERIMIENTO TIPICO
DE MEMORIA
2 bytes o una palabra (vara
de un compilador a otro)
4 palabras (32 bits)
4 palabras (32 bytes)
RANGO
-32.768 a
+32.767
3.4 x 10-38 a 3.4 x
1038
-2147.483.648 a
2147.483.648
1 byte (8 bits)
Abecedario,
nmeros o
smbolos
especiales
Otra clasificacin:
ENTEROS: char, short, int, long, enum.
REALES: float, double, long double.
OTROS: void.
ENTEROS: signed (con signo), unsigned (sin signo)
signed char, unsigned char
signed short, unsigned short
signed int, unsigned int
signed long, unsigned long
Un ENTERO SIGNED es un entero con signo. Es decir un nmero entero positivo o negativo.
Un ENTERO UNSIGNED es un entero sin signo. Es decir un nmero entero positivo.
Si signed o unsigned no se usan con un tipo, se asume como un int. Por lo tanto son similares:
signed x;
signed int x;
unsigned y;
unsigned int y;
Si omitimos signed o unsigned el compilador asume que es un tipo signed. Por ejemplo: si
colocamos:
int
BYTES
1
1
2
2
2
2
4
4
4
8
10
DESDE
-128
0
-32768
0
-32768
0
-2.147.483.648
0
3,4x10-38
1,7x10-308
3,4x10-4932
HASTA
127
255
32767
65535
32767
65535
2.147.483.647
4294967295
3,4x1038
1,7x10308
3,4x104932
Es similar a:
const int va0 = 0;
const int va1 = 1;
const int va2 = 2;
const int va3 = 3
VARIABLES
El valor de una variable puede cambiar a lo largo de la ejecucin de un programa.
Es un identificador que se utiliza para representar cierto tipo de informacin dentro de una parte
de un programa.
El valor asignado a una variable, el programa puede recuperarlo simplemente haciendo referencia
al nombre de la variable.
El valor de la variable puede cambiar a lo largo del programa, pero no puede cambiar su tipo de
dato.
La asignacin es una operacin destructiva, ya que si la variable tena un valor, este se destruye al
asignar el nuevo.
Ejemplos: declaraciones:
int va1, va2;
float re1, re2;
char ca1, ca2;
va1 = 10;
va2 = va1 + 15;
va1 = 15;
re1 = 3.235;
ca1 = t;
ca2 = ?;
/* Asignacin de 25 a va2 */
/* La variable va1 modifica su valor */
/* Asignacin del valor 3.235 a la variable re1 que es real */
/* Asignacin del caracter t a la variable ca1 */
/* Asignacin del caracter ? a la variable ca2 */
OPERADORES
Los operadores sirven para realizar operaciones. Pueden ser:
1. Operadores aritmticos
1.1 Operadores aritmticos simplificados
1.2 Operadores de incremento y decremento
2. Operadores relacionales
3. Operadores lgicos
4. Operador coma
1. Operadores Aritmticos:
Existen 5 operadores en C:
Operador
+
*
/
%
Propsito
Adicin
Sustraccin
Multiplicacin
Divisin
Mdulo o residuo
No hay operador de exponenciacin en C. Para esto hay una funcin de biblioteca (pow) que
realiza la exponenciacin.
int x
(x es una variable entera)
float v (v es una variable flotante)
Operador aritmtico
+
Operacin
Suma
Resta
Multiplicacin
Divisin
Modulo - Residuo
c1 = P;
c2 = T;
En ASCII P = 80
En ASCII T = 84
En ASCII 5 = 53
Expresin
c1
c1 + c2
c1 + c2 + 5
c1 + c2 + 5
Valor
80
164
169
217
Si a y b son enteros:
a = 11; b = -3;
Expresin
a+b
ab
a*b
a/b
a%b
Valor
8
14
-33
-3
2
Ejemplos
x = 4.5 + 3;
v = 4.5 + 3;
x = 4.5 - 3;
v = 4.5 - 3;
x = 4.5 * 3;
v = 4.5 * 3;
v = 4 * 3;
x = 4 / 3;
x = 4.0 / 3.0;
v = 4 / 3;
v = 4.0 / 3;
v = ((float) 4 / 3);
v = ((float) 5 + 3) / 6;
x = 15 % 2;
v = (15 % 2) / 2;
v = ((float) 15 % 2)) / 2;
Resultados
x = 7;
v = 7.5;
x = 1;
v = 1.5;
x = 12;
v = 13.5;
v = 12.0
x = 1;
x = 1;
v = 1.0
v = 1.33;
v = 1.33;
v = 1.33;
x = 1;
v = 0.0;
v = 0.5;
Si a y b son enteros:
a = -11; b = 3;
Expresin
a+b
ab
a*b
a/b
a%b
Valor
-8
-14
-33
-3
-2
Si a y b son enteros:
a = -11; b = -3;
Expresin
a+b
ab
a*b
a/b
a%b
Valor
-14
-8
33
3
-2
Coma flotante:
r1 = -0.66;
r2 = 4.50;
Expresin
r1 + r2
r1 r2
r1 * r2
r1 / r2
i = 7;
f = 5.5;
c = w;
Valor
3.84
-5.16
-2.97
-0.146667
/* Entero */
/* Coma flotante */
/* Caracter */
Expresin
i+f
i+c
i + c 0
(i + c) (2 * f / 5)
Valor
12.5
126
78
123.8
Tipo
Doble precisin
Entero
Entero
Doble precisin
a[(b/c)]*d]
1.666666
48
36
Ejemplo:
Int i = 8, j = 15, k = 4;
x = 2 * (( i % 5 ) * ( 4 * ( j 3) / ( k + 2 )));
int x, i = 8, j = 15, k = 5;
x = 2 * (( i % 5 ) * ( 4 * ( j - 3) / ( k + 2 )));
Forma
simplificada
+=
-=
*=
/=
%=
Ej:
expresion 1 += expresin 2
Equivale a:
expresion 1 = expresion 1 + expresion 2
expresion 1 -= expresion 2
Equivale a:
expresion 1 = expresion 1 - expresion 2
Ejemplo
Equivalencia
Resultado
x = 6;
y = 4;
x += 5;
x += y;
x = 10;
y = 5;
x -= 3;
x -= y;
x = 5;
y = 3;
x *= 4;
x *= y;
x = 25;
y = 3;
x /= 3;
x /= y;
x = 20;
y = 3;
x %= 12;
x %= y;
x = 6;
y = 4;
x = x + 5;
x = x + y;
x = 10;
y = 5;
x = x - 3;
x = x - y;
x = 5;
y = 3;
x = x * 4;
x = x * y;
x = 25;
y = 3;
x = x / 3;
x = x / y;
x = 20;
y = 3;
x = x % 12;
x = x % y;
x = 6;
y = 4;
x = 11;
x = 15;
x = 10;
y = 5;
x = 7;
x = 2;
x = 5;
y = 3;
x = 20;
x = 60;
x = 25;
y = 3;
x = 8;
x = 2;
x = 20;
y = 3;
x = 8;
x = 2;
Operacin
++
Incremento
Ejemplos
x = 7;
y = x++;
x = 7;
y = ++x;
--
Decremento
x = 6;
y = x--;
x = 6;
y = --x;
Resultados
x = 7;
y = 7;
x = 8;
x = 7;
y = 8;
x = 8;
x = 6;
y = 6;
x = 5;
x = 6;
y = 5;
x = 5;
-0x7FFF
-0.2
-5E-8
=
=
/* Variable entera */
i = i + 1;
=
i = i 1;
=
++i;
i++;
--i;
i--;
6
4;
-raiz1
-(x+y) -3 * (x+y)
Ejemplos:
printf (i = %d\n, i);
printf (i = %d\n, ++i);
printf (i = %d\n, i);
i = 1;
i = 2;
i = 2;
/* Visualiza el valor de i */
/* Incrementa i y presenta despus su valor */
/* Visualiza el valor final de i */
i = 1;
i = 1;
i = 2;
/* Visualiza el valor de i */
/* Se visualiza el valor actual de i y despus lo
incrementa a 2*/
/* Visualiza el valor final de i */
Ejemplos:
int = 2
float = 4
double = 8
char = 1
Otra forma de obtener sta informacin es utilizar un cast, en lugar de una variable dentro de
cada sentencia printf. Cada cast est encerrado en parntesis.
printf (int: %d\n, sizeof (int));
printf (float: %d\n, sizeof (float));
printf (double: %d\n, sizeof (double));
printf (char: %d\n, sizeof (char));
int = 2
float = 4
double = 8
char = 1
Nmero de caracteres = 11
EJERCICIOS:
que_imprime1.c
#include <stdio.h>
main ()
{
int i = 5, j = 7, k = 3, m1;
float x = 2.5, z = 1.8, t;
m1 = ((j % k) / 2) + 1;
m1 += i;
m1 %= --i;
printf("El valor de m1 es: %d\n", m1);
t = ((float) (j % k) / 2);
printf("Primer t es: %f\n", t);
t++;
printf("Segundo t es: %f\n", t);
x *= ++z;
t -= (x += ++i);
printf("\nEl valor de t es: %.2f",t);
}
que_imprime2.c
#include <stdio.h>
main ()
{
int i = 15, j, k, l;
j = (15 > i--) > (14 < ++i);
printf("\nEl valor de j es: %d", j);
//printf("\nEl valor de i es: %d", i);
k = !('b' != 'd') > (!i - 1);
printf("\nEl valor de k es: %d", k);
//printf("\nEl valor de i es: %d", i);
l = (!(34 > (70 % 2)) || 0);
printf("\nEl valor de l es: %d", l);
}
Construya un diagrama de flujo que, al recibir como datos la longitud y el peso de un objeto
expresados en pies y libras, imprima los datos de ese objeto pero expresados en metros y kilos,
respectivamente.
EXPRESIONES LOGICAS
Llamadas tambin Booleanas en honor al matemtico George Boole estn construidas por
nmeros, contantes o variables, y operadores lgicos o ralacionales.
En lenguaje C, todo valor distinto de cero es verdad. Es decir 0 (cero) es falso.
2. Operadores relacionales
Operador relacional
==
!=
<
>
<=
>=
Operacin
Igual a
Diferente de
Menor que
Mayor que
Menor o igual que
Mayor o igual que
Ejemplos
res = h == p;
res = a != b;
res = 7 < 15;
res = 22 > 11;
res = 15 <= 2;
res = 35 >= 20;
Resultados
res = 0;
res = 1;
res = 1;
res = 1;
res = 0;
res = 1;
Cuando se usan operadores relacionales con operandos lgicos, falso siempre es menor que
verdadero.
res = (7 > 8) > (9 > 6);
Interpretacin
Verdad
Falso
Falso
Falso
Verdad
Valor
1
0
0
0
1
3. Operadores Lgicos
int x, y; (x e y son variables enteras)
Operador
lgico
!
Operacin
Negacin
&&
Conjuncin
||
Disyuncin
Ejemplos
Resultados
x = 1;
y = 1;
x = 1;
y = 0;
x = 1;
y = 1;
Q
V
1
F
0
V
1
F
0
(!P)
F
0
F
0
V
1
V
1
(!Q)
F
0
V
1
F
0
V
1
(P || Q)
V
1
V
1
V
1
F
0
i=7
f = 5.5
c = w
Expresin
( i >= 6 ) && ( c == 'w )
( i >= 6 ) || ( c == 119 )
( f < 11 ) && ( i > 100 )
( c != 'p' ) || ( (i + f) <= 10 )
Interpretacin
Verdad
Verdad
Falso
Verdad
Valor
1
1
0
1
(P && Q)
V
1
F
0
F
0
F
0
4. Operador Coma
Sirve para encadenar diferentes expresiones.
int x,y,z,v;
Expresin
x = (v = 3, v * 5);
x = (v += 5, v % 5);
x = (y = (!(7 > 15), z = (35 > 40) && y, (!(y && z)));
Equivalencia
v = 3;
x = v * 5;
v = v + 5;
x = v % 3;
y = (15 > 10);
z = (2 >= y);
x = y && z;
y = (!(7 > 15);
z = (35 > 40) && y;
x = (!(y && z));
Resultados
v=3
x = 15
v=8
x=2
y=1
z=1
x=1
y=1
z=0
x=1
Operadores
()
!, ++, -*. /, %
+, ==, !=, <, >, <=, >=
&&, ||
+=, -=, *=, /=, %=
,
Jerarqua
(mayor)
(menor)
Construir un diagrama de flujo que, al recibir como datos A, B, C y D que representan nmeros
enteros, escriba los mismos en orden inverso.
A, B, C, D variables enteras
Diagrama de flujo 1.2
Construir un diagrama de flujo que, al recibir como datos la clave del empleado y los seis primeros
sueldos del ao, calcule el ingreso total semestral y el promedio mensual, e imprima la calve del
empleado, el ingreso total y el promedio mensual.
Datos: clave, s1, s2, s3, s4, s5, s6
La clave es de tipo int, s1 hasta s6 son de tipo flotante.
FUNCION SCANF
Se usa para introducir datos en el computador desde el dispositivo de entrada estndar.
scanf(cadena de control, arg1, arg2,, argn)
Cadena de control: hace referencia a una cadena de caracteres que contiene cierta informacin
sobre el formato de los datos
arg1, arg2, argn son argumentos que representan los datos. (En realidad argumentos son
punteros que indican las direcciones de memoria donde se encuentran los datos)
En la cadena de control se incluyen:
Grupos individuales de caracteres
Con un grupo de caracteres por cada dato de entrada
Cada grupo de caracteres debe comenzar con %
En su forma ms sencilla, un grupo de caracteres estar formado por el % seguido de un carcter
de conversin que indica el tipo de dato correspondiente.
Ejemplo:
Ej:
#include <stdio.h>
main ()
{
char letras [20];
int entero;
float costo;
.
scanf(%s %d %f, letras, &entero, &costo);
.
}
Cada nombre de variable debe ser precedido por &, ya que son punteros que indican donde se
encuentran situados los datos en la memoria de la computadora.
Los nombres de arreglos no deben ser precedidos por ampersand (&)
La cadena de control es: %s %d %f que contiene 3 grupos de caracteres.
%s indica que el primer argumento es (letras) representa una cadena de caracteres.
%d indica que el segundo argumento (&entero) es un entero decimal.
%f indica que el tercer argumento (&costo) es de coma flotante.
Significado
El dato es un carcter
El dato es entero decimal
El dato es de coma flotante
El dato es de coma flotante
El dato es de coma flotante
El dato es un entero corto
El dato es un entero decimal, octal o hexadecimal
El dato es entero octal
El dato es una cadena de caracteres seguida de un carcter de
espacio \0
El dato es un entero decimal sin signo
El dato es una cadena de caracteres que puede incluir caracteres
de espaciado
FUNCION PRINTF
Sirve para escribir datos en el dispositivo de salida estndar.
Printf se ocupa de transportar datos de la memoria de la computadora al dispositivo de salida
estndar. Scanf en cambio, introduce datos del dispositivo de entrada estndar y los almacena en
la memoria de la computadora.
printf(cadena de control, arg1, arg2,, argn)
Cadena de control: hacen referencia a una cadena de caracteres que contiene informacin sobre
el formato de la salida.
Arg1, agr2,.., argn, son argumentos que representan los datos de salida.
Los argumentos de printf no representan direcciones de memoria por lo tanto no son precedidos
por ampersand.
Caracteres de conversin de los datos de salida de uso comn:
Carcter de
conversin
c
d
e
f
g
i
Significado
El dato es visualizado como un carcter
El dato es visualizado como un s entero decimal con signo
El dato es visualizado como un valor de coma flotante con
exponente
El dato es visualizado como un valor de coma flotante sin
exponente
El dato es visualizado como un valor de coma flotante utilizando
la conversin de tipo e o tipo f segn sea el caso
El dato es visualizado como un valor como un entero con signo
o
s
u
x
Ejemplo:
#include <stdio.h>
#include <math.h>
main ()
{
float i = 2.0, j = 3.0;
printf(%f %f %f %f, i, j, i + j, sqrt(i = j));
}
Ejemplo:
#include <stdio.h>
main ()
{
char letras[20];
int entero;
float costo;
printf(%s %d %f, letras, entero, costo);
}
La cadena de control es: %s %d %f. Contiene %s caracteres, %d entero, %f costo de coma
flotante.
Probar con esta cadena de control: printf(%s%d%f, letras, entero, costo);
Ejemplo:
#include <stdio.h>
main ()
{
double x = 5000.0, y = 0.0025;
printf(%f %f %f\n\n, x, y, x*y, x/y);
printf(%e %e %e, x, y, x*y, x/y);
}
Salida1:
5000.00000
0.002500
12.500000
2000000.000000
2.0000000e+006
Ejemplo:
#include <stdio.h>
main ()
{
char linea[80];
scanf(%[^\n], lnea);
printf(%s, lnea);
}
Ingresar: La Liga es uno de los mejores equipos de futbol del Ecuador!
#include <stdio.h>
main ()
{
/* especificacin de longitud de campo mnima *(
Int i = 12345;
float x = 345.678;
printf("%3d %5d %8d\n\n", i, i, i);
printf("%3f %10f %13f\n\n", x, x, x);
printf("%3e %13e %16e", x, x, x);
}
FUNCIONES gets y puts
Cada una de estas funciones acepta un solo argumento. Facilitan las transferencias de cadenas de
caracteres entre computadora y dispositivos de entrada/salida.
Con gets la cadena se introduce por teclado y termina con un carcter de nueva lnea.
Ofrecen alternativas sencillas al scanf y al printf.
Ejemplo:
#include <stdio.h>
main () / * leer y escribir una lnea de texto * /
(
char linea [80];
gets (linea) ;
puts (linea);
}
Programa ejemplo:
#include <stdio.h>
main ()
/* ejemplo de programa interactivo */
{
char nombre [20];
float nota1, nota2, nota3, media;
printf("Por favor, introduce tu nombre: ");
scanf ("%[^\n]", nombre);
/* introducir nombre */
media = (notal+nota2+nota3)/3;
/* calcular la media */
/* escribir salida */