0% encontró este documento útil (0 votos)
4K vistas89 páginas

Program A

El documento presenta la información de una asignatura de Programación I en Lenguaje C. Incluye la siguiente información en 7 secciones: 1) datos de la asignatura, 2) ubicación en el plan de estudios, 3) objetivo general, 4) aprendizajes requeridos, 5) sugerencias de evaluación, 6) temario organizado en 5 unidades y 7) bibliografía básica y complementaria.

Cargado por

lapssss
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como RTF, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
4K vistas89 páginas

Program A

El documento presenta la información de una asignatura de Programación I en Lenguaje C. Incluye la siguiente información en 7 secciones: 1) datos de la asignatura, 2) ubicación en el plan de estudios, 3) objetivo general, 4) aprendizajes requeridos, 5) sugerencias de evaluación, 6) temario organizado en 5 unidades y 7) bibliografía básica y complementaria.

Cargado por

lapssss
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como RTF, PDF, TXT o lee en línea desde Scribd

#$K

MENU PRINCIPAL
DATOS DE LA ASIGNATURA
UBICACION DE LA ASIGNATURA
OBJETIVO GENERAL DEL CURSO
TEMARIO
APRENDIZAJES REQUERIDOS
SUGERENCIAS DE EVALUACION
BIBLIOGRAFIA BASICA Y COMPLEMENTARIA
RUTINAS DE Impresión

Prof.MC. Jose Francisco Carpio Tovilla

#MENU
$MENU
KMENU
DATOS DE LA ASIGNATURA
#$K

Nombre de la asignatura: Programación I (Lenguaje C)

Carrera: Licenciatura en Informática

Clave de la asignatura: IFB-9303

Horas teoría - Horas práctica - Créditos: 4-0-8

Menú principal

#DAT
$DAT
KDAT
UBICACION DE LA ASIGNATURA
#$K

a) RELACION CON OTRAS ASIGNATURAS DEL PLAN DE ESTUDIO

ANTERIORES

ASIGNATURAS TEMAS

Diseño estructurado de algoritmos Todos


Matemáticas Básicas para computación Todos

POSTERIORES

Estructura de datos I Todos

_______________________________________________________________________________

b) APORTACION DE LA ASIGNATURA AL PERFIL DEL EGRESADO

Proporcionar los conocimientos básicos par que el futuro egresado pueda analizar,
diseñar e implementar sistemas de información con propósitos particulares y general.

Menú principal

#UBICACION
$UBICACION
KUBICACION
OBJETIVO GENERAL DEL CURSO
#$K

El alumno desarrollará programas en un lenguaje estructurado de propósito general,


que sirva como base para cursos posteriores donde se desarrollen sistemas de
computación.

Menú principal

#OBJETIVO
$OBJETIVO
KOBJETIVO
APRENDIZAJES REQUERIDOS
#$K

Que tenga capacidad de abstracción para concretar un problema y realizar su


planteamiento en forma algoritmica.

Que pueda desarrollar algoritmos para la solución de problemas y transportarlos a la


estructura del Lenguaje.

Menú principal

#APRENDI
$APRENDI
KAPRENDI
#$k
SUGERENCIAS DE EVALUACION

1. Asistencia en el aula
2. Examen 1, Unidad 1 y Unidad 2 (Escrito y/o Oral)
3. Tarea1, Unidad 2 y Unidad 3
4. Tarea2, Unidad 4
5. Examen 2, Unidad 3 (Escrito y/o Oral)
6. Examen 3, Unidad 4 (Escrito)
7. Proyecto Final, Todas las unidades (1…5)

Nota: La calificación final se obtiene sumando las 7 calificaciones obtenidas en cada


una de las evaluaciones dividida entre 7. Por ejemplo:

Alumno: Juan Gabriel Anoa


1. 70
2. 80
3. 90
4. 100
5. 75
6. 86
7. 100

sumatoria = 601/7 = 85.86 = 86


Las calificaciones de los exámenes menores a 70 no se consideran para el promedio,
para estos casos se repiten los exámenes de acuerdo al reglamento de evaluación
(regularización o extraordinario). Para las tareas y proyecto final la calificación que
obtenga el alumno se acumula a la sumatoria.

NOTA IMPORTANTE:>>> Los examenes extraordinarios 1,2 y 3, cada


uno de ellos se aplicaran en fechas indicadas en el laboratorio de
computo, y sera computadora por alumno.

Menú principal

#sugeren
$sugeren
ksugeren
#$k
TEMARIO DE PROGRAMACION I
UNIDADES

1. FUNDAMENTOS DE LENGUAJE
2. INSTRUCCIONES FUNDAMENTALES
3. ESTRUCTURAS DE CONTROL
4. MODULOS
5. ARCHIVOS
Menú principal

#temario
$temario
ktemario
UNIDAD1 FUNDAMENTOS DEL LENGUAJE
#

1.1 INTRODUCCION AL LENGUAJE


1.2 TIPOS DE DATOS
1.3 MODIFICADORES DE TIPO
1.4 OPERADORES DE ASIGNACION
1.5 OPERADORES ARITMETICOS
1.6 CONVERSION DE TIPOS
1.7 ESTRUCTURA DE UN PROGRAMA
TEMARIO Menú principal

#fundamentos
#$k
TEMA

1.1 INTRODUCCIÓN AL LENGUAJE


• AUTOR DENNIS RITCHE - 70 s.
• TIPO ESTRUCTURADO
• TODAS LAS INSTRUCCINES SE ESCRIBEN EN MINÚSCULAS

USO GENERAL

• DISEÑO DE SISTEMAS OPERATIVOS


• PROGRAMACIÓN DE MODEMS
• INTERPRETE DE COMUNICACIONES
• HERRAMIENTAS DE DESARROLLO DE SOFTWARE
• C PORQUE ES DESPUÉS DE B
• USA ÚNICAMENTE FUNCIONES
• NIVEL : INTERMEDIO.
• ENSAMBLADOR
• COMPILADORES
• EDITORES DE TEXTO
• BASE DE DATOS

VENTAJAS

• FACILIDAD DE APRENDER POCAS INSTRUCCIONES 32 PALABRAS CLAVES.


• NO IMPONE RESTRICCIONES PARA EL MANEJO DE MEMORIA Y TIPO DE VARIABLES: BITS,
BYTES Y DIRECCIONES.
• ES MUY EFICIENTE EL CÓDIGO GENERADO EL PROGRAMA COMPILADO SE EJECUTA TAN
RÁPIDAMENTE COMO EL LENGUAJE ENSAMBLADOR
• GRANDES PROGRAMAS EN FORMA MODULAR.
• PORTABILIDAD.
• SE HAN DESARROLLADO GRAN CANTIDAD DE HERRAMIENTAS PARA FACILITAR LA
PROGRAMACIÓN EN ESTE LENGUAJE:
* SCANNER ( YACC Y LEX GENERAN CÓDIGO EN C )
* MANEJADORES DE INTERFACE DE USUARIO ( PFORCE Y CSCAPE )
* MANEJADORES DE ARCHIVOS ( BTREE, CTREE Y DTREE )
* LIBRERÍAS GRÁFICAS

DESVENTAJAS

• NO CONTIENE OPERACIONES PARA TRABAJOS DIRECTAMENTE CON OBJETOS


COMPUESTOS: CADENAS DE CARACTERES, CONJUNTOS, LISTA, ARREGLOS O VECTORES.
• NO TIENE FACILIDADES DE ENTRADA Y SALIDA PARA ACCESO DE ARCHIVOS.
• NO OFRECE FACILIDAD DE MULTIPROGRAMACIÓN NI PARALELISMO.

TEMARIO

# lenguaje
$lenguaje
klenguaje
TEMA
#$k

# date
$date
kdate
1.2 TIPO DE DATOS
MANEJO DE DATOS
TIPO DE DATOS BASICOS:
TIPO No. BYTES RANGO
char 1 Cualquier carácter ASCII
int 2 -32768 a +32767
float 4 3.4E-38 a 3.4E+38
double 8 1.7E-308 a 1.7E+308
void sin valor.

TEMARIO
#
TEMA

1.3 MODIFICADORES DE TIPO


SE USA UN MODIFICADOR PARA ALTERAR EL TIPO BASE CON EL FIN DE UTILIZAR EL TIPO
MAS ADECUADO A UNA APLICACIÓN DETERMINADA.

unsigned sin signo


signed con signo
short corto
long largo

TIPO RANGO
unsigned char 0...255
unsigned char - 128 a 127
unsigned int 0...65535
long int - 2147483648 a 2147483647
unsigned long int 0...4294967295

REGLAS DE LOS IDENTIFICADORES

• EL PRIMER CARÁCTER DEBE SER DE LA A … Z o a … z o SUBRAYADO _


• NO SE PERMITE ESPACIOS EN BLANCO
• QUE NO SEAN PALABRAS RESERVADAS
• COMO MÁXIMO 32 CARACTERES
• COMO SE DEFINE SE UTILIZA

FORMATO GENERAL PARA DEFINIR VARIABLES


tipo nombre_identificador1, nombre_identificador2... , nombre_identificadorN;

EJEMPLOS:

char CARACTER , PAUSA;


int N, suma;
float F;
unsigned char T, B;

PARA DEFINIR UNA CADENA O STRING:


char CADENA [5] ;

PARA DEFINIR UNA VARIABLE TIPO BOOLEANO: 0 REPRESENTA FALSO Y CUALQUIER


VALOR DIFERENTE DE 0 ES VERDADERO (1, a, $, MEXICO).

EJEMPLO : unsigned char BANDERA;

TEMARIO

# modificadores
#
TEMA

1.4 OPERADOR DE ASIGNACIÓN.

OPERADOR DE ASIGNACIÓN PARA TIPO NUMÉRICO Y CARÁCTER


NOMBRE_VAR = EXPRESIÓN;

char CAR; int N; unsigned char CSS; float F;


CAR=‘K’; N=30440; CSS=200; PI= 3.1416

INICIALIZACIÓN DE VARIABLES
unsigned char M=50; char CAR=‘*’ ; float PI=3.1416 ; int E=90 ;

LAS VARIABLES GLOBALES TOMAN UN VALOR NULO Y LAS LOCALES UN VALOR


DESCONOCIDO O BASURA.

TEMARIO

# asignacion
#
TEMA

1.5 OPERADORES ARITMÉTICOS


* MULTIPLICACIÓN.
/ COCIENTE DE UNA DIVISIÓN ENTERA O REAL
% RESIDUO DE UNA DIVISIÓN ENTERA.
+ SUMA.
- RESTA.
++ INCREMENTO DE UNO.
-- DECREMENTO DE UNO.

EJEMPLOS:
int N; float R;
N= 5/2; R = 5/2;
IMPRIMIR Nà 2 IMPRIMIR R à 2.5
IMPRIMIR 10/3à 3 R = 10/3
IMPRIMIR 27/4 à 6 IMPRIMIR R à 3.333.5
IMPRIMIR 0/4 à 0 IMPRIMIR R = 1/2à 0.5
IMPRIMIR 7/0 à ERROR IMPRIMIR 1/2 à 0

EL OPERADOR ++ AÑADE UNO A SU OPERANDO ( INCREMENTO) Y -- LE RESTA UNO


(DECREMENTO).

X = X + 1 ; ES LO MISMO QUE ++X;


X = X - 1 ; ES LO MISMO QUE --X;

LOS OPERADORES DE INCREMENTO O DECREMENTO PUEDEN PRECEDER O SEGUIR AL


OPERANDO X = X + 1; PUEDE ESCRIBIRSE COMO X++ o ++X.

int N=10;
++N;
IMPRIMIR N à 11
N++;
IMPRIMIR N à 12
--N ;
IMPRIMIR N à 11
N--;
IMPRIMIR N à 10

TEMARIO

# aritmeticos
#
TEMA

1.6 CONVERSIÓN DE TIPOS


EN TURBO C, SI SE MEZCLAN VARIABLES Y CONSTANTES DE DIFERENTES TIPOS EN UNA
EXPRESIÓN, C LOS CONVIERTE EN EL MISMO TIPO, CONVIRTIENDO TODOS LOS OPERANDOS
A TIPOS DE OPERANDOS MAS GRANDE (en bytes) Y ESTA TÉCNICA SE RECONOCE CON EL
NOMBRE DE CAST.

FORMATO: (tipo) EXPRESIÓN;

int A=5; B=2;


imprimir (float) A/Bà 2.5
imprimir (int) (2.5 + 4) à 6
imprimir (int) A/B; à 2

TEMARIO

# conversion
#
TEMA

1.7 ESTRUCTURA DE UN PROGRAMA


#include < stdio.h >
/*DEFINICION DE VARIABLES GLOBALES*/

main ( )
{ /*INICIO PROGRAMA*/
/*DEFINICION DE VARIABLES LOCALES*/
/*LLAMADO DE FUNCIONES Y PROCEDIMIENTOS*/
} /* FIN DE PROGRAMA*/
/* DEFINICION DE FUNCIONES Y/O PROCEDIMIENTOS*/

EJEMPLO:

#include <stdio.h>
main ()
{
printf (“hola”);
getch ( ) ;
}

TEMARIO

#estructura
#
UNIDAD 2 INSTRUCCIONES FUNDAMENTALES
2.1 INSTRUCCIONES DE ENTRADA Y SALIDA
2.2 FUNCIONES TIPO CADENA
TEMARIO
Menú principal

# instrucciones
#$k
TEMA
2.1 INSTRUCCIONES DE ENTRADA Y SALIDA
INSTRUCCIONES DE ENTRADA
VARIABLE =getchar ();
ESTA FUNCIÓN SIRVE PARA LEER UN CARÁCTER DESDE EL TECLADO.

VARIABLE = getch ();


ESTA SIRVE PARA LEER UN CARÁCTER DESDE EL TECLADO, EL CARÁCTER QUE SE LEE NO
SE VE EN LA PANTALLA Y NO SE NECESITA OPRIMIR LA TECLA ENTER PARA CONTINUAR.

gets (CADENA);
ESTA SIRVE PARA LEER UNA CADENA DE CARACTERES Y EL FIN DE LA CADENA SERÁ
HASTA QUE SE OPRIMA LA TECLA ENTER O CUANDO SE HAYAN LEIDO 255 CARACTERES.

scanf (“%codigo1, %codigo2, … , %codigoN”,var1,var2...varN);


