Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Laboratorios CB412 2014-2
Laboratorios CB412 2014-2
PROGRAMACION DIGITAL
LABORATORIO N 1
CICLO 2014-2
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 y Prueba de Escritorio.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 4
AREA DE COMANDOS
TRABAJO
LINEA DE
ESTADO
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 5
AREA DE COMANDOS
TRABAJO
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 6
Operadores y Funciones
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 8
Ventana de Ejecucin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 10
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.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 14
Prueba de Escritorio
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 15
Ejercicios
1. Se leen las coordenadas de un tringulo y un
punto ms. Mostrar si este ltimo punto est en el
interior o no del tringulo.
2. Sea f(x) una funcin definida en el intervalo I=[0 ,
6a]. Leer un valor real para x, cualquiera, e indicar
con un mensaje si xI y si xI, evaluar en la
funcin y mostrar el resultado.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 16
Ejercicios
3. Telefnica del Per ha diseado los siguientes
planes para sus usuarios de telefona fija:
Plan Min. Libres Costo por min. adicional % Dscto.
1 300 0.10 0%
2 200 0.08 5%
PROGRAMACION DIGITAL
LABORATORIO N 2
CICLO 2014-2
Laboratorio N2
Objetivos
HERRAMIENTAS
AREA DE
TRABAJO
LINEA DE
ESTADO
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 20
Nuevo
Nuevo Archivo
Archivo Fuente
Fuente
Proyecto
Proyecto
Abrir
Abrir Proyecto
Proyecto oo Archivo
Archivo
Abrir
Abrir Archivo
Archivo Reciente
Reciente
Grabar
Grabar
Grabar
Grabar Como
Como
Grabar
Grabar Todo
Todo
Cerrar
Cerrar
Cerrar
Cerrar Todo
Todo
Propiedades
Propiedades
Importar
Importar
Exportar
Exportar
Imprimir
Imprimir
Configura
Configura Impresin
Impresin
Salir
Salir
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 21
Compilar
Compilar
Compila
Compila elel 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
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 22
Lenguaje de Programacin C
Ejercicio1
Entrada Salida
n mayor
num
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 24
Inicio
Leer
n,num
mayor num
i2
F
i n
V
Leer
num
F
num > mayor Escribir
mayor
V
mayor num Fin
ii+1
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 25
Fin }
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 26
Comentarios
//Comentario en una lnea
/*Comentario en
varias lneas*/
Declaracin de Variables
tipo variable;
char caracter
int entero
long entero largo
float punto flotante
double doble precisin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 27
Lectura / Escritura
Especificadores de
Leer
formato
Var %c carcter
%d entero
scanf(formato,&Var) %ld entero largo
; %f punto flotante
%lf doble
Escribir precisin
Var
\n salto de lnea
printf(formato,Var) \t tabulador
; \ doble comilla
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 28
Especificadores de Formato
Especificadores Efecto
Adicionales
Ancho Justifica a la derecha
.Precisin Redondea al n de decimales
- Justifica a la izquierda
+ Muestra el signo del valor
0 Llena con ceros segn el ancho
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 29
Operadores
Permiten realizar operaciones en el programa.
Aritmticos Lgicos
+ Suma && Y
- Resta || O
* Multiplicacin ! Negacin
/ Divisin
% Resto divisin entera Primarios
() Llamada funcin
Incrementales
[] Indice de arreglo
++ Incremento en 1
. Miembro estructura
-- Decremento en 1
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 30
Operadores
Permiten realizar operaciones en el programa.
De Asignacin Relacionales
= Asignacin simple == Igual que
+= Asignacin suma < Menor que
-= Asignacin resta > Mayor que
*= Asignacin <= Menor o igual que
multiplicacin >= Mayor o igual que
/= Asignacin divisin != No igual que
%= Asignacin resto
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 31
Procesos
var=var+delta;
var var + delta
var+=delta;
var=var+1;
var var + 1
var++;
a b Resto 2 a=b%2;
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 32
Decisin
V F
Condicin
V
Sentencias F
Sentencias
if(Condicin){
Sentencias V;
}
else {
Sentencias F;
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 33
~
F
Condicin while(Condicin)
{
V
Sentencias;
Sentencias }
~
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 34
Sentencias do {
Sentencias;
}
V
Condicin while(Condicin);
F
~
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 35
Ejemplo de Codificacin
//Mayor de n numeros
#include<stdio.h>
int main() {
int n,num,mayor,i;
printf("Ingrese n: "); scanf("%d",&n);
printf("Ingrese num1: "); scanf("%d",&num);
mayor=num; i=2;
while (i<=n){
printf("Ingrese num%d: ",i);
scanf("%d",&num);
if (num>mayor){
mayor=num;
}
i++;
}
printf("El mayor valor: %d\n",mayor);
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 36
Errores de Sintxis
prrintf("\n Hola mundo ");
Errores de Ejecucin
c=15/0; /*No tiene errores de
sintaxis*/
Errores Lgicos
Si en vez de la instruccin:
a=b+c;
hubiera escrito:
a=b*c;
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 38
Ejercicio2
Dados los datos de dos circunferencias:
C1x C1y r1 //coordenadas del centro y radio de
C2x C2y r2 //la circunferencia
Determinar si estas circunferencias son
TANGENTES, SECANTES o simplemente no hay
contacto entre ellas.
Entradas Salida
C1x, C1y, r1 Tangentes
C2x, C2y, r2 Secantes
No hay contacto
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 39
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 40
Exportacin a C
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 41
PROGRAMACION DIGITAL
LABORATORIO N 3
CICLO 2014-1
Laboratorio N3
Objetivos
1. Crear un DF con PseInt y exportarlo a C
2. Depurar el programa con el DEV C++
3. Utilizar Funciones Matemticas
4. Utilizar Sentencias de Ejecucin:
Entrada y Salida
Decisiones
Bucles
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 44
R
(x1, y1) (x3, y3)
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 45
M
L.C.
Curva a la derecha
= ngulo de deflexin
R = radio de la curva
T = longitud de la subtangente = R tan(/2)
L.C. = longitud de cuerda = 2 R Seno(/2)
E = distancia a externa = R (Sec(/2) - 1)
M = distancia de la ordenada media = R (1 Cos(/2))
Fuente: Manual de Diseo Geomtrico de Carreteras (DG - 2001)
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 46
Solucin
Entradas Salida
N teta(en grados)
x1,y1
x2,y2
x3,y3
a = (x2-x1, y2-y1)
b = (x3-x2, y3-y2)
teta = arco coseno(a.b/(|a|*|b|)) (en radianes)
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 48
Ejemplo de ejecucin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 49
Funciones Matemticas
#include<math.h>
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 50
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 seno(x) en radianes
double acos(double x) arco coseno(x)
double atan(double x) arco tangente(x)
Potencias y Logaritmos
Funcin Descripcin
double pow(double x, Devuelve el valor de xy
double y)
double exp(double x) Devuelve el valor de ex
double log(double x) logaritmo neperiano de x
double log10(double x) logaritmo decimal de x
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) tangente hiperblica(x)
Bucles
Sentencia while
~
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 56
Sentencia do while
do { sentencia
sentencia;
} V
condicin
while (condicin);
F
~
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 57
Ejemplos
El MCD es 91
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 58
Ejemplos
ex=1+x+x2/2!+x3/3!+..
PROGRAMACION DIGITAL
LABORATORIO N 4
CICLO 2014-1
Laboratorio N4
Objetivo
Resolver ejercicios propuestos presentando
Diagrama de Flujo y Codificacin C.
Utilizar PSeInt y DEV C++.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 61
Ejercicio1
Ejemplo:
Nmero = 869968
Nro de cifras = 6
Nmero Invertido= 869968
Si es capica
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 62
Ejercicio2
Calcular el determinante de un grupo de matrices
simtricas de orden 3x3. Considerar que la
cantidad de matrices no se conoce de antemano.
El ingreso de datos terminar cuando se ingrese
una matriz que no sea simtrica.
Dar como respuestas:
Cantidad de matrices
El mayor determinante
El menor determinante
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 63
Ejercicio3
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 64
Ejercicio4
Se leen los vrtices de una poligonal abierta con
abscisas crecientes, considerando como primer
vrtice al (0,0), adems las ordenadas de cada
dos vrtices consecutivos deben ser de signo
opuestos. La lectura de los vrtices termina
cuando un vrtice cumple con |y|<tol, donde tol es
la tolerancia leda por teclado.
Se pide determinar el rea total de los tringulos
que se forman con el eje X.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 65
Ejemplo
Tolerancia = 0.5
Area = S1+S2+S3+S4+S5+S6
x2,y2 x3,y3
Entrada Salida
0,0 xi xi xj
tol Area
x2,y2
x3,y3
x3,y3 x2,y2
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 66
PROGRAMACION DIGITAL
LABORATORIO N 5
CICLO 2014-1
Laboratorio N5
Objetivos
Archivo de Archivo de
Datos Programa Resultados
ENTRADA SALIDA
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 69
Tabla ASCII
Fuente: http://www.elcodigoascii.com.ar/
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 70
FILE *var_archi;
2. Abrir el Archivo
var_archi=fopen(archivo, modo);
Modo Descripcin
Apertura
r Abre un Archivo para lectura (ENTRADA)
w Crea un Archivo para escritura (SALIDA)
a Abre un Archivo para aadir al final (SALIDA)
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 71
fscanf(var_archi, formato,
&variable);
fprintf(var_archi, formato,
expresin);
4. Cerrar el Archivo
fclose(var_archi);
_fcloseall();
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 72
Archivo
de
Lectura
EOF
!feof(var_archi) ser Verdadero mientras no se alcance
el EOF.
negacin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 73
V
sentencias
~
while(!feof(var_archi)){
//Sentencias de Lectura
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 74
~
sentencias
!feof(var_archi)
V
F
~
do {
//Sentencias de Lectura
} while(!feof(var_archi));
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 75
Ejercicio1
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.
Poligonal.txt
10,13
11,6
20,12
17,21
9,23
5,16
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 76
Ejercicio2
Se tiene registrado las marcaciones de un
empleado (fecha, hora de entrada y de salida) en
el archivo Marca.txt, se desea guardar en otro
archivo las horas trabajadas en el mes.
Marca.txt Horastrab.txt
2014-04-03 09:58:49 2014-04-03 11:05:56
2014-04-03 21:04:45 2014-04-04 8:11:09
2014-04-04 10:19:53 2014-04-05 8:04:38
2014-04-04 18:31:02
2014-04-05 10:26:15
2014-04-05 18:30:53
Ejercicio3
Ejercicio4
Escribir un programa que escriba en un archivo un
tringulo como el de la figura. El dato del programa
ser la altura del tringulo.
h= 5
Triangulo.txt
*
* *
* *
* *
*********
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 79
PROGRAMACION DIGITAL
LABORATORIO N 6
CICLO 2014-1
Laboratorio N6
Objetivo
1. Bucle for
2. Arreglo Lineal
3. Arreglo Bidimensional
4. Ejercicios
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 81
Sentencia for
Permite repetir una sentencia o bloque de
sentencias, mientras se cumple una determinada
condicin.
for(inicial; condicin; incremento){
sentencia;
}
~
inicial; condicin; incremento
sentencia
~
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 82
Variable Subindicada
Tipos:
Arreglo Lineal
subndice
50 elementos
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 84
Arreglo Lineal
Lectura y Escritura:
scanf(formato,&elemento[i-simo]);
printf(formato,elemento[i-simo]);
~
Ejemplo: Leer
scanf(%d, &x[i]); xi
~
~
printf(%d, x[i]); Escribir
xi
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 85
Ejercicio1
Entradas Salidas
N media
xi (i 1..N) desv
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 86
Diagrama PSeInt
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 87
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");
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 88
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 . . .
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 89
Ejercicio2
x1 x2 x3 x4 xN
comparacion
es
Entradas Salidas
N moda
xi (i 1..N) vecesmoda
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 90
Diagrama PSeInt
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 91
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;
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 92
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");
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 93
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 . . .
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 94
Ejercicio3
A1 A2 ... An B1 B2 ... Bn
An 1 An 2 ... A2 n Bn 1 Bn 2 ... B2 n
... ... ... ... ... ... ... ...
Ak Bk
A( m 1) n 1 A( m 1) n 2 ... Amn B( m 1) n 1 B( m 1) n 2 ... Bmn
m* n m*n
Diagrama PSeInt
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 96
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]);
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 97
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");
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 98
Ejecucin
Nro filas: 3
Nro columnas: 4
A:
9 3 8 1
8 6 4 0
5 2 3 4
B:
5 7 2 3
9 6 1 1
4 9 3 7
C:
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 . . .
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 99
PROGRAMACION DIGITAL
LABORATORIO N 6
CICLO 2014-1
Laboratorio N6
Objetivo
1. Utilizar arreglos bidimensionales
2. Utilizar funciones y paso de parmetros por
valor
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 101
Arreglo Bidimensional
Tiene dos subndices
Declaracin: tipo matriz[Nfilas]
[Ncolumnas];
Ejemplo: int x[20][30];
col 0 col 1 col 2 col 29
fila 0 X0 0 X0 1 X0 2 X0 29
fila 1 X1 0 X1 1 X1 2 X1 29 20
filas
fila 19
X19 0 X19 1 X19 2 X19 29
30 columnas
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 102
scanf("formato",&matriz[#fila][#col]);
fscanf(file,"formato",&matriz[#fila]
[#col]);
Ejemplo: Leer
xi j
scanf("%d", &x[i][j]);
fscanf(file,"%d", &x[i][j]);
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 103
printf("formato",matriz[#fila][#col]);
fprintf(file,"formato",matriz[#fila]
[#col]);
Ejemplo: Escribi
r
printf("%d", x[i][j]); xi j
fprintf(file,"%d", x[i][j]);
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 104
Ejercicio
Dadas las matriz A de n*n, se pide convertirla a
triangular superior mediante operaciones elementales
por filas y luego calcular su determinante.
Entradas Salidas
n Ai j (triangular superior)
Ai j i, j 1..n det
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 105
Solucin
Fila Pivote i=1 A11 A1 2 ... A1 n
j=2 A2 1 A2 2 ... A2 n
Fila Modificada ... ... ... ...
An 1 An 2 ... An n
n*n
Triangular superior:
Fila Pivote i 1..n-1
Fila Modificada j i+1..n
c = -Aji/Aii , Aii 0
Filaj Filaj + c*Filai
Determinante:
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 106
a
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 107
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 108
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 109
Funciones (Subprogramas)
FUNCION
FUNCION 22
PROGRAMA
PROGRAMA DIVIDIR
DIVIDIR
FUNCION
FUNCION 33
La funcin es una parte o mdulo del programa que
realiza una tarea especfica y/o retorna un valor como
resultado.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 110
IDA Definicin
Copia de x Valor(x)
z=Valor(x,);
VUELTA
Retorna un valor
(opcional)
Valor Retornado
Ejemplo1
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 float
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 115
D.F. PSeInt
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 116
Codificacin1
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 117
Ejemplo2
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 float
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 118
D.F. PSeInt
PSeInt:
an+1xn + anxn-1 + + a2x + a1
C:
anxn + an-1xn-1 + + a1x + a0
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 119
Codificacin2
Ejemplo3
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 float
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 121
Codificacin3
Ejemplo4
Planteamiento
Que parmetros necesita la funcin?
ninguno
Codificacin4
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;
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 124
PROGRAMACION DIGITAL
LABORATORIO N 7
CICLO 2014-1
Laboratorio N7
Objetivo
1. Utilizar funciones y paso de parmetros por
referencia.
2. Utilizar vectores y matrices como parmetros
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 126
IDA Definicin
a de x Referencia(*x)
Direccin en Memori
z=Referencia(&x,);
VUELTA
Retorna u
n valor (op
cion al)
Ejercicio1
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
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 130
LLAMADO
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 131
Leer Escribir
xi xi
Fin Fin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 132
Codificacin C
Ejercicio2
Planteamiento
Que parmetros necesita la funcin?
a por referencia (arreglo float)
a por referencia (arreglo float)
n por valor (int)
La funcin retorna un valor?
No, a y b se retornan como parmetros por
referencia.
tipo void
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 134
LLAMADO
LLAMADO
LLAMADO
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 135
Codificacin C
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 137
Codificacin C
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 138
Ejercicio3
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
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 139
LLAMADO
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 140
Diagrama de Flujo3
DEFINICION
lee_matriz(*f, *c, a) Inicio
LLAMADO
Leer lee_matriz(&m, &n, a)
*f , *c
i 1..*f i 1..m
j 1..*c j 1..n
Leer Escribir
ai j ai j
Fin Fin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 141
Codificacin C
Ejercicio4
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
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 143
Inicio
Diagrama de Flujo4 LLAMADO
DEFINICION
multiplica(A,B,C,m,n,p) lee_matriz(A,&m,&n)
LLAMADO
i 1..m lee_matriz(B,&n,&p)
LLAMADO
j 1..p multiplica(A,B,C,m,n,p)
Ci j 0
i 1..m
k 1..n
j 1..n
Ci j Ci j + Ai k* Bk j
Escribir
Ci j
Fin Fin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 144
PROGRAMACION DIGITAL
LABORATORIO N 8
CICLO 2014-1
Laboratorio N8
Objetivos
1. Resolver ejercicios utilizando funciones.
2. Introduccin a la Recursividad
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 146
Ejercicio1
Ejercicio2
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 148
Recursividad
n! = n*(n-1)*(n-2)**2*1
n * fact(n 1) n 0
fact(n)
1 n0
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 149
Ejercicio1
Calcular en forma recursiva el mximo comn divisor de
dos nmeros
mcd (b, a %b) a %b 0
mcd (a, b)
b a %b 0
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
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 150
Diagrama MCD
mcd(a,b) Inicio
V F Leer
LLAMADO a%b>0
RECURSIVO a, b
LLAMADO
m mcd(b,a%b) mb
m mcd(a,b)
return m Escribir
m
Fin
Fin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 151
Ejercicio2
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
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 152
Diagrama Potencia
pot(x,n) Inicio
V F Leer
LLAMADO n>0
RECURSIVO x, n
LLAMADO
p x*pot(x,n-1) p1
p pot(x,n)
return p Escribir
p
Fin
Fin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 153
PROGRAMACION DIGITAL
LABORATORIO N 9
CICLO 2014-1
Laboratorio N9
Objetivo
1. Utilizar cadena de caracteres.
2. Utilizar funciones para cadenas.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 155
Cadena de Caracteres
12 caracteres
El carcter nulo (\0) indica el final de la cadena.
Una constante caracter se encierra entre comilla simple.
Una constante cadena se encierra entre doble comilla.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 156
~
Lectura de Cadenas Leer
cad
Lee hasta encontrar espacio o salto de lnea.
~
char cad[30];
scanf("%s", cad); //por teclado, sin &
fscanf(g,"%s", cad); //de archivo, sin
&
~
Escritura de Cadenas
Escribir
cad
char car[30];
~
printf("%s", cad); //en pantalla
fprintf(h,"%s", cad); //en archivo
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 158
Funciones de Cadenas
Funcin Descripcin
strlen(cad) Retorna la longitud de cad. No se
cuenta el nulo.
strcpy(cad1, Copia cad2 en cad1.
cad2)
strcat(cad1, Une cad1 con cad2.
cad2)
strcmp(cad1, Compara cad1 con cad2.
cad2) <0 si cad1<cad2
Retorna =0 si cad1=cad2
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 159
Ejecucin
Ejercicio1
cad: a r e p e r a \0
0 1 2 3 i n-i-1 n-3 n-2 n-1 n
n=?
i=0,1,,?
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 162
Solucin1
cad: a r e p e r a \0
0 1 2 3 i n-i-1 n-3 n-2 n-1 n
n caracteres
Ejercicio2
Solucin2
while(!feof(g)){
fscanf(g,"%s", cad);
printf("%-20s %d\n",cad, strlen(cad));
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 165
Ejercicios Propuestos
PROGRAMACION DIGITAL
LABORATORIO N 10
CICLO 2014-1
Laboratorio N9
Objetivo
1. Utilizar arreglos de cadenas
2. Desarrollar aplicaciones con cadenas
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 168
Arreglo de Cadenas
Declaracin:
char arreglo[#fil][#col]={valor inicial};
Donde:
#fil = nro. de filas o nro. de cadenas.
#col = nro. de columnas o nro. de caracteres
de las cadenas.
{valor inicial} = valores iniciales opcionales.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 169
char x[20]
[30]={"Hola","Mundo","CB412I","\n"};
x: Hola Mundo CB412I \n
0 1 2 3 19
0 Hola
Mundo
20 cadenas
1
x2
2 CB412I
3 \n
19
30 car
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 170
0 Hola 0 H o l a \0
1 Mundo 1 M u n d o \0
2 CB412I
x2 2 C B 4 1 2 I
\0
3 \n 3 \n \0
19 19
30 car x2,5
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 171
~
Lee hasta encontrar espacio o salto de lnea
scanf("%s", x[i]); //por teclado
fscanf(g, "%s", x[i]);//de archivo
Ejercicio1
Leer n cadenas por teclado y ordenarlas alfabticamente.
Por Ejemplo:
1 MORA 1 BOLO
2 ESCALANTE 2 CORTEZ
3 CORTEZ 3 ESCALANTE
ORDENAR
4 JEANCARLO 4 JEANCARLO
n BOLO n MORA
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 174
Solucin1
/*Ordena n cadenas*/
#include<stdio.h>
#include<string.h>
int main()
{char x[50][30],t[30]; int i,j,n;
printf("Nro de cadenas: "); scanf("%d",&n);
getchar(); //para el salto de linea
for(i=1;i<=n;i++){
printf("Cadena%d :",i); gets(x[i]);
}
/*Ordena x burbuja alfabeticamente*/
for(i=1;i<n;i++)
for(j=1;j<=n-i;j++)//de menor a mayor
if(strcmp(x[j],x[j+1])>0){
strcpy(t,x[j]); strcpy(x[j],x[j+1]);
strcpy(x[j+1],t);
}
for(i=1;i<=n;i++) printf("%d %s\n",i,x[i]);
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 175
Ejercicio2
Dada una frase leda por teclado, se pide hacer un
programa que genere el archivo Palabras.txt, con las
palabras en maysculas y en orden alfabtico.
Por ejemplo:
Estas fiestas Patrias TOME con moderacin
Palabras.txt
CON
ESTAS
FIESTAS
MODERACION
PATRIAS
TOME
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 176
Solucin2
/*Ejercicio 2 de cadenas*/
#include<stdio.h>
#include<string.h>
int main()
{char x[50][30],c,t[30]; int i=0,n,j; FILE *g;
printf("Frase: ");
do {i++;
scanf("%s%c",x[i],&c);
}
while(c==' ');
n=i;
//Paso a mayusculas
for(i=1;i<=n;i++)
for(j=0;j<strlen(x[i]);j++){
c=x[i][j];
if(c>='a' && c<='z') c=c-32;
x[i][j]=c;
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 177
Solucin2
/*Ordena x burbuja alfabeticamente*/
for(i=1;i<n;i++)
for(j=1;j<=n-i;j++)//de menor a mayor
if(strcmp(x[j],x[j+1])>0){
strcpy(t,x[j]);
strcpy(x[j],x[j+1]);
strcpy(x[j+1],t);
}
g=fopen("palabras.txt","w");
for(i=1;i<=n;i++)
fprintf(g,"%d %s\n",i,x[i]);
fclose(g);
printf("Se creo palabras.txt\n");
system("pause");
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 178
Ejercicios Propuestos
PROGRAMACION DIGITAL
LABORATORIO N 11
CICLO 2014-1
Laboratorio N11
Objetivo
1. Definir un tipo de datos Registros (struct)
2. Utilizar variables tipo Registros
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 181
Problema Propuesto
Hacer un programa que reescriba el contenido de un archivo
Agenda.txt ordenndolo segn fecha y hora. No se conoce el
nmero de lneas del archivo. Se recomienda utilizar un cdigo
que facilite el ordenamiento, obtenido a partir de la fecha y
hora:
Fecha y hora : DD-MM-AAAA hh:mm
Cdigo : AAAAMMDDhhmm
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 182
Estructuras o Registros
1. Definicin de la Estructura
Se puede utilizar el alias para declarar la variable
en otra sentencia.
Ejemplo
variable.campo
variable_puntero->campo
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 186
Ejemplos:
strcpy(alu1.coda, 20130001A);
strcpy(alu1.apenom, Perez-Manuel);
alu1.credap=100;
alu1.prom=15.6;
Asignacin directa
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);
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 188
Ejercicio Propuesto
PROGRAMACION DIGITAL
LABORATORIO N 12
CICLO 2014-1
Laboratorio N12
Objetivo
1. Definir un tipo de datos Registros (struct)
2. Utilizar arreglos de Registros
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 191
Arreglo de Estructuras
apeno
coda credap prom
m
struct datos x[50];
scanf(%s,x[i].coda);
gets(x[i].apenom);
scanf(%d %f,&x[i].credap, &x[i].prom);
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 192
Definicin de la Estructura
Definicin de la Estructura
struct{ variable
tipo1 campo1;
tipo2 campo2;
campo1 campo2
} variable;
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 194
Ejercicio1
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
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 196
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 . . .
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 198
ALUMNOS.TXT
40 car.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 199
Laboratorio N 13