Sunteți pe pagina 1din 37

Identificacin de datos, problema a resolver, resultados.

Dado un problema a resolver se deben identificar y extraer los datos de entrada que mediante
un proceso nos permitir obtener los datos de salida.
Entrada(s)

Proceso

Resultado(s)

Por ejemplo, si el problema planteado es el de resolver cuantos metros cuadrados tiene un


terreno de 12 m de ancho x 30 m de largo tendremos:
Datos de entrada:

Ancho: 12 m
Largo: 30 m

Proceso:

Superficie del terreno: ancho x largo -> 12 m x 30 m

Salida:

Superficie del terreno: 360 m2

Identificar los datos, procesos y salidas de los siguientes problemas:


Se desea saber a cuantos Ohms equivalen 2 resistencias de 47 conectadas en serie.
Se desea saber a cuantos Ohms equivalen 2 resistencias de 370 conectadas en paralelo.
Se desea saber cul ser la longitud de la circunferencia de una rueda de radio 500 mm.

Resolucin de problemas: identificacin de datos, planteo y prueba de la solucin


Algoritmo: Es el conjunto de pasos u operaciones, lgicamente ordenados, tales que partiendo
de ciertos datos o estados iniciales permita obtener ciertos resultados o estados finales
deseados.
Dado un problema de una cierta naturaleza, cualquier persona que pretenda plantear un
algoritmo para resolverlo deber conocer con la profundidad adecuada las caractersticas del
problema y slo entonces podr resolverlo.
En consecuencia, para resolver un problema particular es esencial tener comprensin
completa del mismo, en toda su extensin y un mtodo cuidadosamente planificado para su
solucin.
Disear un algoritmo que indique como cambiar una lmpara.
1

Disear un algoritmo que indique como cebar un mate.


Disear un algoritmo que indique como cambiar una rueda de un auto.
Disear un algoritmo que indique poner en marcha un auto, hacerlo avanzar hacia adelante 10
m, frenar, hacerlo avanzar 10 metros hacia atrs y detener el motor.
Programa: Es el resultado de implementar un algoritmo en algn lenguaje de programacin, en
nuestro caso C.
Compilador y enlazador.
Compilador: es un programa que analiza la sintaxis del cdigo fuente escrito por un
programador en un determinado lenguaje (entendible para el programador) y lo transforma en
uno entendible por un microprocesador (lenguaje de mquina). ste es el primer paso del
proceso de compilacin, como resultado de este proceso se obtiene un archivo objeto (.obj).
Enlazador: es un programa que toma los objetos generados en los primeros pasos del proceso
de compilacin y lo enlaza con las bibliotecas y funciones que sean necesarias para el correcto
funcionamiento del programa, descartando las que no son utilizadas. Luego de este paso se
obtiene el archivo ejecutable (.exe), al que se lo denomina aplicacin (o programa).
Entorno de desarrollo integrados (IDE).
Un Entorno de Desarrollo Integrado (IDE: Integrated Development Enviroment) es un
programa que integra en una misma interfaz un editor de textos, un compilador, un enlazador
y todo lo necesario para desarrollar, depurar y ejecutar un programa.
Cdigo fuente: es un archivo de texto que escribe el programador basndose en un algoritmo
previamente desarrollado. En el archivo de cdigo fuente se encuentran las instrucciones que
conformarn el programa. La extensin de este tipo de archivos normalmente es el nombre
del lenguaje en el cual se escribi el cdigo fuente en nuestro caso los archivos de cdigo
fuente tienen la extensin (.c).
Cdigo objeto: es el resultado de haber compilado exitosamente el cdigo fuente, si este es el
caso, se obtiene un archivo de cdigo objeto con el mismo nombre que el de cdigo fuente,
pero con la extensin (.obj).
Cdigo binario: este es la aplicacin (o programa) propiamente dicho. Es el resultado de haber
compilado y enlazado exitosamente el cdigo fuente, si este es el caso, se obtiene un archivo
de cdigo binario que puede ser ejecutado directamente por la CPU. El archivo binario (o
ejecutable) lleva el mismo nombre que el de cdigo fuente y el de cdigo objeto, pero su
extensin es (.exe).
Bits y Bytes
La palabra bit proviene del ingls binary digit, o dgito binario. Un dgito en un sistema de
numeracin binario solo puede representar dos valores: 0 y 1. Ahora bien, si con un solo bit
solo se puede representar dos valores, de qu manera se representa un nmero mayor? , por
2

ejemplo 148. La solucin es utilizar ms bits para almacenar la informacin, normalmente se


utiliza un conjunto de 8 bits al que se le da el nombre de Byte.
Puede observarse que a medida que agregamos un bit la capacidad de almacenamiento se va
duplicando, a diferencia del sistema decimal, en el cual la agregar un dgito se aumenta 10
veces el valor que se puede representar.
Ejemplo:
1 bit
0
1

=
=

0
1

2 posibilidades

2 bits
0
0
1
1

0
1
0
1

=
=
=
=

0
1
2
3

4 posibilidades

3 bits
0
0
0
0
1
1
1
1

0
0
1
1
0
0
1
1

0
1
0
1
0
1
0
1

=
=
=
=
=
=
=
=

0
1
2
3
4
5
6
7

8 posibilidades

Nmeros del 0 al 9 representados en un byte (8 bits)


Bit
*
#

8
27
128
0
0
0
0
0
0
0
0
0
0

7
26
64
0
0
0
0
0
0
0
0
0
0

6
25
32
0
0
0
0
0
0
0
0
0
0

5
24
16
0
0
0
0
0
0
0
0
0
0

4
23
8
0
0
0
0
0
0
0
0
1
1

3
22
4
0
0
0
0
1
1
1
1
0
0

2
21
2
0
0
1
1
0
0
1
1
0
0

1
20
1
0
1
0
1
0
1
0
1
0
1

=
=
=
=
=
=
=
=
=
=

0
1
2
3
4
5
6
7
8
9

* Valor del bit expresado como potencia de 2


# Valor del bit expresado como numero decimal

Mtodo para transformar un nmero decimal en binario


1. Dividir el nmero sucesivamente por 2
2. Armar el nmero binario con los restos de las divisiones en el orden inverso en el que
se obtuvieron.
147
1

2
73
1

2
36
0

2
18
0

2
9
1

2
4
0

2
2
0

2
1
1

2
0

Se obtiene 10010011 que es la representacin en cdigo binario del nmero 147


Se puede deducir que:
en un byte es posible almacenar nmeros enteros desde 0 a 255
en dos bytes es posible almacenar nmeros enteros desde 0 a 65535
Mtodo para transformar un nmero binario en decimal
1. Armar una tabla con los valores que representa cada bit de acuerdo a su posicin.
2. Colocar los 1s y 0s, teniendo cuenta que el ltimo dgito binario debe coincidir con el
bit menos significativo (el de ms a la derecha).
3. Sumar solo los valores de los bits en los que se encuentran 1s.
128
1