SIRVE PARA LEER TODO TIPO DE DATOS DESDE EL TECLADO. PARA CADA TIPO DE DATOS
EXISTE UN CÓDIGO. PARA LOS CÓDIGOS CARACTER, ENTERO, DECIMAL, Y FLOTANTE ES
NECESARIO ENVIAR LA DIRECCIÓN DE LAS VARIABLES (&).

TABLA DE CÓDIGOS PARA EL scanf


CÓDIGO SIGNIFICADO
%c LEER UN CARACTER
%s LEER UNA CADENA DE CARACTERES
%d LEER UN ENTERO DECIMAL
%f LEER UN FLOTANTE

INSTRUCCIONES DE SALIDA
putchar(car);
ESTA FUNCIÓN SIRVE PARA IMPRIMIR UN CARÁCTER EN LA PANTALLA.

puts(cadena);
ESTA FUNCIÓN SIRVE PARA IMPRIMIR UNA CADENA EN LA PANTALLA.

printf (“comentario %codigo1, ...,codigoN”,var1,...,varN);


SE USA printf PARA ESCRIBIR DATOS EN LA PANTALLA PUEDE FUNCIONAR SOBRE
CUALQUIER TIPO DE DATOS PREDEFINIDOS QUE INCLUYEN CARACTERES, CADENAS Y
NÚMEROS. DEBE HABER EL MISMO NUMERO DE ARGUMENTOS QUE DE ORDENES DE
FORMATO Y LOS ARGUMENTO DEBEN ENCAJAR EN ORDEN.

TABLA DE CÓDIGOS DE printf


CÓDIGO SIGNIFICADO
%c IMPRIME UN CARACTER
%s IMPRIME UNA CADENA
%f IMPRIME UN NUMERO FLOTANTE
%d IMPRIME UN ENTERO
%x IMPRIME UN HEXADECIMAL
%o IMPRIME UN OCTAL
TEMARIO
# instio
$instio
kinstio
#$k
TEMA
2.2 FUNCIONES TIPO CADENA
strcpy (DESTINO,FUENTE);
ESTA SIRVE PARA ASIGNAR UN VALOR A UNA VARIABLE DE TIPO CADENA.

strcat (CADENA1,CADENA2);
SIRVE PARA CONCATENAR DOS CADENAS EL RESULTADO FINAL LO ASIGNA A CADENA 1.

strcmp(CADENA1,CADENA2);
SIRVE PARA COMPARAR DOS CADENAS. ESTA REGRESA UN RESULTADO NUMÉRICO DE
ACUERDO A LO SIGUIENTE:
VALOR
SI LA CADENA1 ES IGUAL A LA CADENA2 0
SI LA CADENA1 ES MAYOR QUE LA CADENA2 POSITIVO
SI LA CADENA1 ES MENOR QUE LA CEDANA2 NEGATIVO

strlen(CADENA);
REGRESA EL NUMERO DE CARACTERES DE UNA CADENA.

TEMARIO

#cadena
$cadena
kcadena
#$k
UNIDAD 3 ESTRUCTURAS DE CONTROL

3.1 OPERADORES RELACIONALES


3.2 OPERADORES LOGICOS
3.3 ESTRUCTURAS DE DESICION>>>ejercicios
3.4 ESTRUCTURAS REPETITIVAS>>>ejercicios
3.5 ARREGLOS UNIDIMENSIONALES>>>ejercicios
3.6 ARREGLOS BIDIMENSIONALES>>>ejercicios
3.7 ESTRUCTURAS
3.8 ARREGLOS DE ESTRUCTURAS

TEMARIO

# control
$control
kcontrol
#
TEMA
3.1 OPERADORES RELACIÓNALES
LAS EXPRESIONES QUE UTILIZAN LOS OPERADORES RELACIÓNALES DEVUELVEN UN
VALOR DE 1 EN CASO DE CIERTO Y 0 EN CASO DE FALSO.

OPERADOR ACCION
< MENOR QUE
<= MENOR O IGUAL QUE
> MAYOR QUE
>= MAYOR O IGUAL QUE
== IGUAL A
!= DIFERENTE A
TEMARIO

# relacionales
#$k
TEMA
3.2 OPERADORES LOGICOS:
LAS EXPRESIONES LOGICAS DEVUELVEN EL VALOR DE 1 EN CASO DE VERDADERO Y 0 EN
CASO DE FALSO.

OPERADOR ACCION
&& Y
|| O
! NEGACION

TEMARIO

# logicos
$logicos
klogicos
#$k
TEMA
3.3 ESTRUCTURAS DE DECISIÓN
Todos los programas presentados hasta ahora son relativamente simples. El cuerpo principal ha consistido en
una sucesión de enunciados, que deberán ser ejecutados por la computadora en el orden dado.

La computadora tiene la capacidad de tomar decisiones – es decir, de hacer pruebas para escoger el curso
adecuado de acción según el resultado de esas pruebas. A esta capacidad se le llama selección. Supóngase por
ejemplo, que las pelotas de béisbol tienen un precio unitario de $6.50 (pesos) cuando se compra al menos
diez, y de $7.00 si se compran menos de diez. Para calcular el costo de una compra, la computadora debe
examinar si se están comprando al menos diez pelotas, para escoger la formula adecuada. La computadora
efectúa estas selecciones evaluado expresiones booleanas – esto es, expresiones que tienen valores de true
(verdadero) o false (falso) -.

SELECCIÓN SIMPLE (if)

La selección simple se usa cuando se quiere que la computadora efectúe una acción condicionalmente – es
decir, sólo cuando cierta condición es verdadera -.

FORMATO GENERAL PARA LA ESTRUCTURA DE DECISION SIMPLE:


if(CONDICION) if(CONDICION)
SENTENCIA; {
Sentencia 1;
Sentencia 2;
:
.
Sentencia N;
}
Si la condición es verdadera, la computadora ejecuta el enunciado de acción y continua después con el
siguiente en el programa. Si la condición es falsa, la computadora continúa directamente con la siguiente
instrucción del programa. Por ejemplo, se permiten los siguientes enunciados:

if (edad >= 18) printf("puede entrar");


if (a+b >= c) contador = contador + 1;
Ejemplo:
LEER UN NUMERO E IMPRIMIR EL VALOR ABSOLUTO DE ESTE NUMERO .
#include <stdio .h>
main ()
{
float NUM;
clrscr ( ) ;
printf (“DAR NUMERO : “ ) ;
scanf (“%f”,&NUM);
if(NUM<0 )
NUM = NUM * (-1);
printf (“EL VALOR ABSOLUTO = % f \n”, NUM);
getch ( ) ;
}

SELECCIÓN ENTRE DOS ALTERNATIVAS

# desicion
$desicion
kdesicion
FORMATO GENERAL PARA LA ESTRUCTURA DE DECISION COMPUESTA:
if(CONDICION) if(CONDICION)
sentencia 1; {
else Sentencia 1;
sentencia 2; Sentencia 2;
:
.
Sentencia N;
}
else
{
Otras Sentencias;
:
.
}

En la selección simple la computadora hace algo o no hace nada, dependiendo del resultado de la prueba. En
la selección doble, la computadora efectúa una prueba y después realiza algo en cualquier caso. Si la
condición es verdadera, la computadora ejecuta la sentencia 1. Si es falsa, la computadora ejecuta la
alternativa else.

PREGUNTA: Cuando se ejecuta el fragmento

if (calif >= 70)


printf("aprobado");
else
printf ("reprobado");

¿qué se imprime para cada valor dado de calif?

(a) calif = 58 (b) calif = 74

PREGUNTA: Supóngase que el precio unitario de las pelotas de béisbol es de $ 6.50 (pesos) si se compran
diez o más, y de $ 7.00 en caso contrario. Complétese la prueba correspondiente if–else del siguiente
fragmento de programa.

printf ("escriba el numero comprado: ");


scanf ("%d",&numero);
if (_______)
costo= numero*6.5;
____
_________

printf ("%d pelotas cuestan $%f\n",numero,costo);

Ejemplo:
LEER UNA CADENA Y SI EL NUMERO DE CARACTERES DE LA CADENA ES IMPAR IMPRIMIR
EL CARACTER DE EN MEDIO DE LO CONTRARIO IMPRIMIR EL ULTIMO CARÁCTER.

#include <stdio .h>


main ( )
{
char CAD[20] ;
int N, NUM;
clrscr ( ) ;
printf (“DAR UNA CADENA : “);
scanf (“%s”,CAT);
N= strlen (CAD);
if(N%2)
{
NUM = N/2 ;
printf(“CARACTER DE EN MEDIO % c “ , CAD[NUM]) ;
}
else
printf (“ULTIMO CARACTER %c “, CAD [N-1]) ;
getch( );
}

HACER UN PROGRAMA QUE DETERMINE E IMPRIMA LA CANTIDAD TOTAL A PAGAR POR


UNA LLAMADA TELEFÓNICA TENIENDO EN CUENTA LO SIGUIENTE:

A TODA LLAMADA QUE DURE MENOR O IGUAL A 3 MINUTOS TIENE UN COSTO DE 10 PESOS,
CADA MINUTO ADICIONAL A PARTIR DE LOS 3 PRIMERO CUESTA 5 PESOS.

#include <stdio .h>


main ( )
{
float LLAMADA,C,C1,C2;
clrscr ( ) ;
printf (“DAME LOS MINUTOS DE LA LLAMADA:”);
scanf (“%f,&LLAMADA);
if (LLAMADA <=3)
C = 10;
else
{
C1 = LLAMADA - 3 ; C2 = C1 * 5; C = C2 + 10 ;
}
printf(“EL COSTO DE LA LLAMADA ES %f”,C);
getch ( ) ;
}

DECISIÓN MÚLTIPLE PARA CONSTANTES NUMÉRICAS ENTERAS Y DE


CARÁCTER.
En algunos casos puede requerirse que la computadora escoja de una lista de mas de dos opciones. Hasta
ahora, la única técnica que se ha presentado para hacer eso consiste en usar varias pruebas if-else, como en

if (nota>=85) strcpy(calif,"bueno");
else
if((nota<85) && (nota>=70) ) strcpy(calif,"regular");
else
if (nota<70) strcpy(calif,"malo");

Para evitar hacer esto, se puede utilizar la siguiente estructura de control:

switch(VARIABLE)
{
case CONSTANTE1 :
SENTENCIAS ;
break;
case CONSTANTE2:
SENTENCIAS;
break;
.
.
.
default:
OTRAS SENTENCIAS;
}

Ejemplos:

LEER UN NUMERO ENTRE EL RANGO DEL 0 AL 3 E IMPRIMIR EL NUMERO EN INGLES, SI EL


NUMERO ESTA FUERA DE ESTE RANGO MARCAR UN ERROR.

#include <stdio . h
main ( )
{
unsigned char NUM ; clrscr ( ) ;
printf (“DAR UN NUMERO : “); scanf (“%d”,&NUM);
switch(NUM)
{
case 0 :
printf(“ZERO\n”);
break;
case 1 :
printf(“ONE\n”);
break;
case 2 :
printf(“TWO\n”);
break;
case 3 :
printf(“THREE\n”); break;
default :
printf(“ERROR %c”,7);
}
getch ( ) ;
}

HACER UN PROGRAMA QUE LEA EL DÍA, EL MES Y EL AÑO LOS TRES DEBEN SER DE TIPO
NUMÉRICO E IMPRIMIR LA FECHA CON EL SIGUIENTE FORMATO. Por ejemplo:

DÍA : 4
MES : 5 salida del programa 4 MAYO DE 1992
AÑO : 92

#include <stdio . h >


main ()
{
unsigned char DIA, MES, A;
clrscr ( );
printf(“DIA: “); scanf (“%d”,&DIA);
printf(“MES: “); scanf (“%d”,&MES);
printf(“AÑO: “);scanf(“%d”,&A);
switch (MES)
{
case 1:
printf(“%d ENERO DE 19%d” , DIA, A); break;
case 2:
printf(“%d FEBREDO DE 19%d “,DIA,A); break;
.
.
.
case 12 :
printf(“%d DICIEMBRE DE 19%d”,DIA,A);
}
}

TEMARIO
#
EJERCICIOS DE ESTRUCTURAS DE DECISION SIMPLE if,
COMPUESTA if-else Y MULTIPLE switch.

1. Cuando se ejecuta el fragmento


if(x<=0) x=1;
printf("%d",x);

¿Qué se imprimirá para cada uno de los valores dados de x?


a. x= - 4; b. x= 3; c. x = 0;

2. Cuando se ejecuta el fragmento


strcpy(calif,"no pasa");
if (prom >= 70) strcpy(calif,"pasa");
puts(calif);

¿Qué se imprimirá para cada uno de los valores dados de prom?


a. prom = 62 b. prom = 82

3. Cuando se ejecuta el fragmento


if (a<=b) b= b+ a;
printf("%d\n",b);

¿Qué se imprimirá para cada uno de los siguientes pares de valores de a y b?


a. a=7 y b=4 b. a=4 y b=7
c. a=5 y b=-3 d. a=0 y b=3

4. Llene el espacio en el enunciado siguiente de forma que imprima si la edad es al menos 21 o no.
if ( ) printf("%d es al menos 21\n",edad);
else
else printf("%d es menor que 21\n",edad);

5. El siguiente fragmento de programa tiene estilo equivocado. Explique que tiene de erróneo y vuélvalo a
escribir.
if (edad >= 65)
printf("se puede jubilar"’)
if edad < 65 then
writeln (‘no se puede jubilar’);

b. encuentre el error en el siguiente:


if (edad >=18)
printf("puede votar")
ELSE printf ("no puede votar ")

6. Supóngase que y=5 y x =1 cuando se ejecutan las dos siguientes instrucciones.


a. if (!(x<2) && (y<6)) printf("verdadero");
else printf("falso");

b. if (! (x>1) | | (y>3)) printf("true\n");


else printf("false\n");

7. a. Llene el espacio en blanco en el siguiente fragmento de programa de manera que una persona de menos
de 72 pulgadas (1.83m) de estatura (ht) y de un peso (wt) superior a 200 libras (90.7 kg) se clasifique como de
peso excesivo y las demás personas se clasifiquen como de peso adecuado.

#EED
scanf("%f",&altura);
scanf("%f",&peso);
if( ) printf("peso excesivo");
else printf("peso adecuado");

