Está en la página 1de 199

PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 1

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 1
CICLO 2014-2

WILFREDO CUPE ROMN


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 2

COMPETENCIAS DEL CURSO


1. Disea programas para procesar datos, la generacin de
informacin y su interpretacin.
2. Razona, planea y construye una secuencia lgica de procesos
utilizando estructuras de seleccin e iteracin.
3. Conoce nuevas tcnicas y herramientas que permita su
aplicacin en la solucin de problemas.
4. Conoce y utiliza un lenguaje de programacin a travs de
prcticas de edicin y ejecucin de programas estructurados.
5. Comprende el comportamiento de otros programas de
cmputo durante su utilizacin.
Las competencias 3, 4 y 5 se desarrollarn en las sesiones de
Laboratorio
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 3

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

Entorno del PSeInt


MENU
HERRAMIENTAS

AREA DE COMANDOS
TRABAJO

LINEA DE
ESTADO
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 5

Creacin de Diagramas de Flujo

AREA DE COMANDOS
TRABAJO
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 6

Creacin de Diagramas de Flujo


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 7

Operadores y Funciones
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 8

Ejecucin del Diagrama de Flujo


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 9

Ventana de Ejecucin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 10

Ejecucin paso a paso


Permite realizar un seguimiento ms detallado de la
ejecucin del diagrama de flujo, observando en
tiempo real las instrucciones y el orden en que se
ejecutan.
Tambin se puede observar el contenido de variables
o expresiones durante el proceso.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 11

Ejecucin paso a paso


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 12

Ventanas de Ejecucin paso a paso


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 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.
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%

3 100 0.05 10%

Determinar la cantidad de minutos libres que le


corresponden segn el plan que elija, el pago por
los minutos adicionales, el monto de descuento y
el monto que debe pagar un usuario. Considere la
posibilidad que el usuario no tenga que pagar nada
porque sus minutos consumidos ya estn
cubiertos por sus minutos libres.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 17

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 2
CICLO 2014-2

WILFREDO CUPE ROMN


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 18

Laboratorio N2
Objetivos

1. Utilizar el DEV C++ para Codificar, Compilar y


Ejecutar un programa.

2. Familiarizarse con los elementos del lenguaje


C
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 19

Entorno del DEV C++


MENU

HERRAMIENTAS

AREA DE
TRABAJO

LINEA DE
ESTADO
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 20

Menu File (Archivo)

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

Menu Execute (Ejecutar)

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

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.

ANSI: American National Standards Institute


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 23

Ejercicio1

Dados n nmeros ingresados por teclado, escribir


un programa que permita determinar el mayor de
los n nmeros.

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

Directivas del Pre-procesador


#include<stdio.h> : Incluye la librera de
funciones de Entrada/Salida del archivo de
cabecera stdio.h
#define PI 3.14159 : Define la constante
PI
Terminal
Inicio int main(){

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 expresin var=expresion;

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

Bucle condicin al inicio

~
F
Condicin while(Condicin)
{
V
Sentencias;
Sentencias }

~
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 34

Bucle condicin al final

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

Compilacin (Execute Compile)

Ejecucin (Execute Run)

El archivo ejecutable es independiente del DEV.


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 37

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

Depuracin del Programa C con DEV C++


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 42

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 3
CICLO 2014-1

WILFREDO CUPE ROMN


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 43

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

Ejercicio: DF con PseInt


Dadas las coordenadas (x, y) de tres puntos del
eje de una carretera, se desea determinar los
elementos de la curva horizontal de radio R.
(x2, y2)

R
(x1, y1) (x3, y3)
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 45

Elementos de una Curva Horizontal


P.I.

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

Ejercicio: DF con PseInt


Dada una poligonal abierta de N vrtices, se desea
calcular sus ngulos de deflexin 1, 2, ...
X Y
X1 Y1
X2 Y2

XN YN
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 47

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

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>
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)

Tipo del valor devuelto Argumento o parmetro


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 51

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

Tipo del valor devuelto Argumento o parmetro


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 52