64
0

32
0

16
1

8
0

4
0

2
1

1
1

+128
16
2
1
147

Ejercicios:
1. Convertir a binario los siguientes nmeros:
a. 128 (1000 0000)
b. 231 (1110 0111)
c. 29 (0001 1101)
d. 85 (0101 0101)
2. Convertir a decimal los siguientes nmeros:
a. 1010 0110 -> 166
b. 0110 0110 -> 102
c. 1110 0110 -> 230
d. 1111 1010 -> 250

Otro sistema de numeracin frecuentemente utilizado en computacin es el hexadecimal, en


este sistema se pueden representar 16 valores por cada dgito. Los valores del 0 al 9 son los
mismos que los del sistema decimal, luego del 10 al 15 se utilizan letras:
A = 10
B = 11
C = 12
D = 13
E = 14
F = 15
Mtodo para transformar un nmero decimal en hexadecimal
1. Dividir el nmero sucesivamente por 16
2. Armar el nmero hexadecimal con los restos de las divisiones en el orden inverso
en el que se obtuvieron.
3. Remplazar los restos mayores a 9 con las letras correspondientes.
3748
4

16
234
10

16
14
14

16
0

Se obtiene EA4 que es la representacin en hexadecimal del nmero 3748


Mtodo para transformar un nmero hexadecimal en decimal
4. Armar una tabla con los valores que representa cada bit de acuerdo a su posicin.
5. Colocar los dgitos hexadecimales en la posicin correspondiente.
6. Sumar los valores en donde los dgitos sean distintos a cero.
Posicin
*
#

3
162
256
E

2
161
16
A

1
160
1
4

= (256 x E) + (16 x A) + (4 x 1)
= (256 x 14) + (16 x 10) + 4
= 3584 + 160 + 4
= 3748

Ejercicios:
3. Convertir a hexadecimal los siguientes nmeros:
a. 4528 (11B0)
b. 5926 (1726)
c. 1023 (3FF)
d. 328 (148)
4. Convertir a decimal los siguientes nmeros:
a. afa -> 2810
b. caf -> 3247
c. 2ba -> 698
5

d. c2f -> 3119


Variables
Variables: son posiciones de la memoria RAM en donde se almacenan valores (los datos que
procesa el programa). Se denominan variables debido a que su valor cambia a lo largo de la
ejecucin del programa. Resulta complicado acceder a una variable utilizando su direccin de
memoria ya que normalmente se trata de nmeros como 2293572 (22ff44 en hexadecimal).
Por esta razn es que se las asocia con un nombre familiar para el programador, por ejemplo,
si desarrollamos un programa que calcula el volumen de un cubo, lo ms probable es que las
variables tengan como nombre:

Alto
Ancho
Profundidad

A los nombres de las variables se los denomina identificadores. Un identificador no puede


comenzar con un nmero, el resto de los caracteres puede ser cualquier letra o nmero, pero
no puede contener espacios en blanco entre caracteres. Tampoco se pueden utilizar caracteres
especiales como la letra ni smbolos como @#, etc.
Nombre Incorrecto
4toao
@electrnica
ciclo superior

Nombre Correcto
cuartoAnio
Electrnica
cicloSuperior

El lenguaje C es sensible a maysculas y minsculas, por lo tanto no es lo mismo escribir alto


que Alto, ya que se consideran dos identificadores distintos.
Palabras reservadas
Son las que ya tienen un significado en lenguaje C, y por lo tanto no pueden ser utilizadas con
un propsito diferente para el que fueron reservadas, no se pueden utilizar como
identificadores de variables o nombres de funcin.
auto
break
case
char
const
continue
default
do

double
else
enum
extern
float
for
goto
if

int
long
register
return
short
signed
sizeof
static

struct
switch
typedef
union
unsigned
void
volatile
while

Tipos de datos
Debido a que son necesarios menos bits para almacenar una letra que un nmero entero, y a
su vez se necesitan menos bits para almacenar un nmero entero que uno con parte decimal
es que el lenguaje C posee 4 tipos de datos, cada uno con una capacidad diferente para
guardar informacin.
6

Tipo
char
Int
float
double
void

Ancho en bit
8
16
32
64
0

Rango
-128 a 127
-32768 a 32767
3.4E-36 a 34E+36 (7 dgitos de precisin)
1.7E-303 a 1.7E+303 (13 dgitos de precisin)
sin valor

Almacena
un carcter
enteros
reales
Nada

Modificadores
Son palabras clave del lenguaje C que se utilizan para cambiar el significado base de un tipo de
dato con el fin de modificar su capacidad de almacenamiento.
Los modificadores son:
signed
unsigned
long
short
Los nicos que se utilizarn son unsigned y long.
Los tipos int y char son signed por defecto y sera redundante calificarlos con el modificador
signed.
Tipo
unsigned char
unsigned int
long int
unsigned long int
long double

Ancho en bit
8
16
32
32
80

Rango
0 a 255
0 a 65535
-2147483648 a 2147483647
0 a 4294967295
3.4E-4932 a 1.1E-4932

A las variables se les debe dar un valor inicial al comienzo del programa, ya que como se trata
de posiciones de memoria, estas pueden contener datos que haya escrito algn programa
utilizado anteriormente. Al proceso de guardar un valor en una posicin de memoria se lo
conoce como asignacin.
Operadores (I)
Operador de asignacin:
= (a la variable que se encuentra a su izquierda le asigna el valor que se encuentra a su
derecha)
Pseudocdigo.
El pseudocdigo son las instrucciones que componen el algoritmo, escritas con una sintaxis tal
que sea fcil de leer para una persona. El pseudocdigo no es un lenguaje de programacin,
son instrucciones escritas en forma genrica que luego pueden ser transcriptas en cualquier de
programacin.
El pseudocdigo se utiliza en las primeras etapas del aprendizaje de programacin
acompaado por su correspondiente diagrama de flujo.

Diagrama de flujo
Un diagrama de flujo es una representacin grfica de un algoritmo. Para crear un diagrama
de este tipo se utilizan smbolos y flechas que sealan el camino de ejecucin del algoritmo. Un
diagrama de flujo tiene un solo punto de comienzo y un solo punto de fin. Los smbolos
utilizados para crear diagramas de flujo se irn presentando a medida que sean necesarios.

Programacin estructurada
Es un paradigma de programacin que postula que todos los programas de computacin
pueden ser diseados y escritos por medio de 3 estructuras bsicas:
1. Secuencial
2. Selectiva
2.1. Simple
2.2. Doble
2.3. Mltiple
3. Repetitiva
3.1. Nmero de repeticiones desconocido (while, do-while)
3.2. Nmero de repeticiones conocido (for)
Operadores (II)
Operadores aritmticos: se utilizan para realizar operaciones matemticas bsicas:
+ (suma)
- (resta)
* (multiplicacin)
/ (divisin)
% (mdulo) Devuelve el resto de una divisin entre enteros (10%3 = 1)