b. Vuelva a escribir el fragmento anterior usando el operador | | (OR) en la condición

8. ¿Cuál será la salida para el siguiente segmento de programa cuando los valores de las variables son los
indicados abajo?
if ((edad>20) && (peso>150))
if (sexo=='f') printf("Aaa");
else
printf("Iii");
else
printf("Ooo");
a. edad = 25, peso = 160, sexo = 'm'
b. edad = 30, peso = 140, sexo = 'f'
c. edad = 21, peso = 170, sexo = 'f'
d. edad = 18, peso = 150, sexo = 'm'

9. Unas camisas se venden a $ 10 (dólares) cada una si se compran mas de tres, y a $12 en los demás casos.
Escriba un programa que lea un numero de entrada de camisas compradas e imprima el costo total.

10. Escriba un programa que reciba dos números enteros como entrada y escriba el mensaje signos opuestos
solo si uno de los enteros es positivo, y el otro, negativo. Use un solo operador booleano en la condición if.

11. Escriba un programa que reciba como entrada dos enteros positivos distintos y escriba la diferencia entre
el numero mayor y el menor. Asegúrese de que su programa escriba 6 tanto cuando la entrada es 9 y 15 como
cuando la entrada es 15 y 9.

12. Escriba un programa que reciba el peso de una carta en onzas como entrada e imprima el costo del porte
calculado según la regla siguiente:
La primera onza cuesta $.25 (dólares).
Cada onza adicional cuesta $ .04.

13. Un trabajador recibe su sueldo normal por las primeras 30 horas y se le paga 1 las veces su sueldo normal
por cada hora después de las primeras 30. Escriba un programa que calcule e imprima el pago al empleado
basado en el sueldo normal y en numero de horas de trabajo, donde esos dos datos son introducidos por el
usuario. Por ejemplo, si se escribe 42 para las horas y 6.00 para el sueldo por hora, ser debe imprimir $288.00.

14. En una universidad estatal, los cargos por colegiatura son de $50 (dólares) por materia, como un cargo
máximo de $750 independientemente del numero de asignaturas tomadas. Así, un estudiante que cursa 12
materias pagaría $ 600, mientras que uno que toma 21 materias pagaría el cargo máximo de $ 750. Escriba un
programa en que la entrada es él numero de materias y la colegiatura es la salida.

15. En la Podunka State University, los veteranos solo pagan $ 50 por materia. Escriba un programa de
materias. La salida debe indicar si el estudiante es de la categoría veterano o regular e indicar él numero de
materias y los costos de colegiatura.

switch
16. ¿Cuál será la salida para el siguiente fragmento de programa?
for (car=’a’; car <= ‘f’; car++)
{
switch(car)
{
case 'a':
case:'b':
case 'c': letra= (int)car + 1; break;
case 'd':
case 'e': letra= (int)car+ 2; break;
case 'f': letra=toupper(car);
}
putchar(letra);

17. ¿Cuáles de los siguientes tipos de datos no se pueden usar como selector en instrucción switch:
int, float,doble, char cad[25], char?

18. Encuentre los errores en la siguiente instrucción switch:


switch selector
case 1: printf("uno"); break;
case 3: puts("tres"); break;
default putchar(‘F’);
}

19. Escriba un procedimiento para convertir una fecha dada numéricamente en una fecha con el mes en letras
y para imprimir el resultado. Así, si el procedimiento recibe los valores 5, 30 y 76, debe imprimir Mayo 30,
1976

20. a. Escriba un procedimiento que reciba como parámetros el sueldo por hora de un empleado (float) y las
horas de trabajo (int) y que calcule e imprima sueldo del empleado para esa semana. El trabajador recibe su
sueldo normal por las primeras 40 horas, 1.5 veces su sueldo (una vez y media) por cada hora después de las
primeras 40 (pero no más de 50), y 2 veces su sueldo normal (tiempo extra doble) por cada hora en exceso de
50 horas. Por ejemplo, un empleado que trabaje 51 horas con un sueldo de $ 10 pesos por hora ganaría $570.

21. Escriba un programa que haga diez veces lo siguiente:


a. Pedir al usuario una letra mayúscula. (El programa no debe continuar hasta que obedezca el usuario.)
b. Llamar a un procedimiento para determinar si la letra es una vocal (a, e, i, o, u), una semivocal (y), o una
consonante.
c. Imprimir la letra y su clasificación.

22. Escriba un programa controlado por menú que permita al usuario escoger entre calcular el área de un
círculo, de un rectángulo, o de un triángulo, 0 parar. Haga que el menú se vuelva a mostrar cada vez hasta que
el usuario escoja la opción de parar.

TEMARIO
#EAB EJERCICIOS DE ARREGLOS BIDIMENSIONALES
1. Suponga que b es arreglo de 4x3 tipo entero. ¿Cuál será el contenido de b después de la ejecución del
código siguiente?

for (i=0;i <=3;i++)


{
suma=0;
for (j=0; j<= 2;j++)
{
suma:=suma + 10;
if (i >j) b[i][j]=4;
else
b[i][j]=suma + j;
}
}

2. Suponga que casillas es un arreglo cuadrado con n renglones y n columnas.

a. Escriba un fragmento de programa para calcular la suma, de los elementos, de la diagonal principal de
casillas (empezando en la esquina superior izquierda y terminando en la esquina inferior derecha). Por
ejemplo, para el arreglo de 3 por 3

5 1 1
12 7 9
10 3 2
la suma de los elementos en la diagonal principal sería 5 + 7 +2=14.

b. Escriba un fragmento de programa para calcular la suma de los elementos de la otra diagonal. Para el
arreglo anterior, sería 10 + 7 + l=18. (El fragmento debe hacerse para un arreglo n por n.)

3. Escriba un fragmento de programa para imprimir el contenido de un arreglo m renglones y n columnas de


manera que el contenido de cada renglón aparezca en su propia línea.

4. Suponga que mat es de tipo arreglo de 5x4.

a. Escriba un fragmento de Programa para Imprimir en una línea el contenido de la columna 3 de mat.
b. Escriba un fragmento de programa para imprimir el contenido de cada columna en su Propia línea. La
Primera línea debe dar el Contenido de la primera columna, la segunda línea, el contenido de la segunda
columna, y así sucesivamente.

5. Escriba un procedimiento que reciba dos matrices de m por n y regrese una tercera matriz cuyos valores
son la suma de los correspondientes en las otras dos matrices.

5. Escriba un programa que produzca una tabla de multiplicación para los enteros 1 a 9. Dar el formato
siguiente. Por ejemplo 2 x 5 = 10

1 2 3 4 5 6 7 8 9
1 1 2 3 4 5 6 7 8 9
2 2 4 6 8 10 12 14 16 18
3 3 6 9 12 15 18 21 24 27
:
.
9 9 18 27 36 45 54 63 72 81

#EAB
6. Escriba un programa que permita jugar Bingo. Primero se le debe pedir al usuario escoger 25 números
(de 1 a 100) para su cartón de Bingo de cinco renglones y cinco columnas. Después, la computadora debe
generar al azar enteros de 1 a 100.Cada vez que uno de esos enteros aparece en su cartón, se debe marcar
la casilla de ese entero. El juego termina cuando tiene marcas en todas las casillas de cualquier renglón,
de cualquier columna, o a lo largo de una de las dos diagonales. Cuando termina el juego, la computadora
debe imprimir cuántos números se generaron para completar el cartón y si ganó o perdió. Gana si se
requieren menos de 50 números aleatorios para completar el cartón.

7. Escriba un programa para Ticketron que se usará en la venta de localidades en un teatro donde las filas
están marcadas A a Z y cada fila tiene asientos numerados de 1 a 1 0. El programa debe pedir al usuario
la elección de asientos concretos hasta que escoja uno que no esté reservado. Luego debe pedir el nombre
del cliente y asignarle su lugar. Asegúrese de solicitar algunos asientos más de una vez al correr el
programa.

TEMARIO
#
TEMA
3.4 ESTRUCTURAS REPETITIVAS
En los programas que se han considerado hasta ahora, la computadora no ha ejecutado ninguna instrucción
más de una vez. Una posibilidad poderosa de la computadora es su capacidad de ejecutar varias veces el
mismo grupo de líneas. Este es el proceso de ciclos, y el grupo de líneas se ejecutan varias veces se llama el
cuerpo del ciclo.

Un ciclo es ventajoso cuando se ha de repetir esencialmente la misma tarea un número especificado de veces.
En tales casos, basta codificar una sola vez la tarea- como cuerpo del ciclo. Por ejemplo, en un programa para
calcular e imprimir cheques para mil empleados, no se necesita incluir 1,000 grupos distintos de líneas para
llevar a cabo la tarea de calcular e imprimir los cheques. En vez de ello se puede usar un solo grupo de líneas,
como el cuerpo de un ciclo, que se ha de repetir 1,000 veces.

Las tres estructuras disponibles para ciclos en C son los ciclos for, los ciclos while y do …while.

ESTRUCTURAS REPETITIVAS PARA (for)


for (VAR =VALOR; CONDICION ; INCREMENTO O DECREMENTOS)
SENTENCIA;

OTRA FORMA:
for /(VAR=VALOR;CONDICION;INCREMENTO O DECREMENTOS)
{
SENTENCIAS;
:
.
}

Nota: Para que entre el ciclo la condición debe ser verdadera.

EJEMPLOS:
for ( I = 1 ; I <= 5 ; I++)
printf(“%d ^2 =%d \n” , I , I*I );

Salida del programa

1^2 = 1
2^2 = 4
3^2 = 9
4^2 = 16
5^2 =25

Cuerpo del ciclo. El cuerpo del ciclo en un ciclo for es la línea o grupo de líneas que se van a ejecutar un
número especificado de veces. En el ejemplo siguiente, el cuerpo del ciclo es la única instrucción.

printf("Juan Pérez");

EJEMPLO
for (i=1; i<=3; i++)
printf("Juan Pérez");

La siguiente es una versión incorrecta de un segmento de programa que trata de calcular el promedio de cinco
números de entrada:

# repeticion
for (i=1; i<=5; i++)
{
suma=0;
printf("escriba numero");
scanf("%d",&numero);
suma= suma + numero;
}
prom = suma/5;
printf ("El promedio es %f\n",prom);

Si se corriera este programa, se obtendría un valor incorrecto para el promedio. Si se inserta el enunciado
adicional printf ("suma actual %d\n",suma); como la última instrucción dentro del cuerpo del ciclo sería
más fácil averiguar lo que está equivocado.

EJEMPLO. LEER UNA CADENA Y DECIR EL NUMERO DE CARACTERES QUE CONTIENE LA


CADENA. NO UTILIZAR LA FUNCIÓN strlen ().

#include <stdio.h>
main ()
{
char CAD [80];
int I ;
scanf (“%s”,CAD);
for ( I=0; CAD [I]; I++);
printf (“EL NUMERO CAR = %d\n”,I);
getch ( ) ;
}

HACER UN PROGRAMA QUE LEA UN CARÁCTER , E IMPRIMA ESTE CARÁCTER EN TODA LA


PANTALLA DE LA COMPUTADORA.

#include <stdio.h>
main ( )
{
char CAR ;
unsigned char C,R;
scanf (“%c”,%CAR);
for (R=1 ; R<= 25; R++)
for (C=1 ;C<= 80 ; C++)
printf(“%c”,CAR);
getch ( );
}

EJEMPLO DE UN CICLOS for ANIDADOs.

En el ejemplo siguiente, el cuerpo del ciclo for n se ejecutará tres veces primero con n fija en 2, después con n
fija en 3, y finalmente con n fija en 4.

for (n=2,n <= 4; n++)


{
for (i= 6; i <=8; i++)
printf("%d %d",n,,i);
puts("hola");
}
FORMATO GENERAL CICLO MIENTRAS (ejercicio numero romanos)

while (CONDICION) while (CONDICION)


SENTENCIA; {
SENTENCIAS;
}

Así trabaja un ciclo while. La computadora empieza probando la condición del while. Si la condición es
verdadera (diferente de 1), se ejecuta todo el cuerpo del ciclo. Luego se pasa el control al principio para
volver a probar la condición. La primera vez que al probar la condición resulte falso (0) , la computadora sale
del ciclo. Por ejemplo:
i=1; salida
while(i<9) 1
{ 3
printf("%d\n",i); 5
i= i + 2; 7
} 9
printf("hasta luego"); hasta luego

CICLO MIENTRAS CON LA CONDICION AL FINAL DEL CICLO


El ciclo do…while es muy similar al ciclo while en el grado de versatilidad que ofrecen. De hecho, hay
muchas situaciones en las que funciona tan bien una estructura de ciclo como la otra, y es una cuestión de
preferencia personal cual se escoja. También se dan casos en los que una de estas estructuras de ciclo --- y no
la otra --- debe ser usada.

Después de una breve introducción a la sintaxis del ciclo do…while, se consideran dos tipos principales:

CICLOS CONTROLADOS POR CENTINELA. Como en el caso de los ciclos while controlados por datos
centinela, estos ciclos permiten al usuario indicar cuando se desea dejar de ingresar grupos de datos. En el
caso del ciclo do…while, sin embargo la señal es la respuesta directa del usuario a un mensaje como: Teclee
S para continuar, N para parar

FORMATO:
do
{
SENTENCIAS;
} while (CONDICION)

PROBLEMAS:
HACER UN PROGRAMA QUE LEA UNA CANTIDAD E IMPRIMA EL NUMERO DE CIFRAS DEL
NUMERO.

#include <stdio.h>
main ()
{
int NUM, ND=0,N;
clrscr ( ) ;
printf (“DAR EL NUMERO:”);
scanf (“%d\n”, &NUM);
N= NUM;
do
{
ND++;
NUM=NUM/10;
}while (NUM>0)
printf (“EL NUMERO %d TIENE %d CIFRAS\n” , N, ND);
getch ( );
} /* FIN DEL main*/

TEMARIO
# EER EJERCICIOS DE ESTRUCTURAS REPETITIVAS (for, while, do…while)
for
1.¿ Cuál será la salida para cada uno de los siguientes fragmentos de programa ?
a. for (i=1; i<=3;i++) b. suma : = 0;
printf("hola"); for (i=1; i<=3;i++)
printf("buen dia"); suma = suma + i * i;
printf("hasta luego"); printf("%d\n",suma);

c. suma = 0; d. for (i=1; i<=4;i++)