Raz Cuadrada, Valor Absoluto, Redondeo de


Decimales
Funcin Descripcin
double sqrt(double x) Devuelve x (x positivo)
double abs(int x) Devuelve |x| (entero x)
double fabs(double x) Devuelve |x| (double x)
double ceil(double x) Redondea x hacia arriba al
entero mas cercano
double floor(double x) Redondea x hacia abajo al
entero mas cercano
Tipo del valor devuelto Argumento o parmetro
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 53

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)

Tipo del valor devuelto Argumento o parmetro


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 54

Bucles

Modifican el flujo secuencial en la ejecucin del


programa.
Se denominan Bucles y permiten repetir la
ejecucin de unos procesos un determinado
nmero de veces o hasta que se cumpla una
condicin de tipo lgico o aritmtico.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 55

Sentencia while

Permite ejecutar repetidamente una sentencia o


bloque de sentencias, mientras se cumpla una
determinada condicin.
~
F
condicin
while (condicin) {
V
sentencia;
sentencia
}

~
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 56

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
sentencia;
} V
condicin
while (condicin);
F
~
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 57

Ejemplos

1. Calcular el MCD de dos nmeros utilizando el


algoritmo de Euclides.
Por ejemplo para 2366 y 273:

El MCD es 91
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 58

Ejemplos

2. 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!+..

3. Dados n nmeros ingresados por teclado,


escribir un programa que permita determinar el
mayor y el menor de los n nmeros.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 59

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 4
CICLO 2014-1

WILFREDO CUPE ROMN


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 60

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

Dado un nmero entero:


Determinar su cantidad de cifras
Invertir el nmero
Indicar si es un nmero capica

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

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 5
CICLO 2014-1

WILFREDO CUPE ROMN


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 67

Laboratorio N5
Objetivos

Conocer la definicin de archivos tipo texto


Utilizar archivos tipo texto para la entrada y salida
Utilizar el DEV C++ para la codificacin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 68

Archivo Tipo Texto

Esta formado por un conjunto de caracteres


ASCII organizados secuencialmente.
Utilizamos el archivo para entrada y/o salida del
programa.

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

1. Declarar variable FILE

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

3. Leer y/o Escribir

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

Fin de Archivo para archivos de lectura


feof(var_archi) ser Verdadero si se alcanz el EOF y
ser Falso si an no se alcanza.
inicio

Archivo
de
Lectura
EOF
!feof(var_archi) ser Verdadero mientras no se alcance
el EOF.
negacin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 73

Lectura del archivo usando while con !feof()


~
F
!feof(var_archi)

V
sentencias

~
while(!feof(var_archi)){
//Sentencias de Lectura

}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 74

Lectura del archivo usando do while con !feof()

~
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

PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 77

Ejercicio3

Un archivo contiene los promedios de los


alumnos FIC. Se pide determinar la cantidad de
aprobados, desaprobados y dado un cdigo
ingresado por teclado mostrar en pantalla su
promedio.
Promedios20132.txt
codigo letra promedio
20090205 K 11.553
20112053 C 11.559
20054511 H 08.506

PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 78

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

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 6
CICLO 2014-1

WILFREDO CUPE ROMN


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 80

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

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.


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 83

Arreglo Lineal

Tiene un solo subndice.

Declaracin: tipo nombre_arreglo[N elementos];

Ejemplo: int x[50];

x[0] x[1] x[2] x[49]

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

Dado un arreglo de n elementos, determinar la media


y la desviacin estndar.

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

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 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

Dadas las matrices A y B de m*n, se pide sumarlas


utilizando arreglos lineales.

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

k#col+(#fila-1)*n Entradas Salidas k#col+(#fila-1)*n


m, n Ci (i 1..m*n)
Ai (i 1..m*n)
Bi (i 1..m*n)
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 95

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

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 6
CICLO 2014-1

WILFREDO CUPE ROMN


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 100

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

Lectura de Arreglo Bidimensional

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

Escritura de Arreglo Bidimensional

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.