1 - Estructura secuencial
Las instrucciones se ejecutan una a continuacin de otra siguiendo un orden lgico, el flujo del
programa tiene un nico camino en orden descendente.
Ejemplo: diagrama de flujo y pseudocdigo de un programa que calcula la superficie de un
terreno.

Diagrama de flujo
Inicio

"ESTE PROGRAMA
CALCULA LA SUPERFICIE
DE UN TERRENO"

ancho <- 0
largo <- 0
superficie <- 0

INGRESE EL LARGO
DEL TERRENO EN
METROS:

largo
E

"INGRESE EL ANCHO
DEL TERRENO EN
METROS: "

ancho
E

Sup <- ancho x largo

"LA SUPERFICIE
ES: superficie
METROS
CUADRADOS"

Fin

Pseudocdigo

Inicio
ancho <- 0
largo <- 0
superficie <- 0

Cdigo fuente en lenguaje C


/*Programa realizado por
Nombre Alumno*/
#include <stdio.h>
#include <stdlib.h>

Explicacin
Comentario: el texto comprendido entre /* y */ no es considerado cdigo
fuente por el compilador, se utiliza para documentar el programa
Directivas de pre compilacin: indican al compilador que antes de analizar
el cdigo fuente incluya dichas bibliotecas, ya que en ellas se encuentran
las funciones que se utilizarn en el resto del programa. En stdio.h se
encuentran printf() y scanf(). En stdlib.h se halla definida system(). La
extensin (.h) proviene de header (cabecera o encabezado).

main()

Funcin main(): todo programa debe contener una y solo una definicin
de la funcin main(), dado que ella es el punto de entrada del programa y
este debe ser nico.
Comienzo de bloque de cdigo fuente.
Declaracin de variable entera ancho, valor inicial 0
Declaracin de variable entera largo, valor inicial 0
Declaracin de variable entera superficie, valor inicial 0