cont = 0; {
for (i=1; i<=4;i++) suma =0;
{ suma = suma + 1
suma = suma + 1; }
cont = cont + 1; printf ("%d\n",suma);
}
printf("%d\n",suma/cont);

2. ¿Cuántas veces escribirá Pepe el ciclo siguiente ?


for (i=5;i<=15;i++)
puts("Pepe");

3. ¿Qué imprimirá lo siguiente? (Nótese el punto y coma después del paréntesis derecho.)
for (n=1; n<=4;n++);
puts ("Julia");

4. Nunca debe hacerse lo indicado en el fragmento siguiente. ¿Qué tiene de malo este fragmento?
for (i =1; i<=5;i++)
{
n = i * i; i = i + i;
printf("%d\n", i );
}

5. Supóngase que al correr el siguiente fragmento el usuario escribe 3 5, 1 18, 2 10. ¿Cuál será la impresión en
papel? Use el método de rastreo manual explicado.
for (i =1; i<=3;i++)
{
printf ("escriba dos enteros: "); scanf("%d",&num1); scanf("%d",& num2);
num1 = num1 + num2; num2 = num1 + num2;
printf ("%d %d\n",num1,num2); num2 = num2 – 1; num1 = num2;
printf("%d %d\n", num1,num2);
}

6. Escriba un programa que produzca la tabla siguiente:


Yardas Pulgadas
1 36
2 72
3 108
: :
. .
10 360
7. Para el siguiente fragmento de programa, supóngase que el usuario escribe 4, 12, 18, 7 y 13. ¿Qué salida se

#EER
producirá?
puts("Escriba numero de numeros ");
scanf("%d",&n);
suma = 0;
for (i=1; i<= n; i++)
{
puts("Escriba numero");
scanf ("%d",&num);
suma = suma + num;
}
printf("%d\n",suma);

8. Escriba un programa que calcule la suma

1 + ½ + 1/3 + ¼ + ... + 1/50

9. 5! (que se lee “factorial 5”) es igual al producto 5*4*3*2*1. De manera similar, 8! Es igual al producto
8*7*6*5*4*3*2*1. Escriba un programa que calcule el factorial de un entero positivo de entrada. Cuando al
correr este programa el usuario introduce 5, salida debe ser factorial 5 es 120

10. Escriba un programa de nómina para una compañía que tiene seis empleados, algunos de los cuales son
hombres y otros mujeres. Para cada empleado el programa debe leer el nombre, el sexo, las horas de trabajo y
el sueldo por hora. Un grupo típico de datos podría ser
Smith Jane f 50 6.00

La primera parte de la impresión en papel debe dar el nombre y el pago de cada empleado. La segunda parte,
el total de los pagos para cada sexo, así como el promedio de los pagos a los hombres y el promedio de los
pagos a las mujeres.

11. Escriba un programa interactivo para la compañía ABC que haga procesar e imprimir la información de la
nómina de sus diez empleados. Para cada uno el programa debe leer el nombre, las horas de trabajo, la base de
pago y la edad. Por ejemplo, un grupo típico de datos podría ser
Pérez, Juan 50.0 5.00 57
El pago total de un empleado se calcula con la base de sueldo por las primeras 40 horas y 1.5 veces el sueldo
normal por cada hora por encima de las 40. Así, un empleado que trabajó 50 horas a $5 por hora tendrá un
pago total de $275. Se le retiene un impuesto de la manera siguiente: 10% de los primeros $200 y 20% de la
cantidad adicional.
La primera parte de la impresión en papel debe ser la información relevante de cada empleado (sáltese una
línea entre los empleados en la impresión). Déjese a la salida el formato siguiente
Pérez, Juan Hrs trab 50.0 Sueldo base %.00 Edad 57
Total$275.00 Impuesto$35.00 Neto $240.00
La segunda parte debe informar sobre
El pago total promedio para los empleados de al menos 55 años
El pago total promedio para los empleados de menos de 55 años
El nombre y el pago total para el empleado con máximo pago total. (Se puede suponer que no hay empate.)

12. Escriba un programa interactivo para calificar a un grupo de 10 alumnos. El programa debe leer el nombre
y sus tres calificaciones para cada alumno. Debe calcular el promedio para cada uno y después determinar si
el alumno es aprobado o reprobado; se requiere un promedio de al menos 60 para aprobar. La primera parte
de la salida en papel debe ser el nombre del alumno, tres calificaciones, promedio y un mensaje (aprobado o
reprobado). La segunda parte de la salida en papel debe dar el número de alumnos que aprobaron y el número
de los que obtuvieron un promedio de al menos 80.

while
13.Rastre y dé la salida para el siguiente fragmento:
n=1;
while(n<=9)
{
n = n + 5;
printf("%d\n",n);
}

14. Escriba un programa en el que el usuario debe introducir enteros positivos entre 1 y 5. El programa debe
informar al usuario cuando haya escrito un entero que hace que la suma de los números dados pase de 21.
Además del mensaje MAS DE 21, la computadora debe imprimir la suma y el último entero introducido.

do … while
15. ¿ Cuales serán las salidas al correr los programas siguientes ?
a. main() /*ejer1.c*/ b. main() /*ejer2.c*/
{ {
int x=0; intr x=0;
do { do{
printf("%d\n",x); x++;
x++; printf("%d\n",x);
}while(x!=5); }while(x!=5);
} }

c. main() /*ejer3.c*/ d. main() /*ejer4.c*/


{ {
int x=0; int x=0, y=0;
do{ do{
x++; x=x+2;
}while(x>5); y = y +2;
} printf("%d %d\n",x, y);
} while(y<5);
}

16. ¿ Que se imprimirá cuando se corra el programa siguiente ?


main() /* ejer5.c*/
{
int m=5,n=9;
do{
printf("%d %d\n",m, n);
m = m + 2; n++;
}while(m<n);
printf("%d %d\n",m,n);
}

17. Escriba un programa que cuente el numero de cifras en un entero de entrada (hasta 32,000). Así, para una
entrada de 5837 la salida debe ser: 4 cifras

Asegúrese de que el programa funciona para los números 0, 1 y 10.


Para el numero 0, la salida debe ser: 1 cifra

18. Escriba un programa en el que se pida al usuario que ingrese diez enteros impares para sumarlos. Elabore
el programa de manera que no se arruine si el usuario escribe algunos enteros pares. El programa debe
salir del ciclo e imprimir la suma solo cuando se hayan ingresado diez enteros impares.

TEMARIO
#
TEMA
3.5 ARREGLOS UNIDIMENSIONALES
Un arreglo (o disposición ) es un medio conveniente para almacenar en memoria elementos del mismo tipo de
datos. Como se vera, los arreglos facilitan obtener datos de la memoria y el acceso eficiente a ellos.

Se considerarán dos tipos estándares de casos en los que son útiles los arreglos: (1) cuando una lista de datos
se debe procesar mas de una vez y (2) cuando se necesita un gran numero de variables relacionadas de suma o
conteo.

Todas las variables que se han considerado hasta ahora han sido de tipo simple. Una variable de tipo simple
consiste de una sola caja de memoria y solo puede contener un valor cada vez. En cambio, una variable de
tipo estructurado consiste en toda una colección de casillas de memoria.

Un arreglo, ( o disposición ) la clase mas elemental de estructura de datos, consiste en una colección de
casillas de memoria para almacenar una lista de valores que deben ser del mismo tipo - por ejemplo, una lista
de números enteros, una lista de números reales, una cadena de la misma longitud declarada, o una de valores
boléanos. A la lista completa se le da un nombre.

Un arreglo puede compararse con un edificio de apartamentos. El nombre del arreglo es el nombre del
edificio. Los elementos del arreglo son los apartamentos, cada uno de los cuales tiene un numero índice, que
corresponde al de un apartamento. Así como Riser [4] podría ser o representar el apartamento 4 de un edificio
llamado Riser, la notación notas [4] se refiere a la cuarta casilla de memoria en el arreglo denominado notas.
Riser
[0]
[1]
[2]
[3]
[4]

DECLARACIÓN: tipo NOMBREARREGLO[TAMAÑO-1];

EJEMPLOS:
int NUMS[6];
float N[3];
char CADENA[7];

ASIGNACIONES:
NOMBRE_ARREGLO[ÍNDICE]=VALOR;

NUMS[1]=445;
NUMS[0]=6;

Ejemplos:
LEER UNA FRASE E IMPRIMIR CUANTAS VECES SE REPITE CADA CARÁCTER DE LA CADENA.
ÚNICAMENTE CONSIDERAR LOS CARACTERES ALFABÉTICOS.

#include <stdio.h>
main ()
{
int CONTADOR[26];
char FRASE[80];
int I ,INDICE ;
clrscr ( ) ;

# uniarreglos
for (I=0; I<26; I++)
CONTADOR [I]=0;
gotoxy (1.1);printf (“FRASE A ANALIZAR: “);
gotoxy (17,1); gets (FRASE);
for (I=0; I<strlen (frase) ; I++)
FRASE[I]=toupper (FRASE [I]);
gotoxy (17,1);printf (“%s\n”,FRASE);
for (I=0; I< strlen (FRASE) ; I++)
{
if ( ( FRASE [I] >=‘A’) && (FRASE [I] <=‘Z’))
{
INDICE=(int) FRASE [I];
++CONTADOR [INDICE-65];
}
}
for (I=65; I<90; I++)
printf (“%c “ , I);
printf (“\n”);
for (I=0; I<26 ; I++)
printf (“%d “, CONTADOR [I]);
getch ( );
}

TEMARIO
EAU
#
EJERCICIOS DE ARREGLOS UNIDIMENSIONALES
1. Muestre lo que imprimirá el siguiente fragmento de programa para los datos
5 12 8 4 23 19
0 1 2 3 4 5

si nums es de tipo int nums[6];

for (i=0;i<=5;i++)
scanf("%d",%nums[i]);
for (i=0;i<=4;i++)
if (nums [i] > nums [i+1] ) nums [i]= 0;
else nums [i]= nums [ i ] + 5;
for (i=0;i<=5;i++)
printf("%d\n ",nums[i]);

2. Note que en el programa siguiente, el arreglo B esta declarado de manera que su máximo índice es 4.
main() /* ejerau1.c*/
{
int B[5], i;
for(i=0;i<=6;i++)
B[i]=i + 5;
for(i=0;i<=6;i++)
printf("%d\n",(B[ i ]);
}

a. ¿Que sucederá al correr este programa? (Pruébelo.)

3. Suponga que el arreglo B se ha declarado como int B[10]; y que se ha llenado con valores. ¿Qué esta mal
en el fragmento siguiente?
for (i:=0;i<=9;i++)
B[i]= B[i+1];

4.. Escriba un programa para simular la tirada de una par de dados 100 veces y para imprimir una lista que da
el numero de veces que se obtuvo cada resultado. El formato de la salida deber ser el siguiente.
0 salió 5 VECES
1 salió 2 VECES
:
.
10 salió 4 VECES

5. Los primeros diez números de Fibonacci positivos son 1, 1, 2, 3, 5, 8, 13, 21, 34 y 55. Cada numero de
Fibonacci mayor que 1 es la suma de los dos números de Fobinacci previos. Escriba un programa para
almacenar los primeros 25 números de Fibonacci en un arreglo e imprimirlos.

6. Para probar su congelador, una fabrica registra la temperatura (en grados Celsius o Centígrados) una vez al
día durante el mes de mayo. Suponga que estos 31 valores están almacenados en un arreglo. (Note que estos
valores serán todos negativos.) Escriba un procedimiento que reciba este arreglo como parámetro. El
procedimiento debe calcular e imprimir la máxima temperatura y el día en el que ocurrió. Sugerencia: Para
calcular los valores máximos (o mínimos) de los elementos de un arreglo, debe inicializarse la variable que
actualiza el máximo (o mínimo) con el valor del primer elemento y no con el valor arbitrario.

7. Lotería. Escriba un programa para simular una lotería. Se deben escoger seis números distintos de 1 a 54 al
azar. Una salida típica podría ser

#EAU
los seis números son 47 3 18 24 10 51

Sugerencia: Use un arreglo de tipo int lote[54]. Inicialice este arreglo todo a cero. Un 0 indicara que todavía
no se ha escogido un numero, y un 1 indicara que ya se ha seleccionado. (De otra manera, se podría usar un
arreglo de valores boléanos.)

8. Escriba un procedimiento que reciba como parámetro un arreglo ordenado de enteros (posiblemente con
repeticiones) y su tamaño. La salida debe ser una lista de los enteros sin repeticiones. Para el arreglo

40 43 43 43 45 45 45 52 54 56 56 56 58

la salida debe ser


40 43 45 52 54 56 58

TEMARIO
#
TEMA

3.6 ARREGLOS BIDIMENSIONALES


Hasta ahora, todos los arreglos que se han considerado han sido unidimensionales; de modo que bastaba un
solo índice para especificar un elemento deseado. Cuando la información se acomoda de manera natural a una
disposición rectangular, en cambio, puede ser ventajoso almacenar en un arreglo bidimensional, también
llamado matriz. Se necesitan dos índices para especificar un elemento en una matriz un subíndice de renglón
y un subíndice de columna. En este capítulo se empezará considerando los ciclos anidados, que se emplean
mucho al trabajar con matrices.

Supóngase que ventas es una matriz que contiene datos de ventas según cinco días para los 18 empleados de
una empresa determinada. El primer renglón da la información en los cinco días para el vendedor 1; el
segundo renglón da las ventas del vendedor 2, etc. Por el momento no nos preocuparemos sobre cómo se
dieron esos valores a la matriz.

Ventas
0 1 2 3 4
0 25 31 29 40 30
1 41 39 38 42 33
2 48 58 62 47 40
:
.
18 30 30 32 34 28

Para tener acceso a una celda concreta de esta matriz, se debe especificar el nombre de la matriz seguido del
renglón y la columna de la celda deseada. Así, printf("%d",Ventas[1][2]); haría que la computadora
imprimiese 38; es decir, el contenido de la celda del primer renglón y segunda columna.

PREGUNTA:
Para la matriz anterior de Ventas, ¿cuál seria el efecto de cada una de las siguientes instrucciones?

a) printf("%d",Ventas[2][2]); b) Ventas [0][1]=0; c)printf("%d",Ventas[8][25]);

DECLARACION: tipo NOMBRE_ARREGLO[filas][columnas];


