CICLO 2014-1
PROGRAMACION DIGITAL
LABORATORIO N 1
CICLO 2014-1
WILFREDO CUPE ROMN
CICLO 2014-1
CICLO 2014-1
Laboratorio N1
Objetivos
1. Utilizar el PSeInt para la creacin y ejecucin
de Diagramas de Flujo.
2. Conocer las facilidades del PSeInt para la
Ejecucin Paso a Paso, Prueba de Escritorio y
Exportacin a C.
3. Utilizar el DEV C++ para la Depuracin de la
codificacin en C.
CICLO 2014-1
HERRAMIENTAS
AREA DE
TRABAJO
LINEA DE
ESTADO
COMANDOS
AREA DE
TRABAJO
COMANDOS
CICLO 2014-1
CICLO 2014-1
Operadores y Funciones
CICLO 2014-1
CICLO 2014-1
CICLO 2014-1
CICLO 2014-1
10
CICLO 2014-1
11
CICLO 2014-1
12
CICLO 2014-1
13
Prueba de Escritorio
Permite configurar una tabla con un conjunto de
variables o expresiones para que sean evaluadas
en cada paso de la ejecucin paso a paso y
registradas en dicha tabla automticamente para
analizar luego la evolucin de los datos y el
diagrama de flujo.
Prueba de Escritorio
CICLO 2014-1
14
Exportacin a C
CICLO 2014-1
15
AREA DE
TRABAJO
LINEA DE
ESTADO
CICLO 2014-1
16
CICLO 2014-1
17
CICLO 2014-1
18
Compilar
Compilar
Compila
Compila el
el archivo
archivo actual
actual
Ejecutar
Ejecutar
Parmetros
Parmetros
Compilar
Compilar yy Ejecutar
Ejecutar
Reconstruir
Reconstruir Todo
Todo
Revisar
Revisar Sintxis
Sintxis
Limpiar
Limpiar Resultados
Resultados
Anlisis
Anlisis de
de Perfil
Perfil
Reiniciar
Reiniciar ejecucin
ejecucin del
del programa
programa
CICLO 2014-1
19
Lenguaje de Programacin C
Un programa est constituido por un conjunto de
instrucciones que se ejecutan de modo
secuencial.
El ANSI C es un lenguaje de alto nivel, es decir
est mucho ms cerca del lenguaje natural.
El C++ puede ser considerado como una
extensin del C.
CICLO 2014-1
20
Ejemplo de Programa 1
Comentario
/*Mayor de tres numeros*/
#include<stdio.h>
Directiva de Preprocesador.
Se incluye en el programa la librera de
main() {
Funcin Principal
funciones estndar de Entrada/Salida
int a,b,c,mayor,suma;
printf("Ingrese 3 datos\n");
scanf("%d",&a); scanf("%d",&b); scanf("%d",&c);
if (a>b)
mayor=a;
else
mayor=b;
if (c>mayor)
mayor=c;
printf("El mayor valor: %d\n",mayor);
suma=a+b+c;
printf("suma: %d\n",suma);
}
Compilacin
CICLO 2014-1
21
(Execute Compile)
Archivo Fuente
LAB1.C
COMPILACION
Archivo Objeto
Compilacin
CICLO 2014-1
22
(Execute Compile)
Archivo
Ejecutable
LAB1.EXE
Compilacin
CICLO 2014-1
23
(Execute Compile)
Ejecucin
CICLO 2014-1
24
(Execute Run)
Errores
Errores de Sintxis
Errores de Ejecucin
Errores Lgicos
CICLO 2014-1
25
CICLO 2014-1
26
Errores de Sintxis
Los errores de sintaxis, o sintcticos, ocurren
cuando el programador escribe cdigo que no va
de acuerdo a las reglas de escritura del lenguaje
de programacin. Por ejemplo, la instruccin:
prrintf( "\n Hola mundo " );
La sentencia correcta debe ser:
printf( "\n Hola mundo " );
Los errores de sintaxis se detectan en el proceso
de compilacin.
CICLO 2014-1
27
Errores de Ejecucin
Se producen cuando la computadora no puede
ejecutar alguna instruccin de forma correcta.
Por ejemplo, la instruccin:
c = 15 / 0; /*No tiene errores de sintaxis*/
Producir un error de ejecucin, ya que,
matemticamente, no se puede dividir entre
cero.
CICLO 2014-1
28
Errores Lgicos
Ocurren a causa de una lgica equivocada, los
resultados obtenidos no son los esperados.
Por ejemplo, si en vez de la instruccin:
a = b + c;
el alumno hubiera escrito:
a = b * c;
Se producir un error lgico, para descubrirlo se
deber analizar los resultados del programa.
CICLO 2014-1
29
PROGRAMACION DIGITAL
LABORATORIO N 2
CICLO 2014-1
WILFREDO CUPE ROMN
CICLO 2014-1
Laboratorio N2
Objetivos
1. Crear un DF con PseInt y exportarlo a C
2. Depurar el programa con el DEV C++
3. Conocer los Elementos del Programa C:
30
CICLO 2014-1
31
Salida
Tangentes
Secantes
No hay contacto
CICLO 2014-1
32
Exportacin a C
CICLO 2014-1
33
CICLO 2014-1
34
CICLO 2014-1
35
Tipos de Datos
Tipo
Descripcin Tamao
Rango
char
Carcter
1 byte
-128
+127
int
Entero
2 bytes
-215
+215 1
long
Largo
4 bytes
-231
+231 1
float
Punto
flotante
a +3.40 1038
a +1.18 10-38
a +1.70 10308
a +2.70 10-307
double Doble
precisin
CICLO 2014-1
36
Identificadores
Es el nombre con el que se hace referencia a una
variable o funcin.
Reglas:
Letras a..z, A..Z y digitos 0..9
Carcter subrayado (_)
El primer carcter debe ser una letra o un (_), no
debe haber espacios ni operadores.
Se hace distincin entre maysculas y minsculas
El ANSI C permite definir al identificador hasta 31
caracteres de longitud
CICLO 2014-1
37
Constantes
Las Constantes son valores que no pueden ser
modificados.
Constante
Descripcin
Numrica Nmero entero o de punto flotante.
Ejm: 15, 16.4, -21
Carcter
CICLO 2014-1
38
Constantes
Constante
Descripcin
Cadena
Conjunto de caracteres alfanumricos
encerrados entre comillas dobles.
Ejm: CB412, Hola Mundo
Simblica
CICLO 2014-1
39
Variables
Las Variables cambian de valor durante la
ejecucin del programa.
Declaracin de Variables
Una variable se declara precediendo su
identificador con el tipo de datos de la variable.
tipo identificador = valor inicial ;
opcional
CICLO 2014-1
40
Operadores
Permiten realizar operaciones en el programa.
+
*
/
%
Aritmticos
Suma
Resta
Multiplicacin
Divisin
Resto divisin entera
Incrementales
++ Incremento en 1
-- Decremento en 1
Lgicos
&& Y
|| O
! Negacin
()
[]
.
Primarios
Llamada funcin
Indice de arreglo
Miembro estructura
CICLO 2014-1
41
Operadores
Permiten realizar operaciones en el programa.
De Asignacin
= Asignacin simple
+= Asignacin suma
-= Asignacin resta
*= Asignacin
multiplicacin
/= Asignacin divisin
%= Asignacin resto
==
<
>
<=
>=
!=
Relacionales
Igual que
Menor que
Mayor que
Menor o igual que
Mayor o igual que
No igual que
CICLO 2014-1
42
CICLO 2014-1
43
CICLO 2014-1
44
CICLO 2014-1
45
Secciones de un Programa C
#include<stdio.h>
Directivas del Preprocesador
#define PI 3.14159
int main()
Inicio Funcin Principal
{
int a, b;
Declaracin, Inicializacin
de Variables
scanf(%d, &a);
Entrada de Datos
b = 5*a*a 4*a + 3;
Expresiones y Asignacin
printf(b = %d\n,b);
Salida de Resultados
}
Fin Funcin Principal
CICLO 2014-1
46
Especificadores de Formato
Especificadores Adicionales
Secuencias de Escape
Texto
Constante
Variable
CICLO 2014-1
47
Especificadores de Formato
Especificadores de
Formato
Tipo de la expresin
%c
%d
%ld
%f
%lf
%s
Caracter
Entero
Entero largo
Punto Flotante
Doble Precisin
Cadena de Caracteres
CICLO 2014-1
48
Especificadores de Formato
Especificadores
Adicionales
Efecto
Ancho
.Precisin
+
0
Justifica a la derecha
Redondea al n de decimales
Justifica a la izquierda
Muestra el signo del valor
Llena con ceros segn el ancho
CICLO 2014-1
Secuencias de Escape
Secuencia
de Escape
\n
\t
\r
\
\
\\
Efecto
Salto de lnea
Tabulador
Retorno de carro
Comilla simple
Doble comilla
Diagonal
49
CICLO 2014-1
50
Especificadores de Formato
Secuencias de Escape
Texto
CICLO 2014-1
51
Decisiones: Sentencia if
Permite ejecutar o no una sentencia simple o
compuesta segn se cumpla o no una
determinada condicin.
if(condicin){
sentencia;
}
Las llaves son opcionales
cuando hay una sola sentencia.
condicin
V
sentencia
CICLO 2014-1
52
Sentencia if
Ejm:
nota10
if (nota>=10)
printf(Aprobado); V
Esc
Aprobado
53
CICLO 2014-1
if(condicin) { V
sent_V;
}
sent_V
else {
sent_F;
}
condicin
sent_F
Sentencia if else
Ejm:
Esc
Aprobado
CICLO 2014-1
~
F
nota10
Esc
Desaprobado
~
if (nota>=10)
printf(Aprobado);
else
printf(Desaprobado);
54
CICLO 2014-1
55
[else
sentn;]
~
cond1
V
sent2
cond2
V
sent3
cond3
sentn
CICLO 2014-1
56
10nota 20
V
Esc
Desaprobado
10> nota6
V
Esc
Reprobado
6> nota 0
F
Esc
Nota no Vlida
CICLO 2014-1
57
CICLO 2014-1
58
PROGRAMACION DIGITAL
LABORATORIO N 3
CICLO 2014-1
WILFREDO CUPE ROMN
CICLO 2014-1
59
Operadores
Son signos especiales que indican determinadas
operaciones a realizar con las variables y/o
constantes.
Aritmticos
De asignacin
Incrementales
Relacionales
Lgicos
Primarios
CICLO 2014-1
60
Operadores
+
*
/
%
Aritmticos
Suma
Resta
Multiplicacin
Divisin
Resto divisin entera
Incrementales
++ Incremento en 1
-- Decremento en 1
Lgicos
&& Y
|| O
! Negacin
()
[]
.
Primarios
Llamada funcin
Indice de arreglo
Miembro estructura
CICLO 2014-1
61
Operadores
De Asignacin
= Asignacin simple
+= Asignacin suma
-= Asignacin resta
*= Asignacin
multiplicacin
/= Asignacin divisin
%= Asignacin resto
==
<
>
<=
>=
!=
Relacionales
Igual que
Menor que
Mayor que
Menor o igual que
Mayor o igual que
No igual que
Ejemplo4.-
Inicio
Leer
x, y
xx+5
yy+1
z resto entero(x/y)
Escribir
x, y, z
Fin
CICLO 2014-1
62
CICLO 2014-1
63
Ejemplo4.-
CICLO 2014-1
64
CICLO 2014-1
65
CICLO 2014-1
66
Sentencia if
Permite ejecutar o no una sentencia simple o
compuesta segn se cumpla o no una
determinada condicin.
if(expresion)
sentencia;
expresin
V
sentencia
La sentencia compuesta
forma un bloque { }
CICLO 2014-1
67
Sentencia if
Ejm:
nota10
if (nota>=10)
printf(Aprobado); V
Esc
Aprobado
68
CICLO 2014-1
Sentencia if else
Permite realizar una bifurcacin, ejecutando una
parte u otra del programa, segn se cumpla o no
una determinada condicin.
V
if(expresion)
sent1;
else
sent1
sent2;
expresin
sent2
CICLO 2014-1
Sentencia if else
Ejm:
V
Esc
Aprobado
nota10
Esc
Desaprobado
if (nota>=10)
~
printf(Aprobado);
else
printf(Desaprobado);
69
CICLO 2014-1
70
CICLO 2014-1
71
[else
sentn;]
~
expr1
V
sent2
expr2
V
sent3
expr3
sentn
CICLO 2014-1
72
10nota 20
V
Esc
Desaprobado
10> nota6
V
Esc
Reprobado
6> nota 0
F
Esc
Nota no Vlida
CICLO 2014-1
73
CICLO 2014-1
74
Sentencia switch
Alternativa mltiple, permite seleccionar, por
medio de una expresin, un bloque de sentencias
a ejecutar entre n posibles.
El resultado de evaluar la expresin debe ser un
valor perteneciente a un tipo de dato finito y
ordenado, es decir, entero, lgico, carcter,
enumerado o subrango.
CICLO 2014-1
75
Sentencia switch
switch(expr) {
case cte1:
sent1;
break;
cte1
case cte2:
sent2;
break; sent1
case cten:
sentn;
break;
[default:
sent;]
}
~
cte2
expr
cten
default
sent2
sentn
sent
CICLO 2014-1
76
Sentencia switch
~
3
lados
default
Esc
Esc
Esc
Esc
Tringulo
Cuadrado
Pentgono
Otro
Sentencia switch
Ejemplo:
switch(lados) {
case 3:
printf(Tringulo);
break;
case 4:
printf(Cuadrado);
break;
case 5:
printf(Pentgono);
break;
default:
printf(Otro);
}
CICLO 2014-1
77
CICLO 2014-1
78
Ejercicios
Dados tres nmeros, determinar el mayor valor
de los tres.
Escribir un programa que presente en pantalla un
men de opciones:
Opciones
1.- Tringulo
2.- Cuadrado
3.- Pentgono
Ingresar opcin:
Ingresar la opcin y mostrar un mensaje con la
CICLO 2014-1
79
Ejercicios
Ingresar la opcin y mostrar un mensaje con la
CICLO 2014-1
80
Laboratorio N 3
Funciones
Matemticas
Funciones Trigonomtricas
Potencias
Logaritmos
Raz cuadrada
Valor Absoluto
Redondeo de decimales
Funciones Hiperblicas
CICLO 2014-1
81
Funciones Matemticas
El ANSI C tiene una biblioteca estndar de
funciones matemticas.
Se debe incluir al comienzo del programa el
archivo math.h con la sentencia:
#include<math.h>
CICLO 2014-1
82
Funciones Trigonomtricas
Funcin
Descripcin
double sin(double x)
Seno(x), x en radianes
double cos(double x)
Coseno(x)
double tan(double x)
Tangente(x)
double asin(double x)
arco tangente(x)
Argumento o parmetro
CICLO 2014-1
83
Potencias y Logaritmos
Funcin
Descripcin
double pow(double x,
double y)
double exp(double x)
Devuelve el valor de xy
double log(double x)
logaritmo neperiano de x
Devuelve el valor de ex
Argumento o parmetro
CICLO 2014-1
84
Descripcin
Argumento o parmetro
CICLO 2014-1
85
Funciones hiperblicas
Funcin
Descripcin
double sinh(double x)
seno hiperblico(x), x en
radianes
double cosh(double x) coseno hiperblico(x)
double tanh(double x)
Tipo del valor devuelto
tangente hiperblica(x)
Argumento o parmetro
CICLO 2014-1
86
Ejercicio1
Dados dos puntos A(xa, ya) y B(xb, yb), calcular la
longitud de la lnea AB.
B(xb, yb)
longitud
A(xa, ya)
xa xb 2 ya yb 2
CICLO 2014-1
Inicio
Leer
xa, ya, xb, yb
longitud
xa xb 2 ya yb 2
Escribir
longitud
Fin
87
CICLO 2014-1
88
CICLO 2014-1
89
CICLO 2014-1
90
Ejercicio2
Dados la hipotenusa y un cateto de un tringulo
rectngulo, calcular el ngulo que forman y el otro
cateto.
c=?
a
b
ang=?
CICLO 2014-1
91
Inicio
Leer
a, b
c a2 b2
CICLO 2014-1
92
CICLO 2014-1
93
94
CICLO 2014-1
Evaluar la funcin:
f ( x) seno( x) e
cos( x )
CICLO 2014-1
Inicio
Leer
x
95
CICLO 2014-1
96
/*Evalua Formula*/
#include<stdio.h>
#include<math.h>
int main()
{
float x;
double f;
printf("Evalua Formula\n");
printf("x: ");
scanf("%f",&x);
f=fabs(sin(x)-exp(cos(x)))+floor(pow(x,2));
printf("f(%.3f) = %.4lf",x,f);
system("pause");
CICLO 2014-1
97
CICLO 2014-1
98
Laboratorio N 4
Sentencias
Condicionales de
Control de Flujo
Sentencia if
Sentencia if else
Sentencia if else mltiple
Sentencia switch
CICLO 2014-1
99
CICLO 2014-1
100
Sentencia if
Permite ejecutar o no una sentencia simple o
compuesta segn se cumpla o no una
determinada condicin.
if(expresion)
sentencia;
expresin
V
sentencia
La sentencia compuesta
forma un bloque { }
CICLO 2014-1
101
Sentencia if
Ejm:
nota10
if (nota>=10)
printf(Aprobado); V
Esc
Aprobado
102
CICLO 2014-1
Sentencia if else
Permite realizar una bifurcacin, ejecutando una
parte u otra del programa, segn se cumpla o no
una determinada condicin.
V
if(expresion)
sent1;
else
sent1
sent2;
expresin
sent2
CICLO 2014-1
Sentencia if else
Ejm:
V
Esc
Aprobado
nota10
Esc
Desaprobado
if (nota>=10)
~
printf(Aprobado);
else
printf(Desaprobado);
103
CICLO 2014-1
104
CICLO 2014-1
105
[else
sentn;]
~
expr1
V
sent2
expr2
V
sent3
expr3
sentn
CICLO 2014-1
106
10nota 20
V
Esc
Desaprobado
10> nota6
V
Esc
Reprobado
6> nota 0
F
Esc
Nota no Vlida
CICLO 2014-1
107
CICLO 2014-1
108
Sentencia switch
Alternativa mltiple, permite seleccionar, por
medio de una expresin, un bloque de sentencias
a ejecutar entre n posibles.
El resultado de evaluar la expresin debe ser un
valor perteneciente a un tipo de dato finito y
ordenado, es decir, entero, lgico, carcter,
enumerado o subrango.
CICLO 2014-1
109
Sentencia switch
switch(expr) {
case cte1:
sent1;
break;
cte1
case cte2:
sent2;
break; sent1
case cten:
sentn;
break;
[default:
sent;]
}
~
cte2
expr
cten
default
sent2
sentn
sent
CICLO 2014-1
110
Sentencia switch
~
3
lados
default
Esc
Esc
Esc
Esc
Tringulo
Cuadrado
Pentgono
Otro
Sentencia switch
Ejemplo:
switch(lados) {
case 3:
printf(Tringulo);
break;
case 4:
printf(Cuadrado);
break;
case 5:
printf(Pentgono);
break;
default:
printf(Otro);
}
CICLO 2014-1
111
CICLO 2014-1
112
Ejercicios
Dados tres nmeros, determinar el mayor valor
de los tres.
Escribir un programa que presente en pantalla un
men de opciones:
Opciones
1.- Tringulo
2.- Cuadrado
3.- Pentgono
Ingresar opcin:
Ingresar la opcin y mostrar un mensaje con la
CICLO 2014-1
113
Ejercicios
Ingresar la opcin y mostrar un mensaje con la
CICLO 2014-1
114
PROGRAMACION DIGITAL
GUIA DE LABORATORIO
CICLO 2013-2
Laboratorio N 5
CICLO 2014-1
115
CICLO 2014-1
116
CICLO 2014-1
117
Sentencia while
Permite ejecutar repetidamente una sentencia o
bloque de sentencias, mientras se cumpla una
determinada condicin.
expresin
while (expresion)
sentencia;
V
sentencia
CICLO 2014-1
118
Ejemplo
Escribir un programa que permita ingresar
sucesivamente notas por teclado, verificando que
sean notas vlidas.
El programa terminar cuando se ingrese una
nota no vlida.
Dar como respuesta el promedio de las notas
ingresadas con dos decimales.
CICLO 2014-1
119
Inicio
suma 0
conta 0
prom suma/conta
Leer
nota
Escribir
prom
0 nota 20
V
suma suma + nota
conta conta + 1
Leer
nota
Fin
CICLO 2014-1
120
Ejemplo
Calcular el MCD de dos nmeros utilizando el
algoritmo de Euclides.
Por ejemplo para 2366 y 273:
El MCD es 91
CICLO 2014-1
121
Sentencia do while
Anloga a while, con la diferencia de que la
evaluacin de la condicin se realiza al final del
bucle, despus de haber ejecutado al menos una
vez las sentencias.
~
do
sentencia;
while (expresion);
sentencia
V
expresin
F
CICLO 2014-1
122
Ejemplo
Realizar un programa que encuentre el valor de e
con un error menor a 10-4, dado que el valor del
exponencial para un valor de x se puede expresar
mediante la serie:
ex=1+x+x2/2!+x3/3!+..
CICLO 2014-1
Inicio
serie 0
error 1
conta 0
Leer
x
serie serie + error
conta conta + 1
error error * x / conta
V
Escribir
serie
Fin
123
CICLO 2014-1
124
Sentencia for
Permite repetir una sentencia o bloque de
sentencias, mientras se cumple una determinada
condicin.
Sentencia for
for(inicial; expr; increm)
sentencia;
~
Inicial; expr; increm
sentencia
CICLO 2014-1
125
Ejemplo
CICLO 2014-1
126
CICLO 2014-1
127
Ejemplo
Dados n nmeros ingresados por teclado, escribir
un programa que permita determinar el mayor y el
menor de los n nmeros.
CICLO 2014-1
128
Inicio
Leer
n,num
menor num
mayor num
V
mayor num
i 2..n
Leer
num
num < menor
V
menor num
Escribir
mayor,menor
Fin
Laboratorio N 6
CICLO 2014-1
129
CICLO 2014-1
130
Variable Subindicada
Es una variable que almacena un conjunto de valores del
mismo tipo de dato.
Cada valor del conjunto se identifica con un subndice
entero (0, 1, 2,).
Tambin se le denomina arreglo.
Tipos:
Arreglo Lineal: un solo subndice (vector)*
Arreglo Bidimensional: dos subndices (matriz)
Arreglo Multidimensional: tres o mas subndices
* Una cadena de caracteres equivale a un arreglo lineal de caracteres.
CICLO 2014-1
131
Arreglo Lineal
Tiene un solo subndice.
Declaracin: tipo nombre_arreglo[N elementos];
Ejemplo:
int x[50];
x[0]
x[1]
x[2]
subndice
50 elementos
x[49]
CICLO 2014-1
132
Arreglo Lineal
Lectura y Escritura:
scanf(formato,&elemento[i-simo]);
printf(formato,elemento[i-simo]);
Ejemplo:
scanf(%d, &x[i]);
~
Leer
xi
~
~
printf(%d, x[i]);
Escribir
xi
CICLO 2014-1
133
Ejercicio1
Dado un arreglo de n elementos, determinar la media
y la desviacin estndar.
Entradas
Salidas
N
xi (i 1..N)
media
desv
Diagrama PSeInt
CICLO 2014-1
134
CICLO 2014-1
135
Codificacin C
/*Obtiene la media y desviacion de n nmeros x*/
#include<stdio.h>
#include<math.h>
int main()
{ int n,i; double s=0,x[100],media,d=0,desv;
printf("Ingrese n:" ); scanf("%d",&n);
for (i=1;i<=n;i++) {
printf("x%d: ",i); scanf("%lf",&x[i]);
s=s+x[i];
}
media=s/n;
for (i=1;i<=n;i++) {
d=d+(x[i]-media)*(x[i]-media);
}
desv=sqrt(d/(n-1));
printf("Media = %8.2lf\nDesviacion = %8.2lf\n",media,desv);
system("pause");
}
CICLO 2014-1
Ejecucin
Ingrese n:6
x1: 4
x2: 1
x3: 11
x4: 13
x5: 2
x6: 7
Media =
6.33
Desviacion =
4.89
Presione una tecla para continuar . . .
136
CICLO 2014-1
137
Ejercicio2
Dado un arreglo de N elementos, determinar cual es
el valor que ms veces se repite y cuntas veces se
presenta.
ones
ci
compara
x1
x2
x3
x4
comparacion
es
Entradas
Salidas
N
xi (i 1..N)
moda
vecesmoda
xN
Diagrama PSeInt
CICLO 2014-1
138
CICLO 2014-1
139
Codificacin C
/*Obtiene la(s) moda(s) de n nmeros enteros x*/
#include<stdio.h>
int main()
{ int i,j,k=0,n,x[100],moda[100],vecesmoda=1,veces;
printf("Ingrese n:" ); scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("x%d: ",i); scanf("%d",&x[i]);
}
for(i=1;i<=n;i++)
{
veces=1;
for(j=i+1;j<=n;j++)
if(x[i]==x[j]) veces++;
if(veces>vecesmoda) {
k=1;
vecesmoda=veces;
CICLO 2014-1
moda[k]=x[i];
}
else
if(veces==vecesmoda) {
k++;
moda[k]=x[i];
}
}
if(k*vecesmoda<n)
for(i=1;i<=k;i++)
printf("La moda %d se repite %d
veces\n",moda[i], vecesmoda);
else printf("No hay moda\n");
system("pause");
}
140
Ejecucin
Ingrese n:13
x1: 9
x2: 8
x3: 7
x4: 1
x5: 4
x6: 9
x7: 5
x8: 4
x9: 1
x10: 5
x11: 9
x12: 1
x13: 5
La moda 9 se repite 3 veces
La moda 1 se repite 3 veces
La moda 5 se repite 3 veces
Presione una tecla para continuar . . .
CICLO 2014-1
141
CICLO 2014-1
142
Ejercicio3
A2
An 2
...
...
Ak
A( m 1) n 1
A( m 1) n 2
k#col+(#fila-1)*n
...
...
An
A2 n
... ...
... Amn
m*n
B1
Bn 1
B2
Bn 2
...
...
B( m 1) n 1
B( m 1) n 2
Entradas
Salidas
m, n
Ai (i 1..m*n)
Bi (i 1..m*n)
Ci (i 1..m*n)
... Bn
... B2 n
...
...
Bk
... Bmn
m*n
k#col+(#fila-1)*n
Diagrama PSeInt
CICLO 2014-1
143
CICLO 2014-1
144
Codificacin C
/*suma de matrices A(m*n) y B(m*n) usando
arreglos lineales*/
#include<stdio.h>
int main()
{
int i,j,k,m,n;
float A[100],B[100],C[100];
printf("Nro filas: "); scanf("%d",&m);
printf("Nro columnas: "); scanf("%d",&n);
printf("A:\n");
for(i=1;i<=m*n;i++) scanf("%f",&A[i]);
printf("B:\n");
for(i=1;i<=m*n;i++) scanf("%f",&B[i]);
printf("C:\n");
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
k=j+(i-1)*n;
C[k]=A[k]+B[k];
printf("%8.1f",C[k]);
}
printf("\n");
}
system("pause");
}
CICLO 2014-1
145
Ejecucin
Nro
Nro
A:
9 3
8 6
5 2
B:
5 7
9 6
4 9
C:
filas: 3
columnas: 4
8 1
4 0
3 4
2 3
1 1
3 7
14.0
10.0
10.0
4.0
17.0
12.0
5.0
1.0
9.0
11.0
6.0
11.0
Presione una tecla para continuar . . .
CICLO 2014-1
146
CICLO 2014-1
147
Arreglo Bidimensional
Tiene dos subndices.
Declaracin:
tipo nombre_matriz[Nfilas][Ncolumnas];
Ejemplo:
col 0
int x[20][30];
col 1
col 2
30 columnas
col 29
x[0][29]
x[1][29]
x[19][29]
20
filas
CICLO 2014-1
148
Arreglo Bidimensional
Lectura y Escritura:
scanf("formato",&matriz[fila-sima][col-sima]);
printf("formato",matriz[fila-sima][col-sima]);
Ejemplo:
scanf("%d", &x[i][j]);
~
Leer
xi,j
~
~
printf("%d", x[i][j]);
Escribir
xi,j
Laboratorio N 7
CICLO 2014-1
149
CICLO 2014-1
150
Archivo
Empleado para almacenar informacin de manera
permanente.
Ejemplo: LAB7.C, DATOS.TXT, PLANO.DWG
Tipos:
Texto : Conjunto de caracteres ASCII
Cada grupo de 8bits corresponde a 1
byte o 1 carcter.
Binario : Conjunto de bits de longitud variable.
Tabla ASCII
Fuente: http://www.elcodigoascii.com.ar/
CICLO 2014-1
151
CICLO 2014-1
152
Programa
Pasos a seguir:
1. Declarar variable FILE
2. Abrir el archivo
3. Leer y/o Escribir
4. Cerrar el archivo
Archivo de
Resultados
SALIDA
CICLO 2014-1
153
Buffer
Archivo
CICLO 2014-1
154
2. Abrir el Archivo
var_archi=fopen(archivo, modo);
Donde:
fopen
archivo
Ejm:
En diagrama de flujo:
DATOS.TXT
var_archi fopen(archivo, modo)
SALIDA.TXT
E:\\DATOS.TXT
E:\\CARPETA\\SALIDA.TXT
CICLO 2014-1
155
2. Abrir el Archivo
var_archi=fopen(archivo, modo);
Donde:
modo
Modo Apertura
r
w
a
r+
w+
a+
Descripcin
Abre un Archivo para lectura (ENTRADA)
Crea un Archivo para escritura (SALIDA)
Abre un Archivo para aadir al final (SALIDA)
Abre un Archivo para lectura/escritura
Crea un Archivo para lectura/escritura
Abre o crea un Archivo para aadir al final
CICLO 2014-1
156
~
Leer (var_archi)
variable
CICLO 2014-1
157
~
Escribir (var_archi)
expresin
CICLO 2014-1
4. Cerrar el Archivo
fclose(var_archi);
fcloseall();
Donde:
fclose
Cierra el archivo.
fclose(var_archi)
fcloseall( )
158
CICLO 2014-1
159
Ejercicio1
Escribir un programa que escriba en un archivo una
pirmide como el de la figura. El dato del programa
ser la altura de la pirmide. Por ejemplo:
h= 5
Piramide.txt
*
***
*****
*******
*********
CICLO 2014-1
160
Fin de Archivo
Todo archivo tiene un inicio y un fin: EOF (End Of File)
inicio
Archivo
EOF
CICLO 2014-1
161
CICLO 2014-1
!feof(var_archi)
V
sentencias
~
while(!feof(var_archi)){
//Sentencias de Lectura
162
CICLO 2014-1
~
Inicial; !feof(var_archi); increm
sentencia
163
CICLO 2014-1
164
Ejercicio2
Un archivo contiene las coordenadas (x, y) de los
puntos de una poligonal cerrada. Determinar si es
una poligonal cncava o convexa. No se conoce la
cantidad de puntos. Por ejemplo:
Poligonal.txt
10,13
11,6
20,12
17,21
9,23
5,16
CICLO 2014-1
165
Ejercicio3
Un archivo contiene una matriz por filas y columnas.
Usando un arreglo lineal leer la matriz y escribir la
transpuesta en otro archivo. El orden de la matriz no
es dato. Por ejemplo:
Matriz.txt
9 3 8 1
8 6 4 0
5 2 3 4
Matrizt.txt
9
3
8
1
8
6
4
0
5
2
3
4
Laboratorio N 8
CICLO 2014-1
166
CICLO 2014-1
167
Funcin
Un programa grande o complejo se puede dividir en
una serie de mdulos ms pequeos y manejables. A
cada mdulo se le llama funcin.
FUNCION
FUNCION 11
PROGRAMA
PROGRAMA
DIVIDIR
DIVIDIR
FUNCION
FUNCION 22
FUNCION
FUNCION 33
CICLO 2014-1
168
Paso de Parmetros
Los parmetros son las variables que la funcin
necesita conocer para realizar su tarea.
Hay dos tipos de paso de parmetros:
1. Por Valor : Se pasa una copia del valor del
parmetro (el original no cambia)
2. Por Referencia: Se pasa la direccin en memoria
del parmetro (el original cambia)
Los arreglos son siempre pasados por referencia.
CICLO 2014-1
169
z=Valor(x,);
VUELTA
Retorna
un valor
(opc
Valor
x,
ional)
: nombre de la funcin
: parmetros
Definicin
Valor(x)
CICLO 2014-1
170
z=Referencia(&x,);
VUELTA
Retorna
un valor
(opc
ional)
Definicin
Referencia(*x)
CICLO 2014-1
171
Valor Retornado
Valor que retorna la funcin con la sentencia return.
Si la funcin no retorna ningn valor, el tipo de la
funcin ser void (vaco)
CICLO 2014-1
172
1. Declaracin
2. Llamado
3. Definicin
CICLO 2014-1
173
Llamado:
parmetro_actual
parmetro formal
Memoria de la
Funcin
CICLO 2014-1
174
1. Declaracin
tipo funcion(parmetros formales);
Donde:
tipo
funcin
: Nombre de la funcin
Parmetros : Declaracin de los parmetros formales de
formales
la funcin
CICLO 2014-1
175
2. Llamado
variable = funcion(parmetros actuales);
Donde:
variable
funcin
: Nombre de la funcin
parmetros : Listado de los parmetros actuales de la
funcin
CICLO 2014-1
176
3. Definicin
tipo funcion(parmetros formales)
{
}
Donde:
tipo
funcin
: Nombre de la funcin
Parmetros : Declaracin de los parmetros formales de
formales
la funcin
CICLO 2014-1
Ejemplo1
Definir una funcin que evale el polinomio:
P(x) = anxn + an-1xn-1 + + a2x2+a1x+a0
Planteamiento
Que parmetros necesita la funcin?
a0..n por referencia (arreglo float)
n
por valor (int)
x
por valor (float)
La funcin retorna un valor?
Si, retorna el polinomio evaluado en x.
tipo double
177
CICLO 2014-1
178
Codificacin1
double poli(float a[50], int n, float x)
{ double p=0; int i;
for(i=n; i>=0; i--)
p=p*x+a[i];
return p;
}
CICLO 2014-1
179
Ejemplo2
Definir una funcin que dado un ngulo en grados y
minutos, retorne el ngulo en radianes.
Planteamiento
Que parmetros necesita la funcin?
grad por valor (int)
min por valor (int)
La funcin retorna un valor?
Si, retorna el ngulo en radianes.
tipo double
CICLO 2014-1
Codificacin2
double grad_a_rad(int grad, int min)
{ double ang;
ang=(grad+min/60.0)*PI/180;
return ang;
}
180
CICLO 2014-1
181
Ejemplo3
Definir una funcin que retorne la cantidad de filas
que hay en un archivo tipo texto.
Planteamiento
Que parmetros necesita la funcin?
ninguno
La funcin retorna un valor?
Si, retorna la cantidad de filas.
tipo int
CICLO 2014-1
Codificacin3
int num_filas()
{ FILE *g; int conta=0; char car;
g=fopen("DATOS.TXT","r");
while(!feof(g)){
fscanf(g,"%c",&car);
if(car=='\n') conta++;
}
fclose(g);
return conta+1;
}
182
CICLO 2014-1
183
Ejemplo4
Definir una funcin que escriba en pantalla la longitud
de una poligonal cerrada de n puntos (x, y)
Planteamiento
Que parmetros necesita la funcin?
n
por valor (int)
x1..n por referencia (arreglo float)
y1..n por referencia (arreglo float)
La funcin retorna un valor?
Si, retorna la longitud de la poligonal.
tipo double
CICLO 2014-1
184
Codificacin4
void longitud_poli(float x[50], float
y[50], int n)
{ double lon=0; int i;
x[n+1]=x[n]; y[n+1]=y[n];
for(i=1; i<=n; i++)
lon=lon+sqrt(pow(x[i]-x[i+1],2) +
pow(y[i]-y[i+1],2));
printf("Longitud = %.3lf\n",lon);
}
Laboratorio N 9
CICLO 2014-1
185
CICLO 2014-1
186
z=Referencia(&x,);
VUELTA
Retorna
un valor
(opc
ional)
Definicin
Referencia(*x)
CICLO 2014-1
187
Llamado
&parmetro_actual
parmetro_actual
Memoria de
la funcin
CICLO 2014-1
188
1. Declaracin
tipo funcion(*parmetros formales);
Donde:
tipo
funcin
CICLO 2014-1
189
2. Llamado
variable = funcion(&parmetros actuales);
Donde:
variable
funcin
: Nombre de la funcin
CICLO 2014-1
190
3. Definicin
tipo funcion(*parmetros formales)
{
}
Donde:
tipo
funcin
CICLO 2014-1
191
Ejercicio1
Disear una funcin que lea un vector de n
elementos.
Planteamiento
Que parmetros necesita la funcin?
x
por referencia (arreglo float)
*n
por referencia (int)
La funcin retorna un valor?
No, n y x se retornan como parmetros por
referencia.
tipo void
CICLO 2014-1
192
Diagrama de Flujo1
DEFINICION
lee_vector(x, *n)
Inicio
LLAMADO
Leer
*n
lee_vector(x, &n)
i 1..*n
i 1..n
Leer
xi
Escribir
xi
Fin
Fin
CICLO 2014-1
193
Ejercicio2
Disear una funcin que intercambie el contenido
completo de dos vectores de n decimales.
Planteamiento
Que parmetros necesita la funcin?
x
por referencia (arreglo float)
y
por referencia (arreglo float)
n
por valor (int)
La funcin retorna un valor?
No, x e y se retornan como parmetros por
referencia.
tipo void
CICLO 2014-1
194
Diagrama de Flujo2
Inicio
DEFINICION
intercambio(x, y, n)
i 1..n
t xi
xi yi
yi t
LLAMADO
lee_vector(x, &n)
LLAMADO
lee_vector(y, &n)
LLAMADO
intercambio(x, y, n)
i 1..n
Escribir
xi , yi
Fin
Fin
CICLO 2014-1
195
Ejercicio3
Disear una funcin que lea una matriz de orden m*n.
Planteamiento
Que parmetros necesita la funcin?
A
por referencia (arreglo bidimensional float)
*m
por referencia (int)
*n
por referencia (int)
La funcin retorna un valor?
No, A, m y n se retornan como parmetros por
referencia
tipo void
CICLO 2014-1
196
Diagrama de Flujo3
DEFINICION
Inicio
Leer
*m , *n
i 1..*m
i 1..m
j 1..*n
j 1..n
Leer
Ai j
Escribir
Ai j
Fin
Fin
CICLO 2014-1
197
Ejercicio4
Disear una funcin que multiplique dos matrices
A(m*n) y B(n*p).
Planteamiento
Que parmetros necesita la funcin?
A
por referencia (arreglo bidimensional float)
B
por referencia (arreglo bidimensional float)
C
por referencia (arreglo bidimensional float)
m, n, p por valor (int)
La funcin retorna un valor?
No, C se retorna como parmetro por referencia
tipo void
Diagrama de Flujo4
DEFINICION
multiplica(A,B,C,m,n,p)
i 1..m
j 1..p
Ci j 0
k 1..n
Ci j Ci j + Ai k* Bk j
Fin
LLAMADO
CICLO 2014-1
198
Inicio
lee_matriz(A,&m,&n)
LLAMADO
lee_matriz(B,&n,&p)
LLAMADO
multiplica(A,B,C,m,n,p)
i 1..m
j 1..n
Escribir
Ci j
Fin
Laboratorio N 10
CICLO 2014-1
199
CICLO 2014-1
200
Funcin Recursiva
Una Funcin es recursiva cuando se llama a si
misma.
Por ejemplo, el factorial de n se puede calcular con
una funcin recursiva:
n * fact (n 1) n 0
fact (n)
1
n0
CICLO 2014-1
201
Ejercicio1
Calcular xn en forma recursiva, x decimal y n entero
positivo
x * pot ( x, n 1) n 0
pot ( x, n)
1
n0
Planteamiento
Que parmetros necesita la funcin?
x por valor (float)
n por valor (int)
La funcin retorna un valor?
Si, retorna xn.
tipo double
CICLO 2014-1
202
Diagrama Potencia
DEFINICION
FUNCION PRINCIPAL
pot(x,n)
V
n>0
LLAMADO
RECURSIVO
p x*pot(x,n-1)
Inicio
F
p1
return p
Fin
LLAMADO
Leer
x, n
p pot(x,n)
Escribir
p
Fin
CICLO 2014-1
203
Ejercicio2
Calcular en forma recursiva el mximo comn divisor de
dos nmeros
Planteamiento
Que parmetros necesita la funcin?
a por valor (int)
b por valor (int)
La funcin retorna un valor?
Si, retorna el MCD de a y b.
tipo int
CICLO 2014-1
204
Diagrama MCD
DEFINICION
FUNCION PRINCIPAL
mcd(a,b)
V
LLAMADO
RECURSIVO
a%b>0
m mcd(b,a%b)
Inicio
F
mb
return m
Fin
Leer
a, b
LLAMADO
m mcd(a,b)
Escribir
m
Fin
Laboratorio N 11
CICLO 2014-1
205
CICLO 2014-1
206
Cadenas de Caracteres
Una cadena es un arreglo de caracteres.
Declaracin:
H o l a
0
M u n d o \n
4
12 caracteres
10
\0
11
CICLO 2014-1
Lectura de Cadenas
Lee hasta encontrar espacio o salto de lnea.
207
Leer
cad
char cad[30];
scanf("%s", cad); //por teclado, sin &
fscanf(g,"%s", cad); //de archivo, sin &
Lee hasta encontrar salto de lnea
char cad[30];
gets(cad); //por teclado
fgets(cad,#caracteres,g); //de archivo
Escritura de Cadenas
char car[30];
CICLO 2014-1
208
~
Escribir
cad
CICLO 2014-1
209
Funciones de Cadenas
Se debe incluir en el programa: #include<string.h>
Funcin
strlen(cad)
Descripcin
strcpy(cad1, cad2)
strcat(cad1, cad2)
strcmp(cad1, cad2)
CICLO 2014-1
210
CICLO 2014-1
211
Ejecucin
Apellidos: PEREZ LOPEZ
Nombres: JUAN CARLOS
PEREZ LOPEZ JUAN CARLOS 23 caracteres
PEREZ LOPEZ>JUAN CARLOS
Presione una tecla para continuar . . .
CICLO 2014-1
212
Ejercicio1
Dada una cadena leda por teclado, determinar si es
palndroma (un palndromo es una palabra que se lee
igual en dos sentidos, Ejemplo: arepera, Ana, etc.).
cad: a r e p
0
n=?
i=0,1,,?
n-i-1
\0
n-3
n-2
n-1
CICLO 2014-1
213
Solucin1
cad: a r e p
0
n-i-1
\0
n-3
n-2
n-1
n caracteres
CICLO 2014-1
214
Ejercicio2
Leer una frase y visualizar cada palabra seguida del
nmero de letras que la componen. Por ejemplo:
Estas fiestas pascuas tome con moderacin
Se mostrara:
Estas
5
fiestas
7
pascuas
7
tome
4
con
3
moderacin
10
20 car.
CICLO 2014-1
215
Solucin2
Frase: Estas fiestas pascuas tome con moderacin
Primero la frase se guarda en un archivo:
Frase.txt
Estas fiestas pascuas tome con moderacin
CICLO 2014-1
216
Ejercicios Propuestos
Dada una cadena leda por teclado, convertir las letras
minsculas a maysculas.
Dada una cadena leda por teclado, invertir el orden de
las letras de cada palabra.
Dado un archivo, leer por teclado una cadena y
determinar cuantas veces se repite la cadena en el
archivo.
Dado un archivo, leer por teclado dos cadenas, buscar la
primera cadena en el archivo y reemplazarla por la
segunda cadena.
Laboratorio N 12
CICLO 2014-1
217
CICLO 2014-1
218
Estructuras o Registros
Una estructura es un tipo de datos especial
utilizada para guardar informacin que contiene
diferentes tipos de datos.
Una estructura (Registro) es un tipo de dato
especial, que est compuesto por elementos
denominados campos, cada uno de los cuales
puede ser de un tipo de dato diferente.
CICLO 2014-1
219
Definicin de la Estructura
La estructura se define con un alias y se declara la
variable.
struct alias
{tipo1 campo1;
tipo2 campo2;
} variable;
alias
campo1 campo2
CICLO 2014-1
220
Definicin de la Estructura
Es posible definir la estructura sin alias y declarar la
variable.
struct
{tipo1 campo1;
tipo2 campo2;
} variable;
variable
campo1 campo2
CICLO 2014-1
221
Definicin de la Estructura
Se puede utilizar el alias para declarar la variable
en otra sentencia.
struct
{tipo1
tipo2
};
alias
alias
campo1;
campo2;
campo1 campo2
CICLO 2014-1
222
Ejemplo
struct datos
datos
{char coda[11];
char apenom[40];
int credap;
apeno
coda
credap prom
m
float prom;
};
struct datos alu1, alu2;
CICLO 2014-1
223
CICLO 2014-1
224
CICLO 2014-1
225
Asignacin directa
Dos variables estructura del mismo tipo pueden
asignarse directamente.
struct datos alu1, alu2;
alu2=alu1;
Lectura y Escritura
Es campo por campo, utilizando el operador punto.
scanf(%s,alu1.coda);
gets(alu1.apenom);
scanf(%d %f,&alu1.credap, &alu1.prom);
CICLO 2014-1
226
Arreglo de Estructuras
struct alias arreglo[#elementos];
xi
apeno
coda
credap prom
m
scanf(%s,x[i].coda);
gets(x[i].apenom);
scanf(%d %f,&x[i].credap, &x[i].prom);
CICLO 2014-1
227
Ejercicio1
Leer por teclado la siguiente informacin de n
alumnos:
Cdigo
Apellidos y Nombres
Crditos Aprobados
Promedio
Guardar lo ledo en un archivo. Utilizar un arreglo
de estructuras.
CICLO 2014-1
228
Codificacin1
/*Ejemplo con registros o estructuras*/
#include<stdio.h>
struct datos //1:Definicion
{char coda[11]; char apenom[40];
int credap; float prom;
}; //Aqui punto y coma
int main()
{ //2: Declaracion de variable
struct datos x[50]; int i,n; FILE *g;
printf("n: "); scanf("%d",&n);
for(i=1;i<=n;i++){
printf("Alumno%d\n",i);
printf("Promedio: "); scanf("%f",&x[i].prom);
printf("Codigo: "); scanf("%s",x[i].coda);
getchar(); //Para el salto de linea
CICLO 2014-1
229
Ejecucin1
n: 5
Alumno1
Promedio: 15.8
Codigo: 20120101A
Apellidos y Nombres: PEREZ LOPEZ JUAN CARLOS
Creditos: 120
Alumno2
Promedio: 10.9
Codigo: 20100101B
Apellidos y Nombres: RAMOS ESTRADA KEVIN FAUSTO
Creditos: 100
Alumno3
Promedio: 14.6
Codigo: 20110101C
Apellidos y Nombres: SANTIAGO LLEELLISH JOSE
Creditos: 200
Alumno4
Promedio: 13.7
Codigo: 20100101D
Apellidos y Nombres: OTERO MONTEZA ALEXANDER
Creditos: 190
Alumno5
Promedio: 19.9
Codigo: 20130101E
Apellidos y Nombres: MOYA CAHUANA CARLOS ARTURO
Creditos: 200
Presione una tecla para continuar . . .
CICLO 2014-1
230
CICLO 2014-1
231
ALUMNOS.TXT
20120101A
20100101B
20110101C
20100101D
20130101E
40 car.
15.80
10.90
14.60
13.70
19.90
120
100
200
190
200
CICLO 2014-1
232
Laboratorio N 13
Punteros
Definicin
Aritmtica de Punteros
Aplicaciones