{
int ancho = 0;
int largo = 0;
int superficie = 0;

Imprimir ESTE PROGRAMA CALCULA LA SUPERFICIE DE UN TERRENO

printf( "ESTE PROGRAMA CALCULA LA SUPERFICIE DE UN TERRENO\n" );

printf(): es la funcin que permite la salida de texto en pantalla, en este


caso recibe un argumento: el texto a mostrar que debe estar encerrado
entre comillas dobles.
\n: es una secuencia de escape, la secuencia de caracteres \n no se
muestran en pantalla, pero indican que el cursor debe pasar a una nueva
lnea.

Imprimir INGRESE EL LARGO DEL TERRENO EN METROS: ;

printf( "INGRESE EL LARGO DEL TERRENO EN METROS: " );

Leer largo;

scanf( "%d", &largo );

En este caso no se utiliza \n ya que esperamos que el ingreso se haga en la


misma lnea.
scanf(): es la funcin que lee ingresos desde teclado, recibe 2 argumentos:
1%d: es un cdigo de formato, indica que se va a leer el valor
ingresado por teclado como un nmero entero.
2&largo: es el nombre de la variable en la cual se guardar el
valor ledo por teclado, debe ir precedida por el smbolo &
(ampersand)

Imprimir "INGRESE EL ANCHO EN METROS: "


Leer ancho

printf( "INGRESE EL ANCHO DEL TERRENO EN METROS: " );


scanf( "%d", &ancho );
//Aqu se realizar el clculo

superficie <- ancho x largo

superficie = ancho*largo;

Imprimir "LA SUPERFICIE ES: superficie METROS CUADRADOS"

printf( "LA SUPERFICIE ES: %d METROS CUADRADOS\n\n", superficie);

system( "pause" );

Fin

Otra forma de hacer comentarios es utilizando //, pero este tipo de


comentarios solo es vlido hasta el final de la lnea en que se encuentra,
no puede abarcar varias lneas como /**/
Aqu se realiza el clculo y se asigna (guarda) en la valiable superficie
En este caso printf() recibe 2 argumentos:
1Una cadena con un caracter de formato y 2 secuencias de
escape, %d ser reemplazado por un valor entero cuando el
mensaje sea mostrado en pantalla.
2Nombre de la variable cuyo valor ser mostrado en la
posicin en donde se encuentra %d.
Enva el comando pause al sistema e imprime el mensaje Presione una
tecla para continuar . . ., lo utilizamos para poder ver la salida del
programa antes de que se cierre la ventana.
Fin de bloque de cdigo fuente.

10

Constantes: son valores fijos que el programa no puede alterar.


En el programa anterior son constantes las siguientes:

el valor cero asignado a las variables (constante entera)


los textos entre comillas dobles (constante de cadena)

Instruccin (o sentencia): son cada una de las rdenes que se llevan a cabo en el programa, en
C todas las instrucciones terminan con un ;
Bloque: agrupa sentencias que deben ser ejecutadas secuencialmente. Un bloque comienza
con { y termina con }.
Cdigos de formato
Se utilizan en las funciones de entrada y salida estndar de C.
Cdigo de formato
printf() escribe
scanf() - lee
%u
entero sin signo
no soportado
%d %i
nmero entero
dem
%f
nmero real (punto flotante)
dem
%c
un solo carcter
dem
%s
una secuencia de caracteres (cadena)
dem
%x
nmero hexadecimal
dem
%%
muestra el signo %
no soportado
Secuencias de escape
Se forman antecedindole una barra invertida (\) a un carcter. Se utilizan para posicionar el
cursor o para mostrar caracteres que no pueden ser mostrados literalmente debido a la
sintaxis propia de una cadena.
Secuencia de escape
Significado
\b
retrocede el cursor una posicin
\n
lleva el cursor al inicio de una nueva lnea por debajo de la actual
\r
retorna el cursor al principio de la lnea actual
\t
lleva el cursor a la prxima posicin del tabulador
\a
sonido de alerta (bip)
\
muestra el carcter de comilla doble
\
muestra el carcter de comilla simple
\\
muestra el carcter de barra invertida
Ejercicios: Realizar pseudocdigo y diagrama de flujo de un algoritmo que resuelvan los
siguientes problemas, luego codificar el programa en lenguaje C.
1. Calcule el valor de resistencia total de un circuito con 3 resistencias iguales conectadas
en serie.
2. Calcule el valor de resistencia total de un circuito con 3 resistencias distintas
conectadas en serie.
3. Calcule el valor de resistencia total de un circuito con 2 resistencias iguales conectadas
en paralelo.
11

4. Calcule el valor de resistencia total de un circuito con 3 resistencias distintas


conectadas en paralelo.
5. Calcule cuanto alambre se necesita para cercar un terreno cuyo ancho es 3 veces su
largo. Se desean colocar 4 alambres a 25 cm de separacin para lograr una cerca de 1
m.
Operadores (II)
Operadores relacionales: se utilizan para comparar valores
== (igual)
!= (distinto)
> (mayor)
>= (mayor o igual)
< (menor)
<= (menor o igual)
Una expresin que contenga operadores relacionales se resuelve en trminos de verdadero o
falso.
Ejemplo: supongamos una variable [p] a la cual se le ha asignado el valor 5 y una variable [q] a
la cual se le ha asignado el valor 10
p 5
q 10
p == q
Falso (0)
p != q Verdadero (1)
p>q
Falso (0)
p >= q
Falso (0)
p < q Verdadero (1)
p <= q Verdadero (1)

En C el valor Falso se representa con el valor entero 0 y el Verdadero con el valor 1.

12

2.1 - Estructura selectiva simple


Se utiliza para tomar decisiones en el programa, cuando el flujo del programa llega a una
estructura selectiva simple se puede derivar por otro camino, si es que se cumple la condicin
planteada en la misma (es verdadera).
Inicio

edad <- 0

ESTE PROGRAMA
DETERMINA SI USTED
ES MAYOR DE EDAD:

INGRESE SU EDAD:
S

edad
E

V
Edad >= 18
USTED ES MAYOR DE
EDAD:
S

Fin

13

Pseudocdigo

Cdigo fuente en lenguaje C

Explicacin

/*Programa realizado por


Nombre Alumno*/
#include <stdio.h>
#include <stdlib.h>

Inicio
edad <- 0

main()
{
int edad = 0;

Imprimir ESTE PROGRAMA DETERMINA SI USTED ES MAYOR DE EDAD

printf( "ESTE PROGRAMA DETERMINA SI USTED ES MAYOR DE EDAD\n\n" );

Imprimir "INGRESE SU EDAD: "


Leer edad

printf( "INGRESE SU EDAD: " );


scanf( "%d", &edad );

Si edad >= 18

if( edad >= 18 )


{
printf( "\nUSTED ES MAYOR DE EDAD\n\n" );
}

Imprimir USTED ES MAYOR DE EDAD


Fin si

Comienzo del bloque main()

Preguntamos si edad es mayor a 18 (condicin)


Comienzo del bloque if
Si la condicin es verdadera imprimimos este mensaje
Fin del bloque if

system( "pause" );
Fin

Fin del bloque main()

14

Ejercicios: Realizar pseudocdigo y diagrama de flujo de un algoritmo que resuelvan los


siguientes problemas, luego codificar el programa en lenguaje C.
1. Leer 2 nmeros y si son distintos sumarlos y dividirlos por 2 (calculo de promedio). (!=)
2. Leer 1 nmero, y si es negativo transformarlo en positivo. (<)
3. Leer la temperatura del agua, y si es mayor o igual a 100 C mostrar el mensaje
vapor. (>=)
4. Leer la temperatura del agua, y si es menor o igual a 0 C mostrar el mensaje hielo.
(<=)
5. Leer la velocidad de un auto y si es mayor a 110 km/m mostrar el mensaje ha
excedido el lmite de velocidad en ruta. (>)
6. En un partido de ftbol ingresar la cantidad de goles que hizo cada equipo, y si son
iguales mostrar el mensaje el partido termin empatado. (==)

15

2.2 - Estructura selectiva doble


En una estructura selectiva doble el flujo del programa se divide en 2, y se realizan acciones
tanto cuando se cumple la condicin (es verdadera) planteada como cuando no (es falsa).

Inicio

edadPapa <- 0
edadMama <- 0

INGRESE LA EDAD DE
SU PAPA:
S

edadPapa
E

INGRESE LA EDAD DE
SU MAMA:
S

edadMama
E

edadPapa > edadMama

"SU MAMA ES MAYOR


QUE SU PAPA"

"SU PAPA ES MAYOR


QUE SU MAMA"

Fin

16

Pseudocdigo

Cdigo fuente en lenguaje C

Explicacin

/*Programa realizado por


Nombre Alumno*/
#include <stdio.h>
#include <stdlib.h>

Inicio
edadPapa <- 0
edadMama <- 0

main()
{
int edadPapa = 0;
int edadMama = 0;

Comienzo del bloque main()

Imprimir "INGRESE LA EDAD DE SU PAPA: "


Leer edadPapa

printf( "INGRESE LA EDAD DE SU PAPA: " );


scanf( "%d", &edadPapa );

Imprimir "INGRESE LA EDAD DE SU MAMA: "


Leer edadMama

printf( "INGRESE LA EDAD DE SU MAMA: " );


scanf( "%d", &edadMama );

Si edadPapa > edadMama

if( edadPapa > edadMama )


{
printf( "\nSU PAPA ES MAYOR QUE SU MAMA\n\n" );
}

Preguntamos si edadPapa es mayor que edadMama (condicin)


Comienzo del bloque if
Si la condicin es verdadera imprimimos este mensaje
Fin del bloque if

else
{
printf( "\nSU MAMA ES MAYOR QUE SU PAPA\n\n" );
}

Comienzo del bloque else


Si la condicin es falsa imprimimos este otro mensaje
Fin del bloque else

Imprimir SU PAPA ES MAYOR QUE SU MAMA

Si no
Imprimir SU MAMA ES MAYOR QUE SU PAPA
Fin si

system( "pause" );
Fin

Fin del bloque main()

17

Ejercicios: Realizar pseudocdigo y diagrama de flujo de un algoritmo que resuelvan los


siguientes problemas, luego codificar el programa en lenguaje C.
1. Leer 2 nmeros y determinar cules el mayor;
2. Leer 2 contraseas numricas, y si son iguales mostrar el mensaje Bienvenido, si no
mostrar el mensaje Acceso denegado.
3. Sabiendo que un ao en la vida de los perros equivale a 7 en la vida de un humano,
leer la edad de su perro y la suya, determinar cul es mayor y mostrar el mensaje
correspondiente.
4. Leer el ao que un estudiante cursa en este colegio, y, de acuerdo a ello determinar si
se encuentra cursando el CB o el CE.
5. Leer 2 notas de una materia y obtener su promedio, si es mayor que 6 mostrar el
mensaje Aprob, caso contrario mostrar desaprob.
6. Leer un nmero que represente el gnero de una persona (utilizaremos 0 para mujer y
1 para hombre) e imprimir Buen da Sr. o Buen da Sra., segn corresponda.
Anidamiento
Anidar una estructura significa insertar una estructura dentro de otra.
Es sencillo visualizar una estructura dentro de otra en un diagrama de flujo, no as en el cdigo
fuente. Para ayudar a la visualizacin de estructuras anidadas en el cdigo fuente se utiliza el
sangrado (o indentacin), que consiste en aplicarle un TAB a cada nivel de anidamiento. La
mayora de los IDEs hace esto automticamente.
Ejemplo:
if( condicion1 )
{
if( condicion2 )
{
if( condicion3 )
{
Sentencia1
Sentencia2

SentenciaN
}
}
}

18

Estructuras selectivas simples anidadas


Ejemplo: algoritmo para solicitar carnet de conducir
Inicio

edad <- 0
choques <- n

HA CHOCADO
PERSONAS (s/n):
S

choques
E

choques == n

INGRESE SU EDAD:
S

edad
E

edad >= 18

DEBE RENDIR EL
EXAMEN Y PAGAR $
60,00

Fin

19

Pseudocdigo

Cdigo fuente en lenguaje C

Explicacin

/*Programa realizado por


Nombre Alumno*/
#include <stdio.h>
#include <stdlib.h>

Inicio
edad <- 0
choques <-0

main()
{
int edad = 0;
char choques = 'n' ;

Imprimir "PROGRAMA PARA OBTENER CARNET DE


CONDUCTOR"

Declaracin e inicializacin de una variable tipo caracter, el carcter (solo uno) que
ser asignado a la variable debe estar encerrado entre comillas simples.

printf( "PROGRAMA PARA OBTENER CARNET DE CONDUCTOR\n\n" );

Imprimir Ingrese su edad:


Leer edad

printf( "Ingrese su edad: " );


scanf( "%d", &edad );

Si edad >= 18

if( edad >= 18 )


{
printf( "Ha chocado personas (s/n): " );
scanf( "%c", &choques );

Imprimir "Ha chocado personas (s/n): "


Leer choques
Si choques = n

if( choques == 'n' )


{
printf( "\nDEBE RENDIR EL EXAMEN Y PAGAR $ 60,00\n" );
}

Imprimir "DEBE RENDIR EL EXAMEN Y PAGAR $ 60,00"


Fin si
Fin si

Fin

Comienzo del bloque main()

Comienzo del bloque if externo


%c le indica a scanf que se leer un carcter
Preguntamos si choques contiene n
Comienzo del bloque if interno

Fin del bloque if interno


Fin del bloque if externo

printf( "\n" );
system( "pause" );

printf( \n ) inserta un salto de lnea con el objetivo de hacer ms legible la interfaz


del programa.

}
Fin del bloque main()

20

Ejercicios:
1. Leer 2 nmeros y si son distintos determinar el mayor, sino mostrar el mensaje
Ambos nmeros son iguales.
2. Una pieza mecanizada en un torno debe tener un dimetro de 100 mm con una
tolerancia de +0,1. Leer el dimetro de la pieza terminada y determinar si pasa o no el
control dimensional.
3. Un cajero automtico solo permite retirar montos de dinero que son mltiplos de $10.
Leer un monto de dinero y comprobar que sea mayor a cero, luego si es mltiplo de
10, sin no lo es mostrar el mensaje solo se pueden retirar mltiplos de $ 10.
(operador %)
4. Leer la velocidad de un mvil y el tiempo durante el que se mueve, si ambos son
mayores a cero calcular a la distancia que se encuentra del punto de partida.

Estructuras selectivas dobles anidadas


Ejemplo: determinar el mayor de 3 nmeros.

21

Inicio

p <- 0
s <- 0
t <- 0

INGRESE EL PRIMER
NUMERO:

p
E

INGRESE EL
SEGUNDO NUMERO:

S
E

INGRESE EL TERCER
NUMERO:

t
E

F
F

EL MAYOR ES: t

s>t

EL MAYOR ES: s

p>s

p>t

EL MAYOR ES: p

EL MAYOR ES: t

Fin

22

Pseudocdigo

Cdigo fuente en lenguaje C


#include <stdio.h>
#include <stdlib.h>

Inicio
primero <- 0
segundo <- 0
tercero <- 0

main()
{
int primero = 0;
int segundo = 0;
int tercero = 0;

Imprimir "ESTE PROGRAMA DETERMINA EL MAYOR DE TRES NUMEROS"

printf( "ESTE PROGRAMA DETERMINA EL MAYOR DE TRES NUMEROS\n\n" );

Imprimir "INGRESE EL PRIMER NUMERO: "


Leer primero

printf( "INGRESE EL PRIMER NUMERO: " );


scanf( "%d", &primer );

Imprimir "INGRESE EL SEGUNDO NUMERO: "


Leer segundo

printf( "INGRESE EL SEGUNDO NUMERO: " );


scanf( "%d", &segundo );

Imprimir "INGRESE EL TERCER NUMERO: "


Leer tercero

printf( "INGRESE EL TERCER NUMERO: " );


scanf( "%d", &tercero );

Si primero > segundo

if( primero > segundo )


{
if( primero > tercero )
{
printf( "\nEL NUMERO MAYOR ES: %d\n", primero );
}
else
{
printf( "\nEL NUMERO MAYOR ES: %d\n", tercero );
}
}
else
{
if( segundo > tercero )
{
printf( "\nEL NUMERO MAYOR ES: %d\n", segundo );
}
else
{
printf( "\nEL NUMERO MAYOR ES: %d\n", tercero );
}
}
system( "pause" );

Si primero > tercero


Imprimir "EL NUMERO MAYOR ES: " primero
Si no
Imprimir "EL NUMERO MAYOR ES: " tercero
Fin si
Si no
Si segundo > tercero
Imprimir "EL NUMERO MAYOR ES: " segundo
Si no
Imprimir "EL NUMERO MAYOR ES: " tercero
Fin si
Fin si
Fin

23

Ejercicios: hacer pseudocdigo, diagrama de flujo y cdigo fuente de un programa que:


1. Determine el menor de 3 nmeros.
2. Lea la primera letra del gnero de una persona (m/f) y el ao en que cursa. La salida
del programa debe ser: Ud. es un varn/mujer que cursa el Ciclo Bsico/Ciclo
superior.
3. Lea un dividendo y un divisor, si este ltimo es igual a 0 mostrar el mensaje no se
puede dividir por cero, caso contrario realizar la divisin y mostrar su resultado.
4. Lea una hora entre 0 y 23 (formato 24hs.) y la transforme en formato am/pm (1 a 12
hs.)
Escalonador if-else-if
Considerar el siguiente programa:
Inicio
primero = 0
segundo = 0
operacin = 0
Imprimir "PROGRAMA QUE SIMULA UNA CALCULADORA SENCILLA"
Imprimir "INGRESE EL PRIMER NUMERO: "
Leer primero
Imprimir "INGRESE EL SEGUNDO NUMERO: "
Leer segundo
Imprimir
Imprimir
Imprimir
Imprimir
Imprimir

"INGRESE LA OPERACION QUE DESEA REALIZAR:"


"1 - SUMA"
"2 - RESTA"
"3 - PRODUCTO"
"4 - COCIENTE"

Imprimir "OPERACION: "


Leer operacin
Si operacin = 1
Imprimir "LA SUMA ES: " primero + segundo
Si no
Si operacin = 2
Imprimir "LA RESTA ES: " primero - segundo
Si no
Si operacin = 3
Imprimir "EL PRODUCTO ES: " primero x segundo
Si no
Si operacin = 4
Imprimir "EL COCIENTE ES: " primerosegundo
Si no
Imprimir "NUMERO DE OPERACIN INVLIDO, SOLO SE ACEPTAN NUMEROS ENTEROS DE 1 A 4"
Fin si
Fin si
Fin si
Fin si
Fin

24

#include <stdio.h>
#include <stdlib.h>
main()
{
float primero = 0.0, segundo = 0.0;
int operacion = 0;
printf( "PROGRAMA QUE SIMULA UNA CALCULADORA SENCILLA" );
printf( "\n\nINGRESE EL PRIMER NUMERO: " );
scanf( "%f", &primero );
printf( "\nINGRESE EL SEGUNDO NUMERO: " );
scanf( "%f", &segundo );
printf( "\nINGRESE LA OPERACION QUE DESEA REALIZAR:" );
printf( "\n1 - SUMA" );
printf( "\n2 - RESTA" );
printf( "\n3 - PRODUCTO" );
printf( "\n4 - COCIENTE" );
printf( "\n\nOPERACION: " );
scanf( "%d", &operacion );
printf( "\n" );
if( operacion == 1 )
{
printf( "LA SUMA ES: %f", primero + segundo );
}
else
{
if( operacion == 2 )
{
printf( "LA RESTA ES: %f", primero - segundo );
}
else
{
if( operacion == 3 )
{
printf( "EL PRODUCTO ES: %f", primero*segundo );
}
else
{
if( operacion == 4 )
{
printf( "EL COCIENTE ES: %f", primero/segundo );
}
else
{
printf( "NUMERO DE OPERACIN INVLIDO, SOLO SE ACEPTAN NUMEROS ENTEROS DE 1 A 4");
}
}
}
}
printf( "\n\n" );
system( "pause" );
}

25

Como se observa se trata de varias estructuras if anidadas, y cuantas ms de stas sean el


cdigo fuente se ir desplazando hacia la derecha y salindose de la pantalla, lo cual dificulta
su lectura y seguimiento. Para solucionar este inconveniente C incorpora el escalonador ifelse-if, el cual permite escribir el programa anterior como se muestra a continuacin:

#include <stdio.h>
#include <stdlib.h>
main()
{
float primero = 0.0, segundo = 0.0;
int operacion = 0;
printf( "PROGRAMA QUE SIMULA UNA CALCULADORA SENCILLA" );
printf( "\n\nINGRESE EL PRIMER NUMERO: " );
scanf( "%f", &primero );
printf( "\nINGRESE EL SEGUNDO NUMERO: " );
scanf( "%f", &segundo );
printf( "\nINGRESE LA OPERACION QUE DESEA REALIZAR:" );
printf( "\n1 - SUMA" );
printf( "\n2 - RESTA" );
printf( "\n3 - PRODUCTO" );
printf( "\n4 - COCIENTE" );
printf( "\n\nOPERACION: " );
scanf( "%d", &operacion );
printf( "\n" );
if( operacion == 1 )
{
printf( "LA SUMA ES: %f", primero + segundo );
}
else if( operacion == 2 )
{
printf( "LA RESTA ES: %f", primero - segundo );
}
else if( operacion == 3 )
{
printf( "EL PRODUCTO ES: %f", primero*segundo );
}
else if( operacion == 4 )
{
printf( "EL COCIENTE ES: %f", primero/segundo );
}
else
{
printf( "NUMERO DE OPERACIN INVLIDO, SOLO SE ACEPTAN NUMEROS ENTEROS DE 1 A 4");
}
printf( "\n\n" );
system( "pause" );
}

Con lo que se gana un poco de legibilidad cuando existen varios niveles de anidamiento.

26

2.3 - Estructura selectiva mltiple


Cuando slo se trata de comparar igualdades entre enteros o caracteres se puede utilizar la
estructura selectiva mltiple switch.
En una estructura selectiva mltiple el flujo del programa se divide en cuantas opciones sean
necesarias, y se realizan acciones (normalmente distintas) por cada una de ellas.
switch:

Compara un valor dado con una lista de valores (etiquetas) y en caso de encontrar
coincidencia ejecuta las sentencias asociadas a dicho valor, las mismas se ejecutan de
manera secuencial hasta que se encuentra la palabra reservada break, que saltea
todas las sentencias siguientes y enva el flujo del programa al final de la estructura.
(break rompe la estructura).
Sin no encuentra coincidencia ejecuta las sentencias asociadas a la etiqueta default:

No debe olvidarse la palabra reservada break al final de cada case, ya que si se omite se
seguirn ejecutando las sentencias del case siguiente. Por otra parte, no es necesario un break
en el ltimo grupo de sentencias, ya que no existen sentencias posteriores que saltear
(normalmente el ltimo grupo de sentencias corresponde a default : y por lo tanto no es
necesario un break al final de ellas).

27

Inicio

PROG. QUE SIMULA


CALCULADORA

INGRESE EL PRIMER
NUMERO:

primero
E

INGRESE EL
SEGUNDO NUMERO:

segundo
E

INGRESE OPERACION
A REALIZAR:

1 SUMA
2- RESTA
3 PRODUCTO
4 - COCIENTE

opcion
E

opcion
1

LA SUMA ES:
primero+segundo

Default

EL PRODUCTO ES:
primero*segundo

LA RESTA ES:
primero-segundo

CDIGO
NO VLIDO

EL COCIENTE ES:
primero/segundo

Inicio

28

#include <stdio.h>
#include <stdlib.h>

Inicio
primero = 0
segundo = 0
operacion = 0

main()
{
float primero = 0.0;
float segundo = 0.0;
int operacion = 0;

Imprimir "PROGRAMA QUE SIMULA UNA CALCULADORA SENCILLA"

printf( "PROGRAMA QUE SIMULA UNA CALCULADORA SENCILLA" );

Imprimir "INGRESE EL PRIMER NUMERO: "


Leer primero

printf( "\n\nINGRESE EL PRIMER NUMERO: " );


scanf( "%f", &primero );

Imprimir "INGRESE EL SEGUNDO NUMERO: "


Leer primero

printf( "\nINGRESE EL SEGUNDO NUMERO: " );


scanf( "%f", &segundo );

Imprimir "INGRESE LA OPERACION QUE DESEA REALIZAR:"


Imprimir "1 - SUMA"
Imprimir "2 -RESTA"
Imprimir "3 - PRODUCTO"
Imprimir "4 - COCIENTE"

printf( "\nINGRESE LA OPERACION QUE DESEA REALIZAR:" );


printf( "\n1 - SUMA" );
printf( "\n2 - RESTA" );
printf( "\n3 - PRODUCTO" );
printf( "\n4 - COCIENTE" );

Imprimir Operacin:
Leer operacin

printf( "\n\nOPERACION: " );


scanf( "%d", &operacion );
printf( "\n" );

Segn operacion hacer

switch( operacion )
{
case 1 : printf( "LA SUMA ES: %f", primero + segundo );
break;

operacion 1 : Imprimir LA SUMA ES primero + segundo

operacion 2: Imprimir LA RESTA ES primero segundo

case 2 : printf( "LA RESTA ES: %f", primero - segundo );


break;
case 3 : printf( "EL PRODUCTO ES: %f", primero*segundo );
break;
case 4 : printf( "EL COCIENTE ES: %f", primero/segundo );
break;
default: printf( "NUMERO DE OPERACIN INVLIDO (SOLO ENTEROS DE 1 A 4");

operacion 3 : Imprimir EL PRODUCTO ES primero*segundo


operacion 4 : Imprimir EL COCIENTE ES primero/segundo
Si ninguna ant : Imprimir "NUMERO DE OPERACIN INVLIDO (SOLO ENTEROS DE 1 A 4)"
Fin segn

Fin

}
printf( "\n\n" );
system( "pause" );

Si la variable operacion tiene el valor 1 se ejecutan las sentencias


comprendidas entre la etiqueta case 1: y el prximo break (aqu no existen
bloques).
Si la variable operacion tiene el valor 2 se ejecutan las sentencias
comprendidas entre la etiqueta case 2: y el prximo break.
Si la variable operacion tiene el valor 3 se ejecutan las sentencias
comprendidas entre la etiqueta case 3: y el prximo break.
Si la variable operacion tiene el valor 4 se ejecutan las sentencias
comprendidas entre la etiqueta case 4: y el prximo break.
Si la variable operacion contiene un valor que no coincide con ninguna
etiqueta se ejecutan las sentencias comprendidas entre la etiqueta default: y
la llave de cierre de la estructura switch. La ltima etiqueta no necesita break.

29

La estructura switch solo puede comparar igualdades entre valores enteros.


Sin embargo se puede utilizar switch se puede utilizar tambin para comparar la igualdad entre
caracteres simples, esto es posible ya que C internamente trata a los caracteres como valores
enteros entre -128 y 127 ( entre 0 y 255). Por ejemplo A es el nmero 65, B es el 66 y as
sucesivamente, entonces cuando se evala en la condicin del switch por el valor A en
realidad se est evaluando si existe dentro de la estructura switch alguna etiqueta con el valor
65.
He aqu un ejemplo de cmo utilizar la estructura switch para comparar igualdades entre
caracteres:

30

#include <stdio.h>
#include <stdlib.h>

Inicio
rumbo = \0

main()
{
char rumbo = '\0';

Imprimir "GPS: Usted esta conduciendo hacia el NORTE..."

printf( "GPS: Usted esta conduciendo hacia el NORTE..." );

Imprimir "GPS: Usted ha llegado a una cruce de rutas."

printf( "\n\nGPS: Usted ha llegado a una cruce de rutas." );

Imprimir "GPS: Que rumbo desea seguir ahora? [s|n|e|o]: "


Leer rumbo

printf( "\n\nGPS: Que rumbo desea seguir ahora? [s|n|e|o]: " );


scanf( "%c", &rumbo );

Imprimir "GPS: "

printf( "\nGPS: " );

Segn rumbo hacer

switch( rumbo )
{
case 'n': printf( "SIGA EN LA MISMA DIRECCION" ); break;
case 's': printf( "GIRE 180 GRADOS" ); break;
case 'e': printf( "GIRE A LA DERECHA" ); break;
case 'o': printf( "GIRE A LA IZQUIERDA" ); break;
default : printf( "INGRESO UN RUMBO NO VALIDO" );
}

rumbo 'n': Imprimir "SIGA EN LA MISMA DIRECCION"


rumbo 's': Imprimir "GIRE 180 GRADOS"
rumbo 'e': Imprimir "GIRE A LA DERECHA"
rumbo 'o': Imprimir "GIRE A LA IZQUIERDA"
Si ninguna ant.: Imprimir "INGRESO UN RUMBO NO VALIDO"
Fin segn

Aqu inicializamos la variable rumbo carcter nulo (\0)

Si se ingres n en la variable rumbo se ejecuta esta sentencia printf()


Si se ingres s en la variable rumbo se ejecuta esta sentencia printf()
Si se ingres e en la variable rumbo se ejecuta esta sentencia printf()
Si se ingres o en la variable rumbo se ejecuta esta sentencia printf()
Si se ingres cualquier otro caracter en la variable rumbo se ejecuta
esta sentencia printf()

printf( "\n" );
system( "pause" );
Fin

31

En el caso de que deban realizarse las mismas operaciones para varias etiquetas se pueden colocar una a continuacin de la otra, como se muestra en el
siguiente programa.
#include <stdio.h>
#include <stdlib.h>
main()
{
char rumbo = '\0';
printf( "GPS: Usted esta conduciendo hacia el NORTE..." );
printf( "\n\nGPS: Usted ha llegado a una cruce de rutas." );
printf( "\n\nGPS: Que rumbo desea seguir ahora? [s|n|e|o]: " );
scanf( "%c", &rumbo );
printf( "\nGPS: " );
switch( rumbo )
{
case 'n': case 'N': printf( "SIGA EN LA MISMA DIRECCION" ); break;
case 's': case 'S': printf( "GIRE 180 GRADOS" ); break;
case 'e': case 'E': printf( "GIRE A LA DERECHA" ); break;
case 'o': case 'O': printf( "GIRE A LA IZQUIERDA" ); break;
default : printf( "INGRESO UN RUMBO NO VALIDO" );
}

Ya sea que se ingrese n N se ejecutarn las mismas sentencias


Ya sea que se ingrese s S se ejecutarn las mismas sentencias
Ya sea que se ingrese e E se ejecutarn las mismas sentencias
Ya sea que se ingrese o u O se ejecutarn las mismas sentencias

printf( "\n" );
system( "pause" );
}

32

Tanto los distintos case como as tambin default son etiquetas.


Una etiqueta es una marca hacia donde puede ser redirigido el flujo del programa. Una etiqueta se forma con una palabra seguida de :. Los nombres de las etiquetas tienen
las mismas restricciones que los identificadores de las variables.
Para redirigir el flujo de un programa hacia una etiqueta se debe utilizar la palabra goto seguida del nombre de la etiqueta. En el siguiente programa se muestra como
utilizar goto y una etiqueta para volver a solicitar un ingreso cuando ste fue errneo.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
main()
{
char rumbo = 'n';
printf( "GPS: Usted esta conduciendo hacia el NORTE" );
printf( "\n\nGPS: Usted ha llegado a una cruce de rutas." );
re_ingreso :
printf( "\n\nGPS: Que rumbo desea seguir ahora? [s|n|e|o]: " );
rumbo = getche();
system( "cls" );

Aqu se define la etiqueta re_ingreso

getche() es una funcin que se encuentra en conio.h y devuelve un carcter ledo desde el teclado, este
carcter es asignado a la variable rumbo en esta sentencia.
Enva el comando cls (clear screnn) al S.O., que limpia la pantalla.

printf( "GPS: " );


switch( tolower( rumbo ) )
{
case 'n': printf( "\aSIGA EN LA MISMA DIRECCION" ); break;
case 's': printf( "\aGIRE 180 GRADOS" ); break;
case 'e': printf( "\aGIRE A LA DERECHA" ); break;
case 'o': printf( "\aGIRE A LA IZQUIERDA" ); break;
default : printf( "\aINGRESO UN RUMBO NO VALIDO" ); goto re_ingreso;
}

tolower se encuentra en ctype.h y devuelve el valor de su argumento en minsculas (en este caso el
contenido de la variable rumbo), por lo tanto no es necesario comprobar si se ingres n o N, p. ej.

goto reenva el flujo del programa hacia donde se encuentra la etiqueta re_ingreso

printf( "\n" );
system( "pause" );
}

33

Ejercicios:
Leer el ao que cursa un alumno del C.B. (1 a 3) y mostrar los talleres que le corresponden
cursar.
Leer un entero que represente el mes de un ao y mostrar el nombre del mes ingresado.
Leer un entero que represente el mes de un ao y mostrar el trimestre al que pertenece.
Leer el nmero de piso desde el cual se llama a un ascensor y mostrar el mensaje el
ascensor se est dirigiendo hacia el piso.
No es comn encontrar estructuras switch anidadas, pero es perfectamente posible hacerlo.
Si bien hay situaciones que hacen necesario el uso de goto, cuando se trata de repetir instrucciones
se utilizan algunas de las estructuras que C posee para dichos fines.
3.1- Nmero de repeticiones desconocido
En ciertas circunstancias necesitamos repetir un grupo de sentencias una cantidad indefinida de
veces, para ello cuenta con dos estructuras de repeticin:
3.1.1 - Estructura while (mientras)
Esta estructura repite un bloque de instrucciones mientras la condicin planteada sea verdadera.
while funciona de la siguiente manera:
1. Controla la condicin lgica que se encuentra entre parntesis.
2.
Si la condicin es verdadera ejecuta las instrucciones que se encuentran dentro del
bloque y vuelve al paso 1.
Si la condicin es falsa salta a la instruccin que se encuentra inmediatamente
despus de la llave de cierre del bloque y el flujo del programa sigue su camino.
Dentro de las instrucciones del bloque tendremos que asegurarnos que exista alguna sentencia que
haga que en algn momento la condicin lgica del bucle sea falsa, para poder salir del loop, de lo
contrario el flujo del programa quedar ciclando en el bucle y el programa no llegar nunca a su fin
(se crea un bucle infinito).

34

Inicio

ancho <- 0.0


alto <- n
opcin <- \0

DESEA CALCULAR
UNA SUPERFICIE?
(S/N):

opcion
E

opcion == s

V
INGRESE ANCHO:
S

ancho
E

INGRESE ALTO:
S

alto
E

LA SUPERFICIE ES:
alto x ancho
E

Fin

35

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>

Inicio
ancho <- 0
alto <-0
opcin <- \0

main()
{
float ancho = 0.0;
float alto = 0.0;
char opcion = '\0';

Imprimir "DESEA CALCULAR UNA SUPERFICIE (S/N): "


Leer opcin

printf( "DESEA CALCULAR UNA SUPERFICIE (S/N): " );


opcion = getche();
printf( "\n" );

Mientras Maysculas( opcin ) = S


Limpiar pantalla

while( toupper( opcion ) == 'S'){


system( "cls" );

Imprimir Ingrese ancho:


Leer ancho

printf( "Ingrese ancho: " );


scanf( "%f", &ancho );

Imprimir Ingrese alto:


Leer alto

printf( "Ingrese alto: " );


scanf( "%f", &alto );

Imprimir LA SUPERFICIE CALCULADA ES: ancho x alto

printf( "\nLA SUPERFICIE CALCULADA ES: %0.2f", ancho*alto );

Imprimir DESEA CALCULAR OTRA SUPERFICIE? (S/N):


Leer opcin
Fin mientras
Fin

printf( "\n\nDESEA CALCULAR OTRA SUPERFICIE (S/N): " );


opcion = getche();
}

toupper() se encuentra en ctype.h y devuelve el valor de su argumento en maysculas


(en este caso el contenido de la variable opcion), por lo tanto esta condicin ser
verdadera tanto si se ingresa s o S.

Dentro del bloque de while se debe leer o modificar el valor de la variable evaluada en
la condicin, para que se pueda salir del bucle en algn momento y terminar el
programa.

36

Contador
Se trata de una variable cuyo valor inicial se ir incrementando (o decrementando) en una cantidad
fija durante el transcurso del programa. Se utiliza para contar cuantas veces sucede algo en un
programa. Ejemplo: contador de vueltas en una carrera de autos.
Asignacines
contador = 0;
contador = contador + 1;
contador = contador + 1;
contador = contador + 1;
contador = contador -1;

Valor de contador
valor indetermiando <- 0
1 <- (0 + 1)
2 <- (1 + 1)
3 <- (2 + 1)
2 <- (3 1)

Acumulador
Se trata de una variable cuyo valor inicial se ir incrementando (o decrementando) en una cantidad
variable durante el transcurso del programa. El nuevo valor a acumular se suma (o resta) al valor
anterior y este es el valor que ser almacenado en el acumulador. Ejemplo: cantidad de dinero en
una cuenta de banco.
Asignacines
acumulador = 0;
acumulador = acumulador + 125;
acumulador = acumulador + 30;
acumulador = acumulador 2;

valor de acumulador
Valor indeterminado <- 0
125 <- (0 + 125)
155 <- (125 + 30)
153 <- (125 - 2)

Ejemplo: si pensamos en un programa que tenga la capacidad de calcular el promedio de un nmero


indefinido de valores tendremos que utilizar un acumulador para ir sumando los diferentes valores y
un contador para saber por cuanto hay que dividir el total de la suma.

37

S-ar putea să vă placă și