int MATRIZ[6][4];
float NUM[2][3];
ASIGNACION:
MATRIZ [0][0]=231;
MATRIZ [2][3]=32000;
NUM [0][2]=3.1416;
NUM [1][1]=640.66;
scanf (“%d”,&MATRIZ[3][1]);
scanf (“f”,&NUM[0][0]);

FORMATO GENERAL PARA DEFINIR ARREGLOS DE CADENAS


char CADENAS [numero de cadenas ][ tamaño de la cadena];

DECLARACION:
char CADENAS [5][7];

# biarreglos
ALMACENAR:
strcpy (CADENA[0], “ROOT”);
strcpy (CADENA [1] , “ABC”);
CADENAS [3][4]=‘*’;

EXTRAER:
putchar (CADENA[1][1]); >>> B
puts (CADENA[0]); >>> ROOT

TEMARIO
#
TEMA

3.7 ESTRUCTURAS
struct NOMBRE_ESTRUCTURA
{
tipo NOMBRE_CAMPO1;
tipo NOMBRE_CAMPO2;
:
.
tipo NOMBRE_CAMPON;
}NOMBRE_DE_LA_VARIABLE;

EN LENGUAJE C UNA ESTRUCTURA ES UNA COLECCION DE VARIABLES QUE SE


REFERENCIA BAJO UN ÚNICO NOMBRE, PROPORCIONANDO UN MEDIO EFICAZ DE
MANTENER JUNTA LA INFORMACIÓN RELACIONADA. LAS VARIABLES QUE COMPONEN LA
ESTRUCTURA SE LLAMAN ELEMENTOS DE LA ESTRUCTURA. LOS ELEMENTOS

INDIVIDUALES DE LA ESTRUCTURA SE REFERENCIAN UTILIZANDO EL OPERADOR punto .


DECLARACION:
struct FECHA
{
int DIA; int MES; int AÑO; };
}D1;

struct SIGNO
{
unsigned char DIA , MES;
char ZODIACO[25];
}struct SIGNO DATO,DAT;

ASIGNACIÓN A UN CAMPO DE UNA ESTRUCTURA


NOMBRE_DE_LA_VARIABLE.CAMPO=VALOR;

DATO.DIA=17; DATO.MES=9,
strcpy (DATO.ZODIACO,”VIRGO”);
sprintf (“CATO NACIO EL %d SEP\n”,DATO.DIA); >>> CATO NACIO EL 17 DE SEP
printf (“ES SIGNO %s\n”,DATO.ZODIACO ); >>> ES SIGNO VIRGO

TEMARIO

# estructuras
#$k
TEMA

3.8 ARREGLOS DE ESTRUCTURAS:


struct DATOS
{
char LIBRO [25];
char AUTOR [25];
int COSTO,NUM_PAG;
};
struct DATOS BIBLIO[5];

ASIGNACION:
strcpy(BIBLIO[0].LIBRO,”TURBO C”);
strcpy(BIBLIO[0].AUTOR ,”LUIS”);
BIBLIO[0].COSTO=23;
BIBLIO[0].NUM_PAG=427;

TEMARIO

# arreglos
$arrreglos
karreglos
#$k
UNIDAD4 MODULOS
4.1 FUNCIONES DEFINIDAS POR EL USUARIO>>>ejercicios
4.2 PROCEDIMIENTOS DEFINIDOS POR EL USUARIO
4.3 ASO DE PARAMETROS POR VALOR
4.4 PASO DE PARAMETROS POR REFERENCIA
4.5 PASO DE ARREGLOS COMO PARAMETROS
4.6 APUNTADORES
4.7 RECURSION >>> Ejercicios
TEMARIO

# modulos
$modulos
kmodulos
#$k
TEMA

4.1 FUNCIONES DEFINIDAS POR EL USUARIO


Una función calcula y regresa un solo resultado basado en uno o más valores que se le pasan. Ya se han
considerado varias funciones integradas del Lenguaje C, como sqr, sqrt, abs y itoa. En Lenguaje C, para
satisfacer las necesidades de un problema dado, el programador puede también definir funciones propias
como subprogramas.

Las funciones definidas por el programador, los procedimientos, permiten al cuerpo principal delegar
subtareas. La subtarea debe ser calcular y regresar un valor, nada mas, para crear una función definida por el
programador, se debe incluir un bloque de líneas que le den nombre a la función y el código que define lo que
hace. Este bloque es una declaración y se coloca después de la función main.

El encabezado de una función debe empezar con el nombre que se le va a dar. Ya que el nombre de la
función actúa como una variable en la que se almacena el resultado de la función, debe declararse también el
tipo de la función (el tipo del resultado de la función). Las reglas para los tipos permisibles de parámetros en
los encabezados de los procedimientos se aplican también a los encabezados de las funciones.

Por ejemplo, para escribir una función para elevar al cubo, llamada ENCCUBO, se usara el
encabezado

float ENCCUBO (int n)

FORMATO GENERAL:
tipo Nombre_Funcion (LISTA DE PARAMETRO FORMALES)
/*DECLARACION DE LOS PARAMETRO FORMALES */
tipo PARAMETRO;
{
/*DECLARACION DE VARIABLES LOCALES*/
/*SENTENCIAS DE LA FUNCION*/
return VALOR;
} /*FIN DE FUNCION*/

LLAMADO DE LA FUNCIÓN:
Nombre_Funcion(LISTA DE PARAMETRO ACTUALES);

NOTA: SI LA FUNCIÓN NO SE DEFINE DE QUE TIPO ES, TURBO C POR DEFECTO LA DEFINE
COMO ENTERA.

EJEMPLOS:

HACER UNA FUNCIÓN QUE CALCULE EL FACTORIAL DE UN NUMERO

#include<stdio.h>
int FACTORIAL ( );
main ( )
{
int N;

# usuario
$usuario
kusuario
clrscr( );
printf (“DAME UN NUMERO:”); scanf (“%d”,&N);
printf (“%d”, FACTORIAL(N) ); getch ( );
}/*FIN DEL main*/

int FACTORIAL (N)


int N;
{
unsigned char i;
int f=1;
for (i=1;i<=N;i++)
f=f*i ;
return f;
}

HACER UNA FUNCIÓN QUE RECIBA COMO PARÁMETRO 3 CALIFICACIONES Y QUE CALCULE
EL PROMEDIO, Y QUE REGRESE UN VALOR DE TIPO CARÁCTER DE ACUERDO A LAS
SIGUIENTES CONDICIONES:

1. SI EL PROMEDIO ES IGUAL O MAYOR A 80 Y MENOR O IGUAL QUE 100 QUE REGRESE UN


VALOR DE B.
2. SI EL PROMEDIO ES MAYOR O IGUAL A 70 Y MENOR O IGUAL QUE 79 QUE REGRESE UN
VALOR DE R.
3. SI EL PROMEDIO ES MENOR DE 70 QUE REGRESE UN VALOR DE M.

#include <stdio.h >


char CAL( );
main ()
{
int A,B,C;
clrscr ( );
A=70; B=70; C=50;
printf (“%c\n”,CAL(A,B,C) );getch ( );
}
char CAL (X,Y,Z)
int X,Y,Z;
{
int PROM;
PROM=(A+B+C)/3;
if (PROM>=80 && PROM<=100)
return ‘B’;
else
if(PROM>=70 && PROM<=79)
return ‘R’;
else
return ‘M’;
}

HACER UNA FUNCION QUE RECIBA COMO PARAMETRO UN CARÁCTER Y REGRESE UN


VALOR DE FALSO SI EL CARÁCTER NO ES IMPRIMIBLE, DE LO CONTRARIO REGRESAR UN
VALOR DE VERDADERO.