A11 A1 2 ... A1 n A11 A1 2 ... A1 n



A2 1 A2 2 ... A2 n 0 A2 2 ... A2 n
...
... ... ... ... ... ... ...

An 1 An 2 ... An n 0 0 ... An n
n*n n*n

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)

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

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

Parmetros pasados por Valor


Se pasa una copia del valor del parmetro (el original
no cambia).

IDA Definicin
Copia de x Valor(x)

z=Valor(x,);

VUELTA
Retorna un valor
(opcional)

Valor : nombre de la funcin


x, : parmetros
z : recibe el valor retornado por la funcin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 111

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)
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 112

Pasos para utilizar Funciones


Para utilizar funciones en nuestro programa se deben seguir
los siguientes pasos: Declaracin, Llamado y Definicin.
#include<stdio.h>
tipo funcion(parmetros formales); 1. Declaracin
int main() {

variable = funcion(parmetros
2. Llamado
actuales);

}
tipo funcion(parmetros formales){ 3. Definicin

return valor; Retorna valor
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 113

Pasos para utilizar Funciones


1. Declaracin tipo funcion(parmetros formales);
2. Llamado variable = funcion(parmetros actuales);
3. Definicin tipo funcion(parmetros formales){

}
Donde:

tipo : tipo del valor retornado por la funcin


funcin : Nombre de la funcin
Parmetros : Parmetros utilizados en la definicin
formales
Parmetros actuales : Parmetros utilizados en el llamado
Variable : Recibe el valor retornado
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 114

Ejemplo1

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 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

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 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

Arreglo como parmetro


N de elementos opcional

Arreglo como parmetro


N de elementos opcional
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 120

Ejemplo3

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 float
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 121

Codificacin3

void longitud_poli(float x[50],float y[50],int


n){
float 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);
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 122

Ejemplo4

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
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 123

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

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 7
CICLO 2014-1

WILFREDO CUPE ROMN


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 125

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

Parmetros pasados por Referencia


Se pasa la direccin en memoria del parmetro (el
original puede cambiar).

IDA Definicin
a de x Referencia(*x)
Direccin en Memori

z=Referencia(&x,);

VUELTA
Retorna u
n valor (op
cion al)

Valor : nombre de la funcin


x, : parmetros
z : recibe el valor retornado por la funcin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 127

Pasos para utilizar Funciones


Para utilizar funciones en nuestro programa se deben seguir
los siguientes pasos: Declaracin, Llamado y Definicin.
#include<stdio.h>
tipo funcion(*parmetros formales); 1. Declaracin
int main() {

variable = funcion(&parmetros
2. Llamado
actuales);

}
tipo funcion(*parmetros formales){ 3. Definicin

return valor; Retorna valor
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 128

Pasos para utilizar Funciones


1. Declaracin tipo funcion(*parmetros formales);
2. Llamado variable=funcion(&parmetros actuales);
3. Definicin tipo funcion(*parmetros formales){

}
Donde:

tipo : tipo del valor retornado por la funcin


funcin : Nombre de la funcin
Parmetros : Parmetros punteros en la definicin
formales
Parmetros actuales : Direccin parmetros en el llamado
Variable : Recibe el valor retornado
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 129

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
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 130

Diagrama de Flujo PSeInt


DEFINICION

LLAMADO
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 131

Diagrama de Flujo CB412


DEFINICION

lee_vector(x, *n) Inicio


LLAMADO
Leer lee_vector(x, &n)
*n
i 1..*n i 1..n

Leer Escribir
xi xi

Fin Fin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 132

Codificacin C

Arreglo como parmetro


N de elementos opcional
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 133

Ejercicio2

Disear una funcin que intercambie el contenido


completo de dos vectores de n decimales.

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

Diagrama de Flujo PSeInt


DEFINICION

LLAMADO

LLAMADO

LLAMADO
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 135

Diagrama de Flujo CB412


Inicio
LLAMADO
DEFINICION
lee_vector(a, &n)
intercambio(a, b, n)
LLAMADO

i 1..n lee_vector(b, &n)


LLAMADO
t ai
intercambio(a, b, n)
ai bi
i 1..n
bi t
Escribir
ai , bi
Fin
Fin
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 136

Codificacin C
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 137

Codificacin C
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 138

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
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 139

Diagrama de Flujo PSeInt


DEFINICION

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

Matriz como parmetro


N de filas opcional
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 142

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
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

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 8
CICLO 2014-1

WILFREDO CUPE ROMN


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 145

Laboratorio N8
Objetivos
1. Resolver ejercicios utilizando funciones.
2. Introduccin a la Recursividad
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 146

Ejercicio1

Imprimir la matriz en un archivo.


Resolver utilizando funciones.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 147

Ejercicio2
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 148

Recursividad

Una Funcin es recursiva cuando se llama a si


misma.
Por ejemplo, el factorial de n se puede calcular con
una funcin recursiva:

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

DEFINICION FUNCION PRINCIPAL

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

DEFINICION FUNCION PRINCIPAL

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

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 9
CICLO 2014-1

WILFREDO CUPE ROMN


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 154

Laboratorio N9
Objetivo
1. Utilizar cadena de caracteres.
2. Utilizar funciones para cadenas.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 155

Cadena de Caracteres

Una cadena es un arreglo de caracteres.


Declaracin:
char cadena[#carac]=valor inicial;
Ej: char cad[30]=Hola Mundo\n;
cad: H o l a M u n d o \n \0
0 1 2 3 4 5 6 7 8 9 10 11

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
&

Lee hasta encontrar salto de lnea


char cad[30];
gets(cad); //por teclado
fgets(cad,#caracteres,g); //de archivo
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 157

~
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

Se debe incluir en el programa: #include<string.h>

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

Ejemplo con Funciones de Cadenas


#include<stdio.h>
#include<string.h>
int main(){
char ap[50],no[50],apn[100]; int n;
printf("Apellidos: "); gets(ap);
printf("Nombres: "); gets(no);
strcpy(apn,ap);
strcat(apn," ");
strcat(apn,no);
printf("%s %d caracteres\n",apn, strlen(apn));
n=strcmp(ap,no);
if(n>0) printf("%s>%s\n",ap,no);
else if(n<0) printf("%s<%s\n",ap,no);
else printf("%s=%s\n",ap,no);//n=0
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 160

Ejecucin

Apellidos: PEREZ LOPEZ


Nombres: JUAN CARLOS
PEREZ LOPEZ JUAN CARLOS 23 caracteres
PEREZ LOPEZ>JUAN CARLOS
Presione una tecla para continuar . . .
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 161

Ejercicio1

Dada una cadena ingresada 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 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

conta=0; //cuenta letras diferentes


n = strlen(cad);
for(i=0; i<=(n-1)/2; i++)
if(cad[i]!=cad[n-i-1])
conta++;

PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 163

Ejercicio2

Leer una frase y visualizar cada palabra seguida del


nmero de letras que la componen. Por ejemplo:
Estas fiestas patrias tome con
moderacin
Se mostrara:
Estas 5
fiestas 7
pascuas 7
tome 4
con 3
moderacin
20 car. 10
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 164

Solucin2

Frase: Estas fiestas patrias tome con


moderacin
Primero la frase se guarda en un archivo:
Frase.txt
Estas fiestas pascuas tome con moderacin

Luego se lee del archivo palabra por palabra:

while(!feof(g)){
fscanf(g,"%s", cad);
printf("%-20s %d\n",cad, strlen(cad));
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 165

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.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 166

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 10
CICLO 2014-1

WILFREDO CUPE ROMN


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 167

Laboratorio N9
Objetivo
1. Utilizar arreglos de cadenas
2. Desarrollar aplicaciones con cadenas
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 168

Arreglo de Cadenas

Es un arreglo donde cada elemento es una cadena.

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

Como vector de cadenas

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

Como matriz de caracteres

Tambin se puede representar como una matriz de


caracteres.
char x[20]
[30]={"Hola","Mundo","CB412I","\n"};
0 1 2 3 4 5 29

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

Lectura del Arreglo de Cadenas ~


Leer
Se lee elemento por elemento.
xi

~
Lee hasta encontrar espacio o salto de lnea
scanf("%s", x[i]); //por teclado
fscanf(g, "%s", x[i]);//de archivo

Lee hasta encontrar salto de lnea


gets(x[i]); //por teclado
fgets(x[i],#caracteres,g); //de archivo
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 172

Escritura de Arreglo de Cadenas ~


Escribir
Se escribe elemento por elemento.
xi

printf("%s", x[i]); //en pantalla

fprintf(g,"%s", x[i]); //en archivo


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 173

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

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
remplazarla por la segunda cadena.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 179

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 11
CICLO 2014-1

WILFREDO CUPE ROMN


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 180

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

Una estructura es un tipo de datos compuesto por


elementos denominados campos.
Los campos permiten almacenar informacin y
pueden ser de diferentes tipos de datos.
Pasos para utilizar Estructuras
1. Definir una estructura (alias y campos)
2. Declarar una variable tipo estructura
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 183

1. Definicin de la Estructura
Se puede utilizar el alias para declarar la variable
en otra sentencia.

struct alias{ alias


tipo1 campo1;
tipo2 campo2;

campo1 campo2
};
2. Declaracin de Variable
struct alias variable;
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 184

Ejemplo

struct datos{ datos


char coda[11];
char apenom[40];
int credap; apeno
coda credap prom
float prom; m
};

struct datos alu1, alu2;


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 185

Acceso a los campos de una Estructura

Para acceder a la informacin guardada en una


estructura, podemos hacer uso de dos operadores:
1.-El operador punto (.)

variable.campo

2.-El operador puntero flecha (->)

variable_puntero->campo
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 186

Acceso a los campos de una Estructura

Ejemplos:
strcpy(alu1.coda, 20130001A);
strcpy(alu1.apenom, Perez-Manuel);
alu1.credap=100;
alu1.prom=15.6;

Para utilizar el operador flecha, debemos hacer uso


de punteros.
struct datos *ptr;
ptr=&alu1;
strcpy(ptr->coda, 20130001A);
ptr->credap=100;
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 187

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);
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 188

Ejercicio Propuesto

Un archivo contiene la siguiente informacin de los


alumnos de la FIC: cdigo, apellidos y nombres,
crditos aprobados y promedio ponderado.
Utilizando variables tipo struct, leer el archivo y mostrar
en pantalla los datos del alumno con mayor y menor
promedio.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 189

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 12
CICLO 2014-1

WILFREDO CUPE ROMN


PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 190

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

struct alias arreglo[#elementos];


xi

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

La estructura se define con un alias y se declara la


variable.

struct alias{ alias


tipo1 campo1;
tipo2 campo2;
campo1 campo2
} variable;
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 193

Definicin de la Estructura

Es posible definir la estructura sin alias y declarar la


variable.

struct{ variable
tipo1 campo1;
tipo2 campo2;
campo1 campo2
} variable;
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 194

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.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 195

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

printf("Apellidos y Nombres: ");


gets(x[i].apenom);
printf("Creditos: "); scanf("%d",&x[i].credap);
}
g=fopen("ALUMNOS.TXT","w");
for(i=1;i<=n;i++){
fprintf(g,"%s ",x[i].coda);
fprintf(g,"%-40s",x[i].apenom);
fprintf(g,"%05.2f ",x[i].prom);
fprintf(g,"%d\n",x[i].credap);
}
fclose(g);
system("pause");
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 197

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

20120101A PEREZ LOPEZ JUAN CARLOS 15.80 120


20100101B RAMOS ESTRADA KEVIN FAUSTO 10.90 100
20110101C SANTIAGO LLEELLISH JOSE 14.60 200
20100101D OTERO MONTEZA ALEXANDER 13.70 190
20130101E MOYA CAHUANA CARLOS ARTURO 19.90 200

40 car.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-2 199

Laboratorio N 13

También podría gustarte