Documente Academic
Documente Profesional
Documente Cultură
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)
Ancho: 12 m
Largo: 30 m
Proceso:
Salida:
=
=
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
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
2
73
1
2
36
0
2
18
0
2
9
1
2
4
0
2
2
0
2
1
1
2
0
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
16
234
10
16
14
14
16
0
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
Alto
Ancho
Profundidad
Nombre Correcto
cuartoAnio
Electrnica
cicloSuperior
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
"LA SUPERFICIE
ES: superficie
METROS
CUADRADOS"
Fin
Pseudocdigo
Inicio
ancho <- 0
largo <- 0
superficie <- 0
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;
Leer largo;
superficie = ancho*largo;
system( "pause" );
Fin
10
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
12
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
Explicacin
Inicio
edad <- 0
main()
{
int edad = 0;
Si edad >= 18
system( "pause" );
Fin
14
15
Inicio
edadPapa <- 0
edadMama <- 0
INGRESE LA EDAD DE
SU PAPA:
S
edadPapa
E
INGRESE LA EDAD DE
SU MAMA:
S
edadMama
E
Fin
16
Pseudocdigo
Explicacin
Inicio
edadPapa <- 0
edadMama <- 0
main()
{
int edadPapa = 0;
int edadMama = 0;
else
{
printf( "\nSU MAMA ES MAYOR QUE SU PAPA\n\n" );
}
Si no
Imprimir SU MAMA ES MAYOR QUE SU PAPA
Fin si
system( "pause" );
Fin
17
SentenciaN
}
}
}
18
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
Explicacin
Inicio
edad <- 0
choques <-0
main()
{
int edad = 0;
char choques = 'n' ;
Declaracin e inicializacin de una variable tipo caracter, el carcter (solo uno) que
ser asignado a la variable debe estar encerrado entre comillas simples.
Si edad >= 18
Fin
printf( "\n" );
system( "pause" );
}
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.
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
Inicio
primero <- 0
segundo <- 0
tercero <- 0
main()
{
int primero = 0;
int segundo = 0;
int tercero = 0;
23
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
#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
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
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 Operacin:
Leer operacin
switch( operacion )
{
case 1 : printf( "LA SUMA ES: %f", primero + segundo );
break;
Fin
}
printf( "\n\n" );
system( "pause" );
29
30
#include <stdio.h>
#include <stdlib.h>
Inicio
rumbo = \0
main()
{
char rumbo = '\0';
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" );
}
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" );
}
printf( "\n" );
system( "pause" );
}
32
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.
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
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';
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)
37