#include<stdio.h>
unsigned char ES_PRINT();
main ( )
{
crlscr ( );
printf ( “%d\n”,ES_PRINT (getch ( ) ) ; getch ( ) ;
}

unsigned char ES_PRINT (CAR)


char CAR ;
{
if (CAR>=0 && CAR <=31 )
return 0;
else
return 1;
}

EJEMPLO DE UNA FUNCION DE TIPO CADENA.


HACER UNA FUNCION QUE INVIERTA UNA CADENA. Por ejemplo:

printf (“%s”,INVERSA (“PACO”) ) ; >>> OCAP

#include <stdio . h >


char *INVERSA();

main ()
{
clrscr ( );
printf (“%s”, INVERSA (“PACO”) );
getch ( ) ;
}

char *INVERSA (CAD)


char *CAD ;
{
char *AUX;
unsigned char IND, N=0;
AUX[0]='\ 0';
for (IND=strlen (CAD) ; ind >0 ;IND --)
AUX [N++]=CAD[IND-1];
AUX [N] =‘\0’;
return AUX ;
}

SELECCIÓN ENTRE FUNCIONES Y PROCEDIMIENTOS.


REGLA: Una función se debe usar solamente cuando el único objeto del subprograma es regresar un único
valor. El cuerpo de una función no debe leer ningún valor, no debe imprimir nada, ni debe cambiar el valor de
ninguna variable global.

Aunque es valido que el cuerpo de una función lea o imprima, se considera un estilo muy deficiente. De
manera semejante, aunque técnicamente una función puede tener parámetros de variable, no se deben usar.

Si se quiere que un subprograma regrese varios valores o que lea o imprima algo, debe utilizarse un
procedimiento. Así, al leer un programa escrito en buen estilo en Lenguaje C, al encontrar una función, se
puede suponer que esta función hará una sola cosa, calcular y regresar un único valor.
¿función o procedimiento? Hay casos en los que se pueden usar una función o un procedimiento.

El nombre de una función puede usarse en cualquier lugar donde se permita una expresión.

TEMARIO
#EFUN EJERCICIOS DE FUNCIONES
1. ¿Cuál es el error del siguiente fragmento de programa del cuerpo principal de programa que usa una
función ENCSUMA?
puts ("escriba un entero");
scanf("%d",&n);
ENCSUMA(n);

2. ¿En sólo un estilo deficiente incluir una instrucción printf o scanf en el cuerpo de una función, o se trata
de un error de sintaxis?

3. ¿Cuál será la salida de este programa?

char PRUEBA();
main() /* eje1.c */
{
int i;
for(i=1; i<=3;i++)
{
printf("%d i es igual a\n’,i);
if (PRUEBA (i)) pust("uno\n");
else puts ("dos\n");
printf("tres\n");
} /* fin for */
printf ("cuatro\n");
} /* fin eje1.c*/

char PRUEBA (int n)


{
int a,b;
a= n;
b= n*n-1;
if ((a>b) &&(a<=2)) return PRUEBA = 1;
else return PRUEBA = 0;
}

4. a. Escriba una función que describa dos parámetros enteros, m y n, con m<n.

La función debe regresar la suma:


1/n + 1/m+1 + 1/m+2+ … + 1/n

b. Escriba un enunciado de llamada para la función anterior que haga que la computadora imprima el
resultado de la suma

1/101 + 1/102 +... + 1/500

5. Escriba una función que reciba tres valores enteros que representan calificaciones.
La función debe regresar el valor de cadena ‘bien’ para un promedio de al menos 85, ‘regular’ para un
promedio de al menos 70 pero de 85, o ‘mal’ para un promedio menor de 70.

6. Escriba una función que calcule y regrese la edad de una persona en años basada en la fecha de su
nacimiento y la fecha actual. La función debe tener seis parámetros enteros: mes, día y año de la fecha de
nacimiento de la persona, y mes día y año de la fecha presente. Por ejemplo una persona que nació el

#EFUN
5/30/68 tendrá 21 años de edad el día 5/27/90.

TEMARIO
#
TEMA

4.2 PROCEDIMIENTOS DEFINIDAS POR EL USUARIO

FUNCIONES DE TIPO void (PROCEDIMIENTOS)


#include <stdio.h >
void MENU() ;
main ()
{
char OP ;
crlscr ();
MENU();
OP=getch () ;
}
void MENU ()
{
printf (“MENU PRINCIPAL\n”);
printf (“ALTAS\n”);
printf (“F=FIN\n”);
}

TEMARIO

# procedimientos
#$k
TEMA

4.3 PASO DE PARÁMETROS POR VALOR


ESTE MÉTODO COPIA EL VALOR DE UN ARGUMENTO EN EL PARÁMETRO FORMAL DE LA
SUBRUTINA, DE ESTA FORMA LOS CAMBIOS EN LOS PARÁMETROS DE LA SUBRUTINA NO
AFECTAN A LAS VARIABLES QUE SE USAN EN LA LLAMADA.

LLAMADO DEL PROCEDIMIENTO


NOMBRE_DEL_PROCEDIMIENTO (PAR1,PAR2, ... ,PARN);

DECLARACION DEL PROCEDIMIENTO:


void NOMBRE_PROCEDIMIENTO (PAR1, PAR2, … ,PARN)
tipo PAR1, PAR2, ... ,PARN;

{
CUERPO DEL PROCEDIMIENTO;
}

TEMARIO

# valor
$valor
kvalor
#
TEMA

4.4 PASO DE PARÁMETRO POR REFERENCIA

EN ESTE MÉTODO SE COPIA LA DIRECCIÓN DEL ARGUMENTO EN EL PARÁMETRO DENTRO


DE LA SUBRUTINA SE USA LA DIRECCIÓN PARA ACCEDER EL ARGUMENTO USADO EN LA
LLAMADA, ESTO SIGNIFICA QUE LOS CAMBIOS HECHOS A LOS PARÁMETROS AFECTAN A
LA VARIABLE USADA EN LA LLAMADA EN LA SUBRUTINA.

LLAMADO DEL PROCEDIMIENTO:


NOMBRE_PROCEDIMIENTO(&PAR1,&PAR2, ... ,&PARN);

DECLARACIÓN DEL PROCEDIMIENTO

void NOMBRE_PROCEDIMIENTO(PAR1,PAR2, ... , PARN)


tipo*PAR1.*PAR2, … ,*PARN;
{
CUERPO DEL PROCEDIMIENTO
}

EJEMPLOS:
HACER UN PROCEDIMIENTO QUE RECIBA DOS PARÁMETROS E INTERCAMBIE SU VALOR.

#include <stdio.h >


void SWAP ();
main ()
{
int A=2,B=5;
crlscr () ;
SWAP (&A,&B);
printf (“%d\n “ , A ,B); >>> 5 2
getch ( );
}
void SWAP (A,B)
int *A,*B;
{
int AUX;
AUX=*A; *A=*B; *B=AUX;
}

# referencia
HACER UN PROCEDIMIENTO QUE RECIBA 4 PARÁMETROS 2 OPERANDOS, UN OPERADOR Y
UNA VARIABLE DONDE SE PONDRÁ EL RESULTADO DE ACUERDO AL OPERADOR QUE SE LE
INDIQUE.
#include <stdio.h>
void EXPRESION ();
main ()
{
int A=10, B=5, R=0;
crlscr ( ) ;
EXPRESION (A,B,’+’,&R);
printf (“%d\n”,R); >>> 15
getch ( );
}
void EXPRESION (A,B,OP,RES)
int A,B,*RES;
char OP;
{
switch (OP)
{
case ‘+’ :
*RES=A+B; break;
case ‘-’:
*RES=A-B; break;
case ‘*’:
*RES=A*B; break;
case ‘/’ :
*RES=A/B;
}
}

HACER UN PROCEDIMIENTO QUE LEA VALORES DESDE EL TECLADO.

#include <stdio.h>
void LEE_NOMBRE() ;
main ()
{
char *NOM;
crlscr ( );
NOM[0]=‘\0’;
LEE_NOMBRE (NOM);
gotoxy (1,23); puts (NOM) ;
getch ( ),
}
void LEE_NOMBRE (CAD)
char *CAD;
{
gotoxy (1,1) ;printf (“DAR NOMBRE : “);
gets (CAD);
}

TEMARIO
#
TEMA

4.5 PASO DE ARREGLO COMO PARAMETROS


#include <stdio.h>
void X () ;
main ()
{
int A [2]; A[0] =6; A[1]=10;
X(A);
printf (“%d %d”, A[0],A[1] ); >>> 10 6
getch ( );
}
void X(C)
int C[2] ;
{
SWAP (&C[0], &C[1]);
}

INICIALIZACION DE ARREGLOS:
tipo NOMBRE_ARREGLO [TAM1]={valor1, valor2, ... ,valor N};

EJEMPLO:
int VECTOR [10] = {21,32,3,44,5,66,87,80,9,310};

TEMARIO

# parametros
#$k
TEMA

4.6 APUNTADORES
UN APUNTADOR ES UNA VARIABLE QUE CONTIENE UNA DIRECCION DE MEMORIA, ESA
DIRECCION ES LA POSICION DE OTRA VARIABLE DE MEMORIA, UNA DECLARACION DE
PUNTERO CONSISTE EN UN TIPO BASE, UN *, Y EL NOMBRE DE LA VARIABLE.

Tipo *NOMBRE_VARIABLE;
* OPERADOR PARA DEFINIR APUNTADORES
& OPERADOR QUE VUELVE LA DIRECCION DE MEMORIA DE SU OPERANDO.

EJEMPLO:
char *P;
unsigned char *D;
*P = ‘A’;
D = &P;

malloc();
DEVUELVE UN PUNTERO DE TIPO void, QUE SIGNIFICA QUE DEBE USAR UN TIPO EXPLICITO
CUANDO EL PUNTERO DEVUELTO POR malloc() DEVUELVE UN PUNTERO AL PRIMER BYTE
DE UNA REGION DE MEMORIA DE TAMAÑO QUE SE NECESITE. SI NO HAY SUFUCIENTE
MEMORIA DEVUELVE UN PUNTERO NULO.

sizeof (tipo);
DEVUELVE EL TAMAÑO EN BYTES DE LA VARIABLE tipo.
int N;
printf (“%d\n” , sizeof (N) ) ; >>> 2

NULL
ESTA INSTRUCCION SE UTILIZA PARA INICIALIZAR UN APUNTADOR.
int *N;
*N = NULL;

free(apuntador);
ESTA FUNCION SIRVE PARA LIBERAR MEMORIA DE ACUERDO A LA VARIABLE DE TIPO
apuntador. Por ejemplo:

LISTAS ENLAZADAS:

#include<stdio.h>
struct AP_NODO_LISTA
{
char INFO ;

# apuntador
$apuntador
kapuntador
struct AP_NODO_LISTA *SIG;
};
void MENU() ;
void IMPRIMIR () ;
void INICIA_LISTA () ;
void BUSQUEDA () ;
void INSERTA () ;
void ELIMINA () ;
main ( )
{
struct AP_NODO_LISTA *P;
char *MENSAJE ;
MENSAJE = ‘\0’;
INICIA_LISTA (&P);
do
{
crlscr ();
MENU();
OP=toupper (getch ( ) );
switch (OP)
{
case ‘I’:
gotoxy (1,11); printf (“DAR UN CARACTER: “);
ELEMENTO=getch () ;
INSERTA (ELEMENTO,&P,MENSAJE);
if (!strcmp (MENSAJE, “EXITO”))
IMPRIMIR(P);
break ;
case ‘E’;
gotoxy (1,11); printf (“DAR UN CARACTER:”) ;
ELEMENTO=getch ();
ELIMINA (ELEMENTO,&P,MENSAJE );
if (!strcmp ( MENSAJE,”EXITO”));
IMPRIMIR(P);
break;
}
}while (OP!=27);
}/*FIN */

void MENU ()
{
gotoxy (10,5) ; printf (“= = MENU PRINCIPAL = = “);
gotoxy (10,7) ; printf (“ INSERTA “);
gotoxy (10,8) ; printf (“ ELIMINA “);
gotoxy (10,9) ; printf (“ ESC=FIN “);
}
void INICIA_LISTA (P)
struct AP_NOD_LISTA **P;
{
*P=NULL;
}
void BUSQUEDA (ELEMENTO , P, R, M )
char ELEMENTO ;
struct AP_NODO_LISTA * P, **R,**M;
{
*R=P;
*M=NULL;
while (*R !=NULL && (*R)->INFO <ELEMENTO )
{
*M=*R;
*R=(*R)-> SIG;
}
if (*R !=NULL)
if ( (*R) ->INFO != ELEMENTO )
*R=NULL;
ELEMENTO=ELEMENTO;
}

void INSERTA (ELEMENTO, P, CODIGO )


char ELEMENTO, *CODIGO;
struct AP_NODO_LISTA **P;
{
struct AP_NODO_LISTA *R , *M , *Q;
BUSQUEDA (ELEMENTO, * P, &R, &M);
if (R= = NULL )
{
Q=(struct AP_NODO_LISTA*) malloc (sizeof (struct AP_NODO_LISTA ) ) ;
Q-> INFO=ELEMENTO;
if (M= = NULL)
{
Q->SIG=*P;
*P=Q;
}

else
{
Q->SIG=M->SIG;
M->SIG=Q;
}
strcpy (CODIGO, “EXITO”);
}
else
{
gotoxy (1,23);
printf (“YA EXISTE [%c] , Enter ... \n “,ELEMENTO);
strcpy (CODIGO, “YA EXISTE“);
getch ( );
}
}
void ELIMINA (ELEMENTO,P, CODIGO)
struct AP_NODO_LISTA **P; char ELEMENTO,*CODIGO;
{
struct AP_NODO_LISTA *R , *M;
BUSQUEDA (ELEMENTO,*P,&R,&M);
if (R= = NULL)
{
gotoxy (1,23) ; printf (“NO EXISTE [%c], Enter \n “, ELEMENTO);
strcpy (CODIGO, “NO EXISTE”);getch ();
}
else
{
if (M==NULL)
*P=R->SIG;
else
M->SIG=R->SIG;
free (R);
strcpy (CODIGO,”EXITO”);
}
}

void IMPRIMIR (P)


struct AP_NODO_LISTA *P;
{
gotoxy (1,18); printf (“CONTENIDO DE LA LISTA “);
while (P != NULL)
{
printf (“%c”, P->INFO);
P=P->SIG;
}
gotoxy (1,23);
printf (“OPRIMA CUALQUIER TECLA PARA CONTINUAR “ ) ;getch ( ) ;
}

TEMARIO
#$k
RECURSION

DEFINICION: Es cuando un objeto esta formado pro si mismo o se define en función de si mismo.

UTILIDAD. La recursión es una técnica especialmente eficaz en las definiciones matemáticas. Por
ejemplo: Factorial de un número, las estructuras de un árbol binario, número Fibonacci, Curbas de Hilbert,
Torres de Hanoi.

CARACTERISTICAS:
 Se llama a si mismo
 Debe tener una condición de paro
 En cada llamado debe hacercarse al resultado esperado
 Definición de la expresión recursiva en términos recursivos

VENTAJAS:
 Código compacto (más pequeño que el iterativo)
 Más rápido
 Se utiliza para Lenguajes de Programación que no tienen ciclos (Por ejemplo LISP)
 Aprovechamiento de la memoria para utilizar la recursión

EJEMPLOS:
HACER UNA FUNCION RECURSIVA QUE CALCULE EL FACTORIAL DE UN NUMERO POSITIVO.
a) 0! = 1
b) n>0: n! = n * (n-1)!

Por ejemplo factorial de 6!= 1*2*3*4*5*6 = 720

HACER UNA FUNCION RECURSIVA QUE ELEVE UN NUMERO A UN EXPONENTE.

a) B^0 =1
b) B^E, E>0: ELEVA=ELEVA(B,E-1)*B

Por ejemplo 2^3 =2*2*2 =8

HACER UNA FUNCION RECURSIVA QUE REGRESE LA SUMA DE LA ECUACION X= 1/1+1/2+ …


+ 1/N

Por ejemplo x(3) = 1/1 + 1/2 + 1/3 = 1.83333

HACER UNA FUNCION RECURSIVA QUE ENCUENTRE EL NUMERO FIBONACCI DE UN


NUMERO. LOS NUMEROS FIBONACCI SON UNA SUCESION DE NUMEROS. LOS DOS PRIMEROS
NUMEROS POSITIVOS SON 1. DE AHÍ EN ADELANTE, CADA NUMERO FIBONACCI ES LA SUMA
DE LOS DOS ANTERIORES. Por ejemplo:

Numero 1 2 3 4 5 6 7 8 9 10 11
Fibonacci 1 1 2 3 5 8 13 21 34 55 89

Fib(n) para esto existe las siguientes ecuaciones:

#recursion
$recursion
krecursion
Fib(1) =1
Fib(2)=2
Fibn=Fib(n-2)+Fib(n-1)

#include <stdio.h>
int factorial();
int eleva();
float x();
int Fib(n)
/* rec.c */
main()
{
printf("Factorial de 6=%d\n",factorial(6));
printf("Factorial de 0=%d\n",factorial(0));
printf("Fibonacci de 6=%d\n",Fib(6));
printf("Fibonacci de 2=%d\n",Fib(0));
printf("Potencia de 2^3=%d\n",eleva(2,3));
printf("Potencia de 9^0%d\n",eleva(9,0));
printf("Ecuacion 3=%f\n",x(3));
printf("Ecuacion 1=%f\n",x(1));
getch();
}

int factorial(n)
int n;

{
if(n==0) return 1;
else
return n*factorial(n-1);
}

int eleva(b,e)
int b,e;

{
if(e==0) return 1;
else
return eleva(b,e-1)*b;
}

float x(n)
int n;
{
if(n==1) return 1.0;
else
return x(n-1)+ 1.0/n;
}

int Fib(n)
int n;

{
if((n==1)|| (n==2)) return 1;
else
return Fib(n-2) + Fib(n-1);
}
TEMARIO
#
EJERCICIOS DE RECURSION
1. Hacer una función recursiva que calcule el producto de 2 números a través de sumas y restas. no utilizar
el operador multiplicación *

Por ejemplo: 2*3 = 6

2. HACER UNA FUNCION QUE CUENTE EL NUMERO DE PALABRAS DE UNA FRASE.

Por ejemplo; México lindo y querido = 4 palabras

3. ¿Qué hace la función misterio?. Hacer pruebas y encontrar los


resultados con los siguientes datos:

n a e misterio
2 1.0 0.001 ¿
3 1.5 0.001 ¿
9 2.5 0.001 ¿

float misterio (n,a,e)


int n;
float a,e;
{
if(fabs(a*a-n)< e)
return a;
else
return misterio(n,(a*a+n)/(2*a),e);
}

4. Hacer una función recursiva que imprima el contenido de un arreglo en


orden inverso. por ejemplo para el arreglo:

25 14 33 49 18 22 la función debe imprimir

22 18 49 33 14 25

5. Hacer una función recursiva que convierta un numero de sistema decimal


a sistema binario. Por ejemplo.

14= 1110
255=11111111
0=0

TEMARIO

#erec
#$k
UNIDAD5 ARCHIVOS
5.1 SECUENCIAL
5.2 BINARIO>>>ejercicios

TEMARIO

# archivos
$archivos
karchivos
#
TEMA

5.1 SECUENCIAL
/***arc-TXT.c***/
#include<stdio.h>
main ( )
{
char op,na[11],cad[80];
int nl =1;
FILE *f;
do
{
clrscr ( ) ;
printf(“ARCHIVO TEXTO\n\n”);
printf (“Nombre del archivo:”);
gets (na);
if( (f=fopen(na,”r”) ) = =NULL)
printf (“Error.El archivo no existe...\n”);
else
while(!feof(f))
{
fgets(cad,80,f);
puts (cad);
if(nl<10) nl++;
else
{
nl=0; getch( );
}
}
printf(“Oprima Esc=Fin o cualquier tecla para continuar...”);
op=getch( ) ;
fclose(f);
}while(op!=27);

TEMARIO

# secuencial
#$k
TEMA

5.2 BINARIO
Un archivo binario consiste en una sucesión de datos, de cada uno de los cuales es del mismo tipo de datos.
Por ejemplo, un archivo binario podría contener una sucesión de enteros o una sucesión de registros. El tipo
de datos de cada uno de los elementos del archivo binario se llama tipo de componentes del archivo. En la
declaración de una variable de archivo binario se debe especificar el tipo de componentes del archivo.

Los datos en un archivo binario están almacenados en la forma que la computadora usa internamente por el
compilador (esto es, en forma binaria). En un archivo de texto los datos se almacenan en forma de caracteres.

VENTAJAS DE LOS ARCHIVOS DE REGISTROS:


Si se tiene una lista alfabética de los miembros y números telefónicos de 1,000 miembros de un club, esta
información podría grabarse en un archivo de texto o en uno de registros. Los siguientes son dos casos en los
que seria preferible un archivo de registros sobre un archivo de texto:

Supóngase que quiere encontrar el numero telefónico de la persona en la posición 998 de la lista. Los archivos
de texto solo pueden procesarse de manera secuencial. Así, con un archivo de texto se requeriría que el
programa accediera a los primeros 997 nombres y números telefónicos antes de poder obtener el de la
posición 998. Con un archivo de registros, la computadora podría ir directamente al registro 998, saltandose
todos los primeros 997.

Supóngase que se quiere usar búsqueda binaria para encontrar los números telefónicos de varios miembros. Si
la información estuviera almacenada en un archivo de texto, el programa tendría que leer primero todos los
nombres y números telefónicos en un arreglo de registros. Esto no solo tomaría tiempo, sino que además
requeriría memoria interna (un arreglo) para almacenar todo el contenido del archivo. En cambio, si la
información estuviera almacenada en un archivo de registros, la búsqueda se podría hacer en el archivo
mismo. Solo seria necesario leer del archivo los registros usados en el procedimiento de búsqueda binaria,
para almacenarlos en la memoria interna. Además, como se vera, puede usarse una sola variable de registro
para almacenar el registro actual que se examinara.

Hay básicamente tres ventajas en usar un archivo binario de registros:

1. Un archivo de registros es como un arreglo de registros, en cuanto que permite acceso directo a un
registro particular especificado por numero de registro. La computadora puede ir directamente a tal
registro sin tener que acceder a todos los registros precedentes.

2. Un archivo externo no ocupa memoria interna de la computadora. Es muy frecuente que la procesar un
archivo de registros no se tenga que leer todo el contenido del archivo en la memoria. En vez de ello, solo
un numero relativamente pequeño de los registros deben leerse en la memoria.

3. Toda la información en un archivo de texto esta almacenada en forma de caracteres. Así que al leer
valores numéricos de un archivo de texto, la computadora necesitara convertir de la forma de caracteres
a la forma binaria, que es la que usa la computadora para las representaciones internas de los valores
numéricos. Con los archivos de registros, los datos están almacenados justo en la misma forma que en la
representación interna. como no hay necesidad de hacer conversiones, el tiempo de procesamiento es algo
menor.

# binario
$binario
kbinario
DECLARACIÓN DE VARIABLES DE ARCHIVO.
FILE *Nombre_Archivo;

CREACIÓN DE UN ARCHIVO BINARIO.


Archivos binarios vs. Archivos de texto. Las siguientes son algunas formas importantes en las que
difieren los archivos binarios de los archivos de texto.

1. No es posible crear un archivo binario desde el modo de edición. Un archivo binario solo puede crearse
corriendo un programa.

2. Solo se puede tener acceso al contenido de un archivo binario existente a través de un programa en
Lenguaje C. Si se en lista el archivo o si se carga y se examinara en el modo de edición, lo que aparece en
pantalla puede ininteligible por la forma en la que esta almacenado un archivo binario.

Apertura de un archivo para crearlo por primera vez. Para crear un archivo binario un programa debe contener
las instrucciones como:

f=fopen (“Nombre.extt”,”w+b”);

PRECAUCION: Si ya existiera un archivo externo llamado miembro.dat, la instrucción anterior haría que se
borrara su contenido.

ESCRITURA DE UN REGISTRO:
fwrite(&estructura,tamaño,numero_escrituras,archivo_logico);

Hará que el contenido actual de la variable de registro miembro se escriba en el archivo en la posición actual
del puntero del archivo. Cuando se ha escrito en un archivo, el puntero de este queda siempre justo después
del ultimo registro que se haya escrito en el archivo.

PRECAUCION: El primer registro que se escribe en un archivo tiene el numero de posición 0.

LECTURA DE UN REGISTRO:
fread(&estructura,tamaño,numero_escrituras,archivo_logico);

Lee los datos del archivo y los almacena en la variable de registro miembro en la posición actual del puntero
del archivo. Cuando se lee en un archivo, el puntero de este queda siempre justo después del ultimo registro
que se haya escrito en el archivo.

CIERRE DE UN ARCHIVO:
fclose(archivo_logico);

Asegúrese de incluir el enunciado o instrucción de cierre de archivo (por ejemplo, fclose(archA)) en


cualquier programa que escriba en un archivo. Si no se hace esto puede ocurrir que algunos datos
permanezcan en el buffer de archivo (una área de almacenamiento temporal) y que no se escriban en el
archivo.

La computadora de hecho no escribe en el archivo con cada ejecución de una instrucción de escritura en
archivo. En vez de ello, almacena ese dato en un buffer de archivo que, periódicamente, da salida al archivo.
La instrucción de cierre de archivo vacía el remanente que pueda existir en el buffer.
BÚSQUEDA DE UN SOLO REGISTRO:
Una forma de interrogar un archivo es buscar un solo registro, como el numero telefónico de una persona. En
este tipo de búsqueda usualmente no es necesario examinar todos los registros del archivo.

Para hacer una búsqueda binaria en un archivo ordenado de registros, se necesita usar el procedimiento
preconstruido fseek. La instrucción

fseek (archivo_logico,numero_byte ,POSICION);

POSICION PUEDE SER: SEEK_SET (inicio del archivo), SEEK_POS (posición actual) Y SEEK_END
(final del archivo).

Moverá el puntero de archivo al registro cuyo numero de posición es numero_byte. Después puede usarse una
instrucción fread para leer el registro que esta en esa posición. Por ejemplo, si numero_byte tiene el valor de
32.

fseek(f,32,SEEK_SET);
fread (&emp,sizeof(struct reg),l,f);

Leerá a partir del byte 32.

De manera similar, se puede escribir:

fseek(f,64,SEEK_SET);
fwrite(&emp,sizeof(struct reg),l,f);

Escribe el contenido actual de la variable de registro miembro a partir del byte 64, (si ya hubiera un registro
almacenado en esa posición, la escritura se haría en el mismo lugar, borrando el contenido del anterior.)

PRECAUCION: Después de ejecutar fread (&emp,sizeof(struct reg),l,f); o bien fwrite(&emp,sizeof(struct


reg),l,f); el puntero de archivo avanza a la posición siguiente. Esto debe tenerse presente al actualizar un
archivo de registros.

Nota: Investigar las siguientes instrucciones para el manejo de archivos.


feof , filelength, remove y rename.

EJEMPLO DE UNA ARCHIVO BINARIO PARA CALCULAR EL PAGO DE UN


NOMINA DE TRABAJADORES:

/***arc-bin.c***/
#include <stdio.h>
void Menu (); void Altas () ; void Modificar ();
struct reg
{
char nom[35];
unsigned int sb,desc;
char edo;
};

main ( )
{
char op;
do
{
Menu ( &op);
switch (op)
{
case’A’: Altas(); break;
case’M’: Modificar();
}
}while (op!=27);
}

void Menu (op)


char *op;
{
clrscr ();
printf(“Menu principal\n\n Altas \n Modificar \n Esc=Fin: “);
*op=toupper(getch());
}

void Altas ()
{
struct reg emp; int cve;
FILE *f;
clrscr ( );
if ( (f=fopen (“Nominada.dat”,”r+b”)) == NULL)
f=fopen (“Nominada.dat”,”w+b”);
printf(“Altas\n\n”);
printf (“Clave...:”); scanf (“%d”,&cve);
fseek(f,sizeof(struct reg)*cve,SEEK_SET);
fread (&emp,sizeof(struct reg),l,f);
if (emp.edo==l)
{
printf (“Error.el empleado%s ya existe...”,emp.nom);getch( );
}
else

{
printf (“nombre...:”); gets (emp.nom);
printf (“sueldo...:”); scanf (“%u”,&emp.sb);
printf (“descuento:”); scanf (“%u”,&emp.desc);
emp.edo =1;
fseek(f,sizeof(struct reg)* cve,SEEK_SET);
fwrite(&emp,sizeof(struct reg),1,f);
}
fclose(f);
}

void Modificar()
{
struc reg emp; int cve;
char op;
FILE*f;
clrscr( );
gotoxy(1,1); printf(“Modificar\n\n”);
gotoxy(1,2); printf (“clave...”); scanf (“%d”,&cve);
f=fopen (“Nomina.dat”,”r+b”);
fseek(f,sizeof(struc reg)*cve,SEEK_SET);
fread(&emp,sizeof(struc reg),l,f);
gotoxy(1,4); printf(“N Nombre..:%s\n”,emp.nom);
gotoxy(1,5); printf(“S Sueldo...:%u\n”,emp.sb);
gotoxy(1,6); printf(“D Descuento:%u\n”,emp.desc);
gotoxy (1,7);printf(“Opcion:”); op=toupper(getch());
switch (op)
{
case ‘N’: gotoxy (14,4); clreol( ); gets (emp.nom); gets (emp.nom); break;
case ‘S’: gotoxy(14,5); clreol( ); scanf (“%u”,&emp.sb); break ;
case ‘D’: gotoxy (14,6);clreol( );scanf (“%u”,%emp.desc); break ;
}
if (op == ‘N’ || op ==‘S’ || op ==‘D’)
{
fseek (f,sizeof(struc reg)*cve , SEEK_SET);
fwrite(&emp,sizeof(struc reg ),l,f);
}
gotoxy(1,23); printf (“Oprima cualquier tecla para continuaar...%c”,7);
getch( );
fclose (f);
}

TEMARIO
#EFILE EJERCICIOS DE ARCHIVOS.

1. Suponga que miembro.dat es un archivo de registros, donde cada uno contiene el nombre, la edad y el
sexo de un empleado. Escriba un programa que de al usuario las opciones siguientes:

A. Enlistar todos los miembros de sexo masculino.


B. Enlistar todos los miembros de un sexo femenino y que tiene al menos 18 años.
C. Imprimir la edad promedio de todos los miembros.

Nota: Hacer la opción de alta de empleados.

2. Suponga que alumno.dat es un archivo de registros, donde cada uno contiene el nombre, el numero de ID,
el numero de créditos cubiertos y el promedio de las calificaciones de un alumno. El archivo esta
ordenado en orden ascendente por números ID. Escriba un programa que de al usuario las opciones
siguientes:

a. Enlistar todos los datos para el alumno cuya ID es ingresada por el usuario.
b. Enlistar todos los datos para los alumnos cuyo promedio es mayor o igual que el ingresado por el
usuario.
c. Enlistar todos los datos para los alumnos cuyo promedio es mayor o igual al numero ingresado por el
usuario y que hayan completado menos de un cierto numero de créditos proporcionado por el
usuario.

3. Suponga que inventario.dat es un archivo de registros que contiene información sobre artículos vendidos
por una ferretería. Cada registro consiste de un numero de ID, el nombre del articulo, el precio y la
cantidad en existencia. Los registros están ordenados según su numero de ID. Escriba un programa que
de al usuario las opciones siguientes y actualice convenientemente la cantidad en existencia.

a. Transacción de ventas por numero de ID: el dependiente ingresa el numero de ID y la cantidad


vendida.
b. Transacción de ventas por nombre de articulo: el dependiente ingresa el nombre del articulo y la
cantidad vendida.
c. Transacción de embarque por numero de ID: el dependiente ingresa el numero de ID y la cantidad
recibida.
d. Salir.

4. a. Escriba un programa que almacene en un archivo de enteros todos los enteros desde 100 hasta 2000.
b. Escriba un programa que almacene en un archivo de enteros todos los números primos entre 100 y 200.

5. Escriba un programa para fusionar dos archivos ordenados, eliminando los registros duplicados que haya.
Es decir, si alguno de los registros aparece en los dos archivos, debe escribirse una sola vez en el archivo
fusionado.

6. Un archivo de 31 registros contiene información sobre los boletos para cada una de las representaciones
de Hamlet en julio. Las filas de localidades del teatro están marcadas de A a Z, y en cada una hay
asientos numerados de 1 a 10. Cada registro consiste en un arreglo bidimensional.

a. Escriba un programa para Ticketron que permita al usuario actualizar este archivo. Durante una
sesión de actualización, el dependiente pide al cliente que especifique una representación (fecha) y
después escoja asientos en especial para tal representación hasta que el cliente haya escogido un
asiento que esta desocupado. Después el dependiente pide su nombre al cliente y le asigna un
asiento.

#EFILE
b. Modifique el programa de la parte a de manera que el cliente pueda pedir una fila concreta y el
programa encuentre el primer asiento disponible de esa fila.

7. Escriba un programa para revisar su cuenta de cheques. Al inicio del mes, la única información en el
archivo será el saldo inicial de la cuenta. Durante el mes se ingresan ajustes a la cuenta de manera
interactiva, y el programa almacena cada transacción como un registro del archivo. El menú o lista de
opciones debe incluir las siguientes:

a. Ingresar el saldo inicial del principio del mes y escribirlo en un nuevo archivo.
b. Registrar un cheque (fecha, numero de cheque y la cantidad que cubre).
c. Registrar un deposito, fecha e importe del deposito.
d. Registrar cargos del banco.
e. Imprimir una declaración (estado de cuenta) que muestre todas las transacciones y los saldos inicial y
actual.
f. Salir.

8. La John Doe Society tiene la información sobre sus miembros en un archivo. Cada registro tiene campos
para nombre, sexo, edad y ocupación. Desafortunadamente, los registros no están en orden alfabético.
Escriba un programa para ordenar los registros alfabéticamente por nombre. No lea el archivo en un
arreglo de registros; en vez de ello, haga directamente la ordenación en el archivo. Puede almacenar a lo
mas dos registros en la memoria en un momento dado.

TEMARIO
#$k
RUTINAS DE IMPRESION
/* Imprime lo que se encuentra en la pantalla, en modo texto */
#include <stdio.h>
#include <dos.h>
/* Pantalla.c*/
void Clear();

main()
{
unsigned char x,y; char c;
clrscr();
printf("Dar carácter: "); c=getch();
for(x=5;x<35;x++)
for(y=5;y<20;y++);
{
gotoxy(x,y); putchar(c);
}
Clear();
getch();
}

void Clear()
{
union REGS e,s;
int c;
int86(0x05,&e,&s);
c=peekb(0x50,0); c=c;
}

/* Programa que imprime cadenas de caracteres en la impresora, tomando como archivo la impresora*/
/*Lpt.c*/
#include <fcntl.h>
main()
{
int fn;
fn=open("Lpt1","O_WRONLY");
if(fn != 1)
{
write(fn,"\x0E",1);
write(fn,"A doble ancho\n",14);
write(fn,"\x14\x0F",2);
write(fn,"Condensado\n",11);
write(fn,"\xA",1); /*salto de linea*/
write(fn,"\xC",1); /*salto de pagina*/
}
close(fn);
}

Menú principal

#rutinas
$rutinas
krutinas
#$k
PROYECTO FINAL

INSTITUTO TECNOLOGICO DE QUERETARO


DEPTO. DE SISTEMAS Y COMPUTACION
PROGRAMACION I (Lenguaje de Programación C)

PROFA. LILIANA MICHELLE CHAVEZ SANTANDER


TEMA A EVALUAR: ARCHIVOS.

ESCRIBA UN PROGRAMA EN LENGUAJE C, QUE SIMULE UN CAJERO AUTOMATICO


CONTROLADO POR EL SIGUIENTE MENU:

Banco
Deposito
Retiro
Ver Saldo
Esc=Salir

Se trata de permitir al usuario hacer tantas transacciones como quiera a partir del menú anterior.

Banco: En esta opción se llevara el control de los clientes del banco. Para entrar a esta se debe de dar una
clave de acceso, que solo personal autorizado debe tener, esta clave no se debe ver en la pantalla, para indicar
cada carácter leido se debe mostrar * en la pantalla. Por ejemplo: Dar clave: ***. Esta opción contara con el
siguiente submenú

Menú Banco
Abrir Cuenta
Consulta de clientes
Regresar al menú principal

Abrir Cuenta: En esta opción se solicitara al usuario dar el nombre, saldo inicial. Y el banco deberá
entregar al usuario su numero de identificación personal NIP (0,1,2, … n) en forma automática. Considerando
que este numero será el campo llave para las búsquedas y será el registro del archivo. Por ejemplo:

OPCION ABRIR CUENTA BANCO ORO


Dar nombre: JUAN PEREZ
Saldo inicial: 1000
Tu numero de identificación personal NIP es 0

Consulta de clientes: Esta servirá para poder consultar los datos generales de los clientes, esto prodra ser
en forma individual (dato de entrada NIP) o total (todo el archivo) de manera ordenada alfabéticamente. Por
ejemplo:

Consulta Individual
Dar NIP: 0
Dar nombre: JUAN PEREZ

#proyecto
$proyecto
kproyecto
Saldo inicial: 1000

Consulta Total
Dispositivo Pantalla o Impresora: P
Datos correctos (S/N): S

BANCO ORO
Reporte del estado de cuenta de clientes. Fecha: 17/Agosto/2000
________________________________________________________
NIP NOMBRE DEL CLIENTE SALDO ACTUAL
________________________________________________________
4 ABEL HERNANDEZ 30000.00
1 CARLOS CHENKA 1000.00
0 JUAN PEREZ 1100.00
2 MARIA DEL POZO 10.00
3 PEDRO VICTORINO 390.00
________________________________________________________
TOTAL: 32500.00

Deposito: El usuario dará su NIP (este no se debe mostrar en pantalla, en cambio debe mostrar puros
asteriscos, dependiendo del tamaño del NIP) y el cajero desplegara en pantalla el nombre del cliente y saldo
actual.
También el cajero solicitara al cliente la cantidad del deposito (positiva). Y por ultimo imprimir el saldo
actual y un mensaje de cortesía. Por ejemplo:

OPCION DEPOSITO BANCO ORO


NIP: *
JUAN PEREZ
SALDO ACTUAL $1000.00
Dar cantidad a depositar: 500
SALDO ACTUAL: $1500.00
Feliz día TE DESEA BANCO ORO

Retiro: El usuario dará su NIP y el cajero desplegara en pantalla el nombre del cliente y saldo actual. En
esta opción se le debe pedir al cliente la selección de la cantidad de retiro de acuerdo al siguiente menú:

A.$50.00 B.$100.00 C.$200.00 D.$500.00 E.$1000.00 F.$1500.00 G.OTRA CANTIDAD

No permitir que se haga un retiro mayor al saldo actual.

Y por ultimo imprimir el saldo actual y un mensaje de cortesía. Por ejemplo:

OPCION RETIRO BANCO ORO


NIP: *
JUAN PEREZ
SALDO ACTUAL $1500.00

A.$50.00 B.$100.00 C.$200.00 D.$500.00 E.$1000.00 F.$1500.00 G.OTRA CANTIDAD

OPCION: B
SALDO ACTUAL: $1400.00
Feliz dia TE DESEA BANCO ORO
Ver Saldo. El usuario dará su NIP y el cajero desplegara en pantalla el nombre del cliente y saldo actual

REQUISITOS PARA LA ELABORACION DEL PROYECTO FINAL.


1. Para la solución de este problema utilizar funciones y/o procedimientos con parámetros por valor y/o
referencia según sea el caso.
2. Dar de alta 100 clientes como mínimo
3. Para almacenar los datos de los clientes utilizar archivos binarios
4. Entregar disco, con datos del alumno, materia y nombre del programa. Este disco debe contener
únicamente el programa fuente .C y el ejecutable .EXE.
5. Entregar listado del programa fuente con datos personales
6. Entregar un manual de usuario.
7. No se permite que se repitan dos clientes con los mismos datos
8. Comprobar que cuando se busque un cliente que no existe, mostrar un mensaje de error.

Menú principal
# $k
TAREA1

INSTITUTO TECNOLOGICO DE QUERETARO


DEPTO. DE SISTEMAS Y COMPUTACION
PROGRAMACION I (Lenguaje de Programación C)

PROFA. LILIANA MICHELLE CHAVEZ SANTANDER


TEMA A EVALUAR: UNIDAD 2. INSTRUCCIONES FUNDAMENTALES. 2.1 Instrucciones de Entrada y
Salida, 2.2 Funciones de tipo cadena. Y UNIDAD 3. ESTRUCTURAS DE CONTROL (decisión if/else)

Resolver los siguientes problemas.

1. Hacer un programa que lea 3 números enteros y que regrese la media aritmética. Por ejemplo:
Dar primer numero: 4
Dar segundo numero: 3
Dar tercer numero: 7
Resultado: 14/3 = 4.666

2. Escribir tu nombre en la pantalla con puros asteriscos. Por ejemplo: ANA

* * * *
** * * **
* * ** * * *
**** * * * ****
* * * ** * *
* * * * * *

3. Hacer un programa que lea 3 caracteres y que lea una cadena y que regrese como resultado una cadena,
uniendo los 3 caracteres y la cadena. También que imprima su valor numérico ASCII del primer carácter de
la cadena resultante. Por ejemplo:

Dar primer carácter: A


Dar segundo carácter: X
Dar cadena: Ratón
Resultado: AXRaton
A=65

4. Hacer un programa que lea 1 numero y que regrese el cubo de este. Por ejemplo:

Dar numero: 2
Resultado 2^3= 8

5. Hacer un programa que lea un numero real y que regrese la parte fraccionaria. Por ejemplo:

Dar numero real: 345.65


Resultado: 0.65

#tarea1
$tarea1
kTAREA1
6. Hacer un programa que lea un numero real y que regrese el numero pero redondeado. Por ejemplo:

Dar numero real: 345.65


Resultado: 346

7. El siguiente programa mal.c tiene errores. Teclee este programa, compílelo, corríjalo y córralo.

/* mal.c
main
{
int suma, exam1, exam2;
clrscr[ ];
printf("Escriba dos calificaciones: ");
scanf("%f",exam1);
scanf("%d",ejam2);
total:= exam1 + exam2;
print('Total =%d ',TOTAL);
getch(),
}

8. Escriba un programa que pida un numero de 4 cifras y escriba el numero en orden inverso. Por ejemplo:

Dar un numero: 1234


Resultado: 4321

9. Escriba un programa que convierta kilobytes a bytes. Por ejemplo:

Dar kilobytes: 80
Resultado: 80 kilobytes es equivalente a 81920

10. Hacer un programa que lea 4 parejas de coordenadas. Analizar si los primeros tres puntos puede formar
un triángulo (cualquiera). Y después indicar si el cuarto punto esta dentro o fuera del triángulo. Por
ejemplo:

Dar x1: 2 Dar y1: 2


Dar x2: 2 Dar y2: 10
Dar x3: 15 Dar y3: 10

Dar x1: 5 Dar y1: 8

Resultado: El cuarto punto se encuentra dentro del triángulo.

Dar x1: 2 Dar y1: 2


Dar x2: 2 Dar y2: 10
Dar x3: 15 Dar y3: 10

Dar x1: 50 Dar y1: 35

Resultado: El cuarto punto se encuentra dentro del triángulo.

Dar x1: 6 Dar y1: 12


Dar x2: 11 Dar y2: 12
Dar x3: 15 Dar y3: 12

Resultado: No es triángulo.
REQUISITOS PARA LA ELABORACION DE LA TAREA1.
1. Entregar disco, con datos del alumno, materia y nombre del programa. Este disco debe contener
únicamente los programas fuente .C y ejecutables .EXE.
2. Entregar listado de los programas fuente con datos personales
3. Los programas son individuales (no se permite el mismo programa para varios alumnos).
4. La revisión de los programas será en el Laboratorio (maestro - alumno)

Menú principal
#$k
TAREA2
INSTITUTO TECNOLOGICO DE QUERETARO
DEPTO. DE SISTEMAS Y COMPUTACION
PROGRAMACION I (Lenguaje de Programación C)

PROFA. LILIANA MICHELLE CHAVEZ SANTANDER


TEMA A EVALUAR: UNIDAD 4. MODULOS

Resolver los siguientes problemas.

PROBLEMA # 1. JUEGO DE LOS DIEZ CERILLOS

Las reglas del juego de los diez cerillos son las siguientes:

A) Al inicio hay diez cerillos


B) Un jugador puede retirar uno o dos cerillos del grupo en cada turno
C) El perdedor es a quien le toca retirar el ultimo cerillo

El siguiente es un juego de muestra:

El jugador I quita 2 cerillos, dejando 8


El jugador II quita 2 cerillos, dejando 6
El jugador I quita 1 cerillos, dejando 5
El jugador II quita 2 cerillos, dejando 3
El jugador I quita 2 cerillos, dejando 1
El jugador II quita 1 cerillos, dejando 0

El ganador es el jugador I

El programa debe permitir jugador vs jugador, jugador vs computadora, para indicar quien inicia el juego
debe ser al azar a través de números aleatorios.

REQUISITOS PARA LA ELABORACION DE LA TAREA2.


1. Entregar disco, con datos del alumno, materia y nombre del programa. Este disco debe contener
únicamente los programas fuente .C y ejecutables .EXE.
2. Entregar listado de los programas fuente con datos personales
3. Los programas son por equipo, máximo de 3 alumnos (no se permite el mismo programa para varios
equipos).
4. La revisión de los programas será en el Laboratorio (maestro - alumno)
5. Utilizar funciones y/o procedimientos para resolver este problema

Menú principal

#tarea2
$tarea2
ktarea2
PROBLEMA # 2. EDITOR DE TEXTO.

Hacer un programa que permita escribir texto con las opciones que a continuación se describen.

AYUDA. Al oprimir la tecla F1 mostrara información en pantalla como utilizar el editor.


BORRAR PANTALLA. Al oprimir F2 limpiara toda la información que se encuentra en la pantalla.

RESTAURAR ESCRITURA. Al oprimir F3 mostrara de nuevo la información que se borro (F2) antes.

PINTAR. Al oprimir la tecla P inicia a pintar texto en el editor.

BORRAR. Al oprimir la tecla B deja de pintar texto en el editor.

La coordenada X representa la columna donde se encuentra actualmente el cursor y Y representa el renglón.


Por ejemplo las coordenadas X: 13 y Y:2 es donde actualmente se encuentra el guión bajo.

Las flechas representan que para mover el cursor se debe utilizar las teclas de movimiento de cursor arriba,
abajo, izquierda y derecha.

El signo mas + sirve para aumentar en 1 los pasos del cursor. Por ejemplo si se oprime + el movimiento del
cursor ira de 2 en 2, así sucesivamente.

El signo menos - sirve para disminuir en 1 los pasos del cursor. Por ejemplo si movimiento del cursor se esta
de 4 en 4, y se oprime - entonces ahora se moverá el cursor de 3 en 3. Y así respectivamente.

También se debe permitir borra un carácter de derecha a izquierda, oprimiendo la tecla Back Space.

Al oprimir la tecla Inicio el cursor se debe mover al principio de la línea donde actualmente se encuentre el
cursor.

Al oprimir la tecla Fin el cursor se debe mover al final de la línea donde actualmente se encuentre el cursor.

{bml edit.bmp}

REQUISITOS PARA LA ELABORACION DE LA TAREA2.


1. Entregar disco, con datos del alumno, materia y nombre del programa. Este disco debe contener
únicamente los programas fuente .C y ejecutables .EXE.
2. Entregar listado de los programas fuente con datos personales
3. Los programas son por equipo, máximo de 3 alumnos (no se permite el mismo programa para varios
equipos).
4. La revisión de los programas será en el Laboratorio (maestro - alumno)
5. Utilizar funciones y/o procedimientos para resolver este problema
6. Utilizar listas simplemente ligadas para la edición de texto.

Menú principal
#
BIBLIOGRAFIA BASICA Y COMPLEMENTARIA
1. Turbo Pascal con aplicaciones 3.0, 4.0 y 5.0 2. Pascal
Autor: Hennefeld Julien Autor: Konvalina
Editorial: Grupo Editorial Iberoamérica Editorial: Mc Graw Hill

3. Visualización Graphics in C 4. Power Graphics using Turbo C


Autor: Lee Adams Autor: Keith Wiskamp, Loren Heiny, Namir Sammas
Editorial: Mc Graw Hill Editorial: Wiley

5. Programming Graphics Files in C and C++


Editorial: Wiley

6. Optimizing MicroSoft C Libraries


Autor: Len Dorfman
Editorial: Mc Graw Hill

7. MicroSoft Ms Dos, Guia de referencia para el usuario

8. ** Programación en Turbo C **
Autor: Herbert Schildt
Editorial: Mc Graw Hill

9., Object Oriented Programming With Turbo C++


Autor: Keith Weiskamp, Loren Heiny, Bryan Flamig
Editorial: Wiley

Nota: ** Bibliografía básica


Menú principal

# bibliografia

También podría gustarte