Professional Documents
Culture Documents
Programacion Basica
Programacion Basica
Programacion Basica
Codificación
Análisis de error
Control de calidad final Test software engineering
EJERCICIOS:
1.- Sumar n números enteros
Definición_ sumar n números enteros de uan serie asi:
1+2+3+4+5+6+….n
Análisis del problema.
1 + 2 + 3 + 4 + 5 + 6 +…………..n
10
1
i=1
d=2
repetir n veces
i=i+d
d=d+1
Prueba de escritorio
rep i d
0 H 1 2
1 3 3
2 6 4
3 10 5
4 15 6
.
.
.
.
n
2.- usando sumas encontrar el producto m*n
2
Definición_ con sumas encontrar el producto entre dos números
denotados por my n:
4
8
12
16
20
d= 0
repetir n veces
d=d+m
Prueba de escritorio
veces d m
0 H 0 4
1 4 4
2 8 4
3 12 4
4 16 4
5 20 4
3
Definición_ con restas encontrar el cociente entre dos números
denotados por my n:
Analisis del problema:
Con un ejemplo de dos números enteros vemos como varía la división:
28/3
28 - 3
d
d 25-3
d 22-3
d 19-3
d 16-3
d
13-3
d
10-3
d
7-3
d
4-3
d 1-3
i=0
Repetir d>n
d = d-n
i = i+1
Prueba de escritorio
4
VARIABLES
Son espacios de ememoria (RAM) que cambian continuamente de valor.
Empiezan con un letra y continúan con una letra y/o número, signo subrayado
Ojo no van espacios ni tildes ni la ñ (es recomendable máximo usar 8 signos)
Ejemplos:
CONSTANTES
Valores fijos que no cambian en la ejecución del programa
Ejemplo:
ALGORITMO
Secuencia ordenada de pasos para resolver un problema (programa).
Diagrama de flujo
Pseudocódigos
Dichos diagramas se construyen utilizando ciertos símbolos de uso especial como son
rectángulos, diamantes, óvalos, y pequeños círculos, estos símbolos están conectados
entre sí por flechas, conocidas como líneas de flujo. A continuación se detallarán estos
símbolos.
5
registro de información procesada en un
periférico.
Cualquier tipo de operación que pueda
originar cambio de valor, formato o
Proceso posición de la información almacenada
en memoria, operaciones aritméticas, de
transformaciones, etc.
Indica operaciones lógicas o de
comparación entre datos (normalmente
dos) y en función del resultado de la
Decisión
misma determina (normalmente si y no)
cual de los distintos caminos alternativos
del programa se debe seguir
Sirve para enlazar dos partes
cualesquiera de un diagrama a través de
Conector Misma
un conector en la salida y otro conector
Página
en la entrada. Se refiere a la conexión en
la misma pagina del diagrama
Indicador de
Indica el sentido de la ejecución de las
dirección o línea
operaciones
de flujo
Se utiliza en ocasiones en lugar del
símbolo de salida. El dibujo representa
Salida
un pedazo de hoja. Es usado para
mostrar datos o resultados.
2.- pseudocódigo
6
EJEMPLOS DE DIAGRAMAS Y PSEUDOCODIGOS
repetir izq>derecho
Contador=0 contador = contador+1
izq= izq – derecho
sacar a pantalla
Contador= contador + 1 contador
si izq
Izq =izq -derecho fin
Izq>=derecho
Sacar a pantalla no
Contador
fin
7
Para suma de n números enteros
DIAGRAMA DE FLUJO PSEUDOCODIGO
Variables
inicio izq,derech,,n
Inicio
leer(izq,derecho)
Leer (izq,derecho)
izq=1
derecho=2
Izq=1
repetir n veces
derecho=2
si izq = izq+derecho
derecho = derecho +1
Izq=izq+derecho
derecho=derecho+1
sacar a pantalla
si Derecho<=n derecho
no
no fin
Imprimir: izq
fin
8
Para v/t cuando t>0
Variables
inicio distancia,tiempo,velocidad
Inicio
leer(distancia,tiempo)
Leer (distancia, tiempo)
si t>0
caso contrario
Mensaje: no se puede calcular la
Mensaje: no se puede calcular
velocidad
la velocidad
no
Imprimir: velocidad fin
fin
9
Para multiplicar m *n
DIAGRAMA DE FLUJO PSEUDOCODIGO
Variables
inicio m,n,d
Inicio
leer(m,n)
Leer (m,n)
d=0
repetir n veces
d=0
i=0 d = d +m
si
d = d +m imprimir
d
i=i+1
si i<=n fin
no
no
sacar: d
fin
10
DESARROLLO PARA VER EL ALGORITMO
Repetirj=1 hasta j=n Repetirj=1 hasta j=n Repetirj=1 hasta j=n
Cij=Aij+Bij
ESTRUCTURA DE UN PROGRAMA
Si()
V
Caso contario
repetir n veces
OPERADORES
Los operadores permiten enfocar la búsqueda vinculando términos de búsqueda y definiendo
la relación entre ellos
11
Precedencia de operadores
La interpretación de cualquier expresión en C++ está determinada por la precedencia y
asociatividad de los operadores en dicha expresión. Cada operador tiene una precedencia, y
los operadores en una expresión se evalúan en orden de mayor a menor precedencia. La
evaluación de operadores con la misma precedencia viene determinada por su asociatividad.
Y, al igual que en matemáticas, los paréntesis anulan las reglas de precedencia.
En la siguiente tabla se listan los operadores en C++, su precedencia y su asociatividad. Los
operadores se listan en orden de prioridad decreciente (los situados más arriba tienen mayor
prioridad). Los operadores en la misma línea horizontal tienen la misma precedencia.
12
Con pseudocódigos multiplicación de matrices
A11 A12 A13 A14 A15 B11 B12 B13 B14 B15
A21 A22 A23 A24 A25 B21 B22 B23 B24 B25
A31 A32 A33 A34 A35 B31 B32 B33 B34 B35
A41 A42 A43 A44 A45 B41 B42 B43 B44 B45
A51 A52 A53 A54 A55 B51 B52 B53 B54 B55
MULTIPLICANDO
C12 A1 B1 + A1 B2 + A1 B3 + A1 B4 + A1 B5
= 1 2 2 2 3 2 4 2 5 2
C14 A1 B1 + A1 B2 + A1 B3 + A1 B4 + A1 B5
C13=
C22= A1A211 B13
B1 4 + A12
A222 B2 4 + A133 B3 4 +
A2 A1 4 B4
A2 B434 ++ A155 B52
A2 B534
= 1 2 32 3 23 4 2 5
C24 A2 B1 + A2 B2 + A2 B3 + A2 B4 + A2 B54
C23=
C32= A311 B1 4 +
A21 B13 A22
A322 B23
B2 4 + A23
A3 3 B3B334 + A244 B4
A3 B434 ++ A255 B52
A3 B53
=
C33= 2 2 3 2 4 2 5
C34 A31A3 B13B1 + +A32A3 B23B2 + +A33A3 B33B3 + +A34A3 B43B4 + +A35A3 B53B54
C42= A41
C43= A411 B13
B1 4 + B2 4 +
A422 B23 A4
A433 B3
B334 + A4
A444 B4
B434 ++ A4
A455 B52
B53
=
C53= 2 2 3A53 2B33 + 4A54 2B43 + 5A55 B53
C44 A4 B1 +
A51 B13 + A4 B2 +
A52 B23 + A4 B3 + A4 B4 + A4 B54
C52= A511 B1 4 + A522 B2 4 + A5 3 B3 4 + A5 4 B4 4 + A5 5 B52
= 2 2 3 2 4 2 5
C54 A5 B1 + A5 B2 + A5 B3 + A5 B4 + A5 B54
= 1 4 2 4 3 4 4 4 5
C15 A1 B1 + A1 B2 + A1 B3 + A1 B4 + A1 B5
= 1 5 2 5 3 5 4 5 5 5
C25 A21 B1 + A2 B2 + A2 B3 + A2 B4 + A2 B55
= 5 2 5 3 5 4 5 5
C35 A31 B1 + A3 B2 + A3 B3 + A3 B4 + A3 B55
= 5 2 5 3 5 4 5 5
C45 A41 B1 + A4 B2 + A4 B3 + A4 B4 + A4 B55
= 5 2 5 3 5 4 5 5
C55 A51 B1 + A5 B2 + A5 B3 + A5 B4 + A5 B55
= 5 2 5 3 5 4 5 5
13
ANALISANDO:
1.- Comenzamos analizando fila por fila y elemento por elemento
1)A1- B1-
2)A1k B1q entonces
K:1 hasta n
q:1 hasta n
A1k Bq1
3)
K:1 hasta n k=q (cambian igual en misma posición)
A1k B1k
4)
2.- C13
14
Suma =suma + A1kBkj
C1j=suma
EXAMINANDO fila 2
C2j=suma
EXAMINANDO fila 3
C3j=suma
EXAMINANDO fila 4
C4j=suma
15
Repetir k=1 hasta n
suma =suma + A kBkj
C j=suma
Cij=suma
16
MATRIZ DE ORDEN n CON CEROS BAJO LA DIAGONAL
Primera Columna
a) Segunda Fila:
b)
a21*a11
a21 = a11*a21 -
Repetir k=1….n
a22 = a11*a22 - a21*a12
a2k= a11*a2k - a21*a1k
a23 = a11*a23 - a21*a13
a24 = a11*a24 - a21*a14
a25 = a11*a25 - a21*a15
a11*a2 a21*a1
a2n = n - n
c) Tercera Fila
a11*a3 a31*a11
a31 = 1 - Repetir d=1….n
a11*a3
a3d= a11*a3d - a31*a1d
a32 = 2 - a31*a12
a11*a3
a33 = 3 - a31*a13
a11*a3
a34 = 4 - a31*a14
a11*a3
a35 = 5 - a31*a15
a11*a3
a3n = n - a31*a1n
17
d) Cuarta Fila
a11*a4
a41 = 1 - a41*a11
a11*a4 a41*a12
Repetir t=1….n
a42 = 2 -
a11*a4 a4t= a11*a4t - a41*a1t
a43 = 3 - a41*a13
a11*a4
a44 = 4 - a41*a14
a11*a4
a45 = 5 - a41*a15
a11*a4
a4n = n - a41*a1n
e) Quinta Fila
a11*a5 a51*a11
a51 = 1 - Repetir p=1….n
a11*a5
a5p= a11*a5p – a51*a1p
a52 = 2 - a51*a12
a11*a5
a53 = 3 - a51*a13
a11*a5
a54 = 4 - a51*a14
a11*a5
a55 = 5 - a51*a15
a11*a5
a5n = n - a51*a1n
f) Sexta Fila
a11*a6
a61 = 1 - a61*a11
a11*a6 a61*a12
Repetir r=1….n
a62 = 2 -
a11*a6 a6r= a11*a6r – a61*a1r
a63 = 3 - a61*a13
a11*a6
a64 = 4 - a61*a14
a11*a6
a65 = 5 - a61*a15
a11*a6
a6n = n - a61*a1n
18
Conclusión del estudio de la primera columna:
Repetir j=2….n
a3d= a11*a3d
Repetir k=1….n
- a31*a1d
SEGUNDA COLUMNA
a. Tercera Fila
a22*a3 a32*a22
Repetir k=2….n
a32 = 2 -
a22*a3 a3k= a22*a3k – a32*a2k
a33 = 3 - a32*a23
a22*a3 b3=a22*b3-a32*b2
a34 = 4 - a32*a24
a22*a3
a35 = 5 - a32*a25
a22*a3
a36 = 6 - a32*a26
a22*a3
a3n = n - a32*a2n
b3 = a22*b3 - a32*b2
19
b. Cuarta Fila
a22*a4 a42*a22
a42 = 2 -
a22*a4 a42*a23
a43 = 3 - Repetir z=2….n
a22*a4
a4z= a22*a4z – a42*a2z
a44 = 4 - a42*a24
a22*a4 b3=a22*b3-a32*b2
a45 = 5 - a42*a25
a22*a4
a46 = 6 - a42*a26
a22*a4
a4n = n - a42*a2n
b4 = a22*b4 - a42*b2
c. Quinta Fila
a22*a5 a52*a22
a52 = 2 - Repetir q=2….n
a22*a5
a53 = 3 - a52*a23 a5q= a22*a5q – a52*a2q
a22*a5
a54 = 4 - a52*a24 b5=a22*b5-a52*b2
a22*a5
a55 = 5 - a52*a25
a22*a5
a56 = 6 - a52*a26
a22*a5
a5n = n - a52*a2n
b5 = a22*b5 - a52*b2
d. Sexta Fila
a22*a6 a62*a22
a62 = 2 -
a22*a6 a62*a23
Repetir t=2….n
a63 = 3 -
a22*a6 a6t= a22*a6t – a62*a2t
a64 = 4 - a62*a24
b6=a22*b6-a62*b2
a22*a6
a65 = 5 - a62*a25
a22*a6
a66 = 6 - a62*a26
20
a22*a6
a6n = n - a62*a2n
b6 = a22*b6 - a62*b2
e. Séptima Fila
a22*a7 a72*a22
a72 = 2 -
a22*a7 a72*a23
Repetir r=2….n
a73 = 3 -
a22*a7 a7r= a22*a7r – a72*a2r
a74 = 4 - a72*a24 b7=a22*b7-a72*b2
a22*a7
a75 = 5 - a72*a25
a22*a7
a76 = 6 - a72*a26
a22*a7
a7n = 7 - a72*a2n
b7 = a22*b7 - a72*b2
b6=a22*b6-a62*b2 b7=a22*b7-a72*b2
Repetir w= 3……..n
21
Repetir z=2….n
a. Cuarta Fila
b4 = a33*b4 - a43*b3
b. Quinta Fila
a33*a5 a53*a33
a53 = 3 -
a33*a5 Repetir d=3….n
a54 = 4 - a53*a34 a5d= a33*a5d – a53*a3d
a33*a5
a55 = 5 - a53*a35
b5=a33*b5-a53*b3
a33*a5
a56 = 6 - a53*a36
a33*a5
a57 = 7 - a53*a37
a33*a5
a5n = n - a53*a3n
b5 = a33*b5 - a53*b3
c. Sexta Fila
22
a33*a6 a63*a33
a63 = 3 -
a33*a6 Repetir e=3….n
a64 = 4 - a63*a34
a6e= a33*a6e – a63*a3e
a33*a6
a65 = 5 - a63*a35
a33*a6 b6=a33*b6-a63*b3
a66 = 6 - a63*a36
a33*a6
a67 = 7 - a63*a37
a33*a6
a6n = n - a63*a3n
b6 = a33*b6 - a63*b3
a33*a7 a73*a33
a73 = 3 - Repetir f=3….n
a33*a7
a74 = 4 - a73*a34 a7f= a33*a7f – a73*a3f
a33*a7
a75 = 5 - a73*a35
b7=a33*b7-a73*b3
a33*a7
a76 = 6 - a73*a36
a33*a7
a77 = 7 - a73*a37
a33*a7
a7n = n - a73*a3n
b7 = a33*b7 - a73*b3
Repetir m=3….n Repetir d=3….n Repetir e=3….n
Repetir f=3….n
b7=a33*b7-a73*b3
23
Repetir p=4………….n
Repetir f=3….n
bp = a33*bp-ap3*b3
bw =a22*bw-aw2*b2
24
3era columna 4ta columna
Repetir p=4………….n
Repetir p=4………….n
bt = a44*bt-at4*b4
bp = a33*bp-ap3*b3
Repetir k=1………….n-1
Repetir i=k+1….n
Repetir j=k….n
bi = akk*bi-aik*bk
b5 b 4 −a 45∗X 5
X 5= X 4=
a55 a 44
b3 −( a34∗X 4 +a35∗X 5 )
X 3=
a33
25
n
bi − ∑ aij∗ X j
j =i+1
X i=
aii
Repetir i= n……..1
Suma =0
Repetir j=i+1……n
Suma=suma +aij*xj
Xi=(bi-suma)/aii
PSEUDOCÓDIGO
VARIABLES
INICIO
//leer datos
REPETIR i:1...n
REPETIR j: 1...n
Leer aij
Leer bi
//CALCULAR
REPETIR i:n….1
SUMA=0
REPETIR j=i+1….n
Suma=suma+aij*Xj
Xi=(bi-suma)/aii
26
REPETIR i:n….1
SUMA=0
REPETIR j=i+1….n
Suma=suma+aij*Xj
Xi=(bi-suma)/aii
//SACAR A PANTALLA
Repetir i:1…n
Imprimir Xi
FIN
27
DIAGRAMA DE FLUJO
28
LENGUAJE C
Estructura del programa
Todo programa escrito en C consta de una o más funciones, una de las cuales se llama
main. El programa siempre comenzará por la ejecución de la función main. Cada
función debe contener:
Una cabecera de la función, que consta del nombre de la función, seguido de una
lista opcional de argumentos encerrados con paréntesis.
Los argumentos son símbolos que representan información que se le pasa a la función desde
otra parte del programa.
Cada sentencia compuesta se encierra con un par de llaves, {..}. Las llaves pueden contener
combinaciones de sentencias elementales y otras sentencias compuestas. Así las sentencias
compuestas pueden estar anidadas, una dentro de otra. Cada sentencia de expresión debe
acabar en punto y coma (;)
Los comentarios pueden aparecer en cualquier parte del programa, mientras estén situados
entre los delimitadores /* ................ */ Los comentarios son útiles para identificar los
elementos principales de un programa o simplemente para orientar a un posible usuario de
ese código.
Todo fichero fuente en C sigue la siguiente estructura
Preprocesador
Tipos de datos
Variables
Funciones
Ejemplo
29
Suma de dos números
#include<iostream.h> preprocesador
float a,b,c; variables
void main() función principal
{
//ingreso de datos
cin >>a>>b;
//calculos
c=a+b;
//resultados
cout<<c;
}
Tipos de datos
Las computadoras pueden trabajar con varios tipos de datos, los algoritmos y programas
operan sobre estos. Existen dos clases de datos: datos simples y datos compuestos.
En el lenguaje C existen tres tipos de datos básicos que son el int, float y char. A
partir de estos tipos se crean otros que funcionan igual pero que difieren en el tamaño
como el long, el double, y otros. Estos que son parte del lenguaje se consideran como
tipos "primitivos"
char Caracteres
int Números enteros
float Números en coma flotante (32 bits)
double Números en coma flotante de doble precisión (64 bits)
Enteros: son el tipo de dato más primitivo en C. Se usan para representar números enteros,
valga la redundancia. Pero siempre se pueden encontrar otras aplicaciones para los números
enteros. En general se pueden usar para representar cualquier variable discreta.
Flotantes: son más modernos y se usan mucho en aplicaciones que trabajan con gráficos o que
necesitan de mucha precisión. El tipo de dato flotante en lenguaje C sólo tiene dos tamaños: el
float y el double, que son 4 bytes y 8 bytes respectivamente.
Caracteres: el tipo char solo tienen 1 byte de tamaño y usa la misma representación que los
número enteros. La única diferencia es su tamaño y que el char es usado para representar los
255 caracteres de la tabla ASCII.
30
31
DECLARACIONES
La declaración de objetos en C tiene como finalidad dar a conocer el tipo y propiedades
de los identificadores.
Todos las variables deben ser declaradas. En las declaraciones es obligado especificar el
tipo.
El alcance sirve para saber en qué región del código una declaración de un
objeto está activa, es decir, el objeto existe.
La visibilidad nos indica en qué región del código un objeto está activo. La
diferencia con el alcance es que en una misma región pueden estar dos objetos
con el mismo identificador, ocultando un objeto a otro.
tipo lista_variables;
int i, j, k;
Ejemplo:
float x,y,z;
char ch;
32
Operadores
En todos los lenguajes de programación se utilizan operadores para efectuar operaciones
aritméticas. Combinando las variables y constantes en expresiones aritméticas por
medio de funciones adecuadas.
Operadores aritméticos.
Operación Acción
+ Suma
- Resta
* Multiplicación
/ División
% resto
Operador de relación
Operador Propósito
< Menor que
<= Menor o igual que
> Mayor que
>= Mayor o igual que
== Igual
!= No igual
<> Distinto a, diferente de
Operadores lógicos.
Operado Acción
r
! Negación
lógica
&& Y lógico
|| O lógico
33
Precedencia de operadores.
Anteriormente dimos una definición de procedencia de operadores uy ua tabla
véase pag #12.
SISTEMAS DE NUMERACION
Los números se pueden representar en distintos sistemas de numeración que se diferencian
entre si por su base.
Así el sistema de numeración decimal es de base 10, el binario de base 2, el octal de base 8 y el
hexadecimal de base 16. El diseño de todo sistema digital responde a operaciones con
números discretos y por ello necesita utilizar los sistemas de numeración y sus códigos. En los
sistemas digitales se emplea el sistema binario debido a su sencillez.
34
Siendo b la base del sistema de numeración. Se cumplirá que b>1; a i es un número
perteneciente al sistema que cumple la siguiente condición: 0 ≤ a i <b.
SISTEMA DECIMAL
SISTEMA BINARIO
SISTEMA OCTAL
SISTEMA HEXADECIMAL.
35
Si la conversión es de binario a decimal, aplicaremos la siguiente regla: se toma la cantidad
binaria y se suman las potencias de 2 correspondientes a las posiciones de todos sus dígitos
cuyo valor sea 1.
#include <iostream.h>
El operador << se denomina operador de inserción; y apunta al objeto donde tiene que enviar
la información. Por lo tanto la sintaxis de cout será:
cout<<variable1<<variable2<<...<<variablen;
Por su parte >> se denomina operador de extracción, lee información del flujo cin y las
almacena en las variables indicadas a la derecha.
36
cin>>variable1>>...>>variablen;
#include <stdio.h>
1. scanf
2. printf
scanf(“%letra%letra”,&var1,&var2);
printf(“mensaje %letra”,var1);
2. Editar el programa
#include<iostream.h>
float a,b,c;
void main()
//ingreso de datos
cin >>a>>b;
//calculos
c=a+b;
//resultados
cout<<c;
37
3. Guardar el archivo
Al correr el programa solo sale la pantalla en blanco y se ingresan los valores con
un enter.
#include<stdio.h>
float a,b,c;
void main()
{
//ingreso de datos
printf("ingrese 2 numeros:");
scanf("%f%f",&a,&b);
//calculos
c=a+b;
38
//resultados
printf("el resultado es:%f",c);
}
Ejercicios
#include<iostream.h>
#include<math.h> libreria
float a,b,c;
void main()
{
//ingreso de datos comentario
cout<<"ingrese un cateto:\n";
cin>>a;
cout<<"ingrese un cateto:\n";
cin>>b;
//calculos
c=sqrt((a*a)+(b*b));
//resultados
cout<<"la hipotenusa es:\n";
cout<<c;
}
Instrucciones de control
Las estructuras condicionales comparan una variable contra otro(s) valor(es), para que en base
al resultado de esta comparación, se siga un curso de acción dentro del programa. Cabe
mencionar que la comparación se puede hacer contra otra variable o
Decisiones
Condición verdadera
Las estructuras condicionales simples se les conocen como “Tomas de decisión”. Estas tomas
de decisión tienen la siguiente forma:
Condición V, F Condición V, F
39
if( ) if( )
instrucción; {
Ejemplo:
w=sqrt(q);
}
}
if( )
instrucción;
else
40
Ejemplo
#include "stdio.h"
float a,b;
void main()
{
// ingreso de datos
printf("ingrese dos numeros\n");
scanf("%f%f",&a,&b);
// calculos
if(a>=b)
printf("A>=B");
else
printf("B>A");
}
Selección multiple
Las estructuras de comparación múltiples, son tomas de decisión especializada que
permiten comparar una variable contra distintos posibles resultados, ejecutando para cada
caso una serie de instrucciones específicas:
1. IF ANIDADO
if (( )&&( ))
instrucción;
else
if (( )&&( ))
instrucción;
else
instrucción;
Ejemplo
41
#include<stdio.h>
float n1,n2,n3;
void main()
{
//ingreso de datos
printf("ingrese tres numeros\n");
scanf("%f%f%f",&n1,&n2,&n3);
// calculos
if((n1>n2)&&(n1>n3)) if anidado
printf("el numero mayor es %f",n1);
else
if((n2>n1)&&(n2>n3))
printf("el numero mayor es %f",n2);
else
printf("el numero mayor es %f",n3);
}
2.SWITCH
switch( )
{
case __: instrucción;
break;
case __: instrucción;
break;
default: instrucción;
}
Ejemplos
#include <stdio.h>
int a;
void main()
{
// ingreso de datos
printf("ingrese un numero entero de uno a tres\n");
scanf("%d",&a);
//calculos
switch(a)
{
case 1: printf("ud ingreso el 1\n");
break;
case 2: printf("ud ingreso el 2\n");
break;
case 3: printf("ud ingreso el 3\n");
break;
default: printf("ud se equivoco");
}
}
#include "stdio.h"
enum {liga,quito,nacional,barcelona,emelec};
42
int p;
void main()
{
//ingreso de datos
printf("ingrese un numero entero:");
scanf("%d",&p);
//calculos
switch (p)
{
case liga: printf("\nliga campeon\n");
break;
case quito: printf("\nquito campeon\n");
break;
case nacional: printf("\n nacional campeon\n");
break;
case barcelona: printf("\n barcelona campeon\n");
break;
case emelec: printf("\n emelec campeon\n");
}
}
Estructuras Cíclicas
Se llaman problemas repetitivos o cíclicos a aquellos en cuya solución es necesario utilizar
un mismo conjunto de acciones que se puedan ejecutar una cantidad específica de veces.
Esta cantidad puede ser fija o puede ser variable.
REPETICION
instrucción(es);
Ejemplo
43
#include<stdio.h>
int n,suma,i;
void main()
{
//ingreso de datos
printf("ingrese n:");
scanf("%d",&n);
//calcular
suma=0;
for(i=1;i<=n;i++)
suma+=i;
printf("suma=%d",suma);
}
instrucciones;
#include<stdio.h>
int n,suma,i;
void main()
{
//ingreso de datos
printf("ingrese n:");
scanf("%d",&n);
//calcular
suma=0;
i=1;
while(i<=n)
{
suma+=i;
i++;
}
printf("suma=%d",suma);
}
instrucciones;
}while ( condición )
44
Ejemplo
#include<stdio.h>
int n,suma,i;
void main()
{
//ingreso de datos
printf("ingrese n:");
scanf("%d",&n);
//calcular
suma=0;
i=1;
do
{
suma+=i;
i++;
}while (i<=n)
printf("suma=%d",suma);
}
Ejercicios
Multiplicación con for Multiplicación con do while
#include<stdio.h> #include<stdio.h>
int n,m,i,d=0; int n,m,i,d=0;
void main() void main()
{ {
//ingreso de datos //ingreso de datos
printf("ingrese n:"); printf("ingrese n:");
scanf("%d",&n); scanf("%d",&n);
printf("ingrese m:"); printf("ingrese m:");
scanf("%d",&m); scanf("%d",&m);
//calcular //calcular
for(i=1;i<=n;i++) i=1;
d=d+m; do
printf("d=%d",d); {
} d=d+m;
i++;
} while(i<=n);
//resultados
printf("d=%d",d);
}
División con cociente y Ingresar un número y determinar si
residuo es perfecto
45
positivo:"); for (i=1;i<n;i++)
scanf("%d",&n); {
//calcular np=(n%i);
for(j=1;d>n;j++) if (np==0)
{ y=y+i;
d=d-n; }
i++; if (n==y)
} printf("El número %d es perfecto",n);
printf("cociente"); else
printf("%d",i); printf("El número %d no es
printf("residuo:"); perfecto",n);
printf("%d",d); }
}
#include<stdio.h> #include<stdio.h>
#include<string.h> #include<string.h>
char nombre1[10], nombre2[10]; char nombre[10], nombre1[10];
void main() void main()
{ {
//ingrese de datos //ingrese de nombres
printf("ingrese nombre="); printf("ingrese nombre=");
scanf("%s",&nombre1); scanf("%s",nombre);
printf("ingrese nombre="); strcpy(nombre1,"maria");
scanf("%s",&nombre2); //calculos
//calculos if(!strcmp(nombre,nombre1))
if(!strcmp(nombre1,nombre2)) printf("son iguales");
printf("son iguales"); else
else printf("son diferentes");
printf("son diferentes"); }
}
números primos factorial
46
}
ARREGLOS
Un Arreglo es una estructura de datos que almacena bajo el mismo nombre (variable)
a una colección de datos del mismo tipo.
Los arreglos se caracterizan por:
Tipos de Arreglos:
A 0
47
Cubo:
Estaticos.-
float A[10];
int [10][20];
double C[5][5][5];
Dinámicos.-
Puntero
float *A;
int **B;
double ***C;
48
Unidimensional
A [3]=10.6;
scanf (“%letra”;&A[3]);
Bidimencional
A [3][4]);
scanf (“%letra”;&A[3][4]);
scanf (“%letra”;&A[i][j]);
Tridimensional
A [3][4][5]10.6;
scanf (“%letra”;&A[3][4][5]);
scanf (“%letra”;&A[i][j][k]);
50
for (i=0;i<10;i++) }
C[i]=A[i]+B[i]; //calculos
//salida for (i=0;i<5;i++)
for (i=0;i<10;i++) for (j=0;j<5;j++)
printf("%f\t",C[i]); C[i][j]=A[i][j]+B[i][j];
printf("Para terminar ingrese //salida
un numero entero="); for (i=0;i<5;i++)
scanf("%d",&i); {
return 0; for (j=0;j<5;j++)
} printf("%f\t",C[i][j]);
printf("\n");
}
printf("Para terminar ingrese un numero
entero=");
scanf("%d",&i);
return 0;
}
// SUMA DE CUBOS
#include "stdafx.h"
float A[3][3][3],B[3][3][3],C[3][3][3];
int i,j,k;
{
printf("A[%d][%d][%d]=",i,j,k);
scanf("%f",&A[i][j][k]);
}
for (i=0;i<3;i++)
for (j=0;j<3;j++)
for (k=0;k<3;k++)
{
printf("B[%d][%d][%d]=",i,j,k);
scanf("%f",&B[i][j][k]);
}
//calculos
for (i=0;i<3;i++)
for (j=0;j<3;j++)
for (k=0;k<3;k++)
C[i][j][k]=A[i][j][k]+B[i][j][k];
//salida
for (i=0;i<3;i++)
{
printf("Plano %d\n",i);
for (j=0;j<3;j++)
{
for (k=0;k<3;k++)
printf("%f\t",C[i][j][k]);
printf("\n");
}
}
printf("Para terminar ingrese un numero entero=");
scanf("%d",&i);
51
return 0;
}
PUNTEROS
Un puntero es una variable que contiene una dirección de memoria. Normalmente, esa
dirección es la posición de otra variable de memoria. Si una variable contiene la dirección de
otra variable, entonces se dice que la primera variable apunta a la segunda.
Si una variable va a contener un puntero, entonces tiene que declararse como tal. Una
declaración de un puntero consiste en un tipo base, un * y el nombre de la variable. La forma
general es: tipo *nombre;
Donde tipo es cualquier tipo válido y nombre es el nombre de la variable puntero. El tipo base
del puntero define el tipo de variables a las que puede apuntar. Técnicamente, cualquier tipo
de puntero puede apuntar a cualquier dirección de la memoria, sin embargo, toda la
aritmética de punteros esta hecha en relación a sus tipos base, por lo que es importante
declarar correctamente el puntero.
Existen dos operadores especiales de punteros: & y *. El operador de dirección (&) devuelve la
dirección de memoria de su operando. El operador de indirección (*) devuelve el contenido de
la dirección apuntada por el operando.
Después de declarar un puntero, pero antes de asignarle un valor, éste contiene un valor
desconocido; si en ese instante lo intenta utilizar, probablemente se estrellará, no sólo el
programa sino también el sistema operativo. Por convenio, se debe asignar el valor nulo a un
puntero que no este apuntando a ningún sitio, aunque esto tampoco es seguro.
Ejemplos
int *a,b,c; 4
float *e,f,g; 1,1
double *h,i,j; 2,001
char *k,l,m; A
a=&b;
e=&f;
52
La indirección o contenido se obtiene con el siguiente arreglo:
(*a)
Para obtener las direcciones de las variables nos valemos del siguiente arreglo:
Printf(“%P%P%P”,&e,&f,&g);
Printf(“%X%X%X”,&e,&f,&g);
Ejemplo 1:
//punteros
#include "stdafx.h"
float *a,*b,c,d,e;
53
Punteros del tipo **q
p q r
Ejemplo 2
//punteros
#include<stdio.h>
float **a,*b,c,d;
void main()
{
a=&b;
b=&c;
printf("c=");
scanf("%f",&c);
printf("d=");
scanf("%f",&d);
printf("\n");
d=2*(**a);
printf("d=%f\t",d);
printf("\n\n direcciones \n\n");
printf("&a=%x\t &b=%x\t &c=%x\t &d=%x\n",&a,&b,&c,&d);
printf("\n\n contenidos \n\n");
printf("a=%x\t b=%x\t c=%f\t d=%f\n",a,b,c,d);
}
1) A una variable de puntero se le puede asignar una dirección de una variable normal
(mismo tipo de dato):
pV=&a;
2) Una variable de puntero puede aceptar otra variable de puntero (mismo tipo de dato).
54
pV=pV;
pV=null;
pV+3
pV-3 pV pV+1 pV+2 pV+3 …… ……
pV++
pV--
5) Una variable de puntero puede ser comparada con otra variable de puntero (mismo
tipo de dato).
pX<=pY
pX!=pZ
También podemos decir que.. existen sólo dos operaciones aritméticas que se puedan
usar con punteros: la suma y la resta.
Cada vez que se incrementa un puntero, apunta a la posición de memoria del siguiente
elemento de su tipo base. Cada vez que se decremento, apunta a la posición del elemento
anterior. Con punteros a caracteres parece una aritmética normal, sin embargo, el resto de los
punteros aumentan o decrecen la longitud del tipo de datos a los que apuntan.
Por ejemplo, si asumimos que los enteros son de dos bytes de longitud y p1 es un puntero a
entero con valor actual 2000. Entonces, después de la expresión p1++; p1 contiene el valor
2002, no 2001.
No pueden realizarse otras operaciones aritméticas sobre los punteros más allá de la suma y
resta de un puntero y un entero. En particular, no se pueden multiplicar o dividir punteros y no
se puede sumar o restar el tipo float o el tipo double a los punteros.
Punteros y arreglos
Un arreglo es un conjunto de variables del mismo tipo que pueden ser referenciadas a través
de un mismo nombre. La forma de identificar a un elemento determinado es a través de un
índice.
55
Función Operador
malloc() new
free() delete
Ejemplo 1:
#include "stdafx.h"
float **a,**b,**c;
int i,j,n;
//ingreso de datos
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{ printf("A[%d][%d]=",i+1,j+1);
scanf("%f",&a[i][j]);
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{ printf("B[%d][%d]=",i+1,j+1);
scanf("%f",&b[i][j]);
}
//calculos
for(i=0;i<n;i++)
for(j=0;j<n;j++)
56
c[i][j]=a[i][j]+b[i][j];
//salida
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%f\t",c[i][j]);
printf("\n");
}
//liberacion de memoria
for(i=0;i<n;i++)
{
delete []a[i];
delete []b[i];
delete []c[i];
}
delete []a;
delete []b;
delete []c;
Ejemplo 2:
#include "stdafx.h"
float **A,*B,*X,aux,sum=0.0;
int n,i,j,k;
//toma de memoria
printf("INGRESE LA DIMENSION N=");
scanf("%d",&n);
A=new float*[n];
B=new float[n];
X=new float[n];
for(i=0;i<n;i++)
A[i]=new float[n];
57
//ingreso de la matriz
for (i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("ingrese el elemento:A[%d][%d]= ",i+1,j+1);
scanf("%f",&A[i][j]);
}
printf("Ingrese el elemento B[%d]=",i+1);
scanf("%f",&B[i]);
}
//calculos
for(k=0;k<n-1;k++)
for(i=k+1;i<n;i++)
{
aux=A[i][k];
for(j=k;j<n;j++)
A[i][j]=A[k][k]*A[i][j]-aux*A[k][j];
B[i]=A[k][k]*B[i]-aux*B[k];
}
for(i=n-1;i>=0;i--)
{
sum=0.0;
for(j=i+1;j<n;j++)
sum+=A[i][j]*X[j];
X[i]=(B[i]-sum)/A[i][i];
}
//imprimir
// LIBERACION DE LA MEMORIA
for(i=0;i<n;i++)
delete []A[i];
delete []A;
delete []B;
delete []X;
Subprogramas
58
tipodato
nombre(datos a
ingresar o salir del subprograma cada uno con su tipo de dato)
{
variables locales
-
-
return var td;
}
Ejemplo 1:
#include "stdafx.h"
#include "math.h"
float y2,q;
int a,b,c,d;
float f1(float z)
{
float x1,r=8.9;
y2=(q+r)/z;
x1=sqrt(y2);
return x1;
}
void f2(int p, int q);
59
}
void f2(int p, int q)
{
float x,y;
y=p-q;
x=y+5;
a=y;
b=x;
}
Ejemplo 2:
# include "stdafx.h"
float x,y,z;
printf("y=");
scanf("%f",&y);
printf("z=");
scanf("%f",&z);
f3(x,&y,&z);
printf("x=%f\t y=%f\t z=%f\t\n\n",x,y,z);
printf("ingresa un numero para poder terminar");
scanf("%f",&y);
return 0;
}
60
Ejemplo 3:
#include "stdafx.h"
float **A,*B,*X,aux,sum=0.0;
int n,i,j,k;
for(i=n-1;i>=0;i--)
{
sum=0.0;
for(j=i+1;j<n;j++)
sum+=A[i][j]*X[j];
X[i]=(B[i]-sum)/A[i][i];
}
void imprimir(float *X,int n);
int _tmain(int argc, _TCHAR* argv[])
{
//toma de memoria
printf("INGRESE LA DIMENSION N=");
scanf("%d",&n);
A=new float*[n];
B=new float[n];
X=new float[n];
61
for(i=0;i<n;i++)
A[i]=new float[n];
leer (A,B);
calculo(A,B,X,n);
imprimir(X,n);
// LIBERACION DE LA MEMORIA
for(i=0;i<n;i++)
delete []A[i];
delete []A;
delete []B;
delete []X;
printf("\n\nPara terminar ingrese un numero entero=");
scanf("%d",&i);
return 0;
Ejemplo 4:
Realizar un programa que sume los elementos pintados en una matriz de orden n:
#include "stdafx.h"
float **a,suma;
int i,j,n;
62
}
}
void calculo(float**x,int w)
{
for(i=0;i<w;i++)
if (i%2==0)
for(j=0;j<w;j+=2)
suma+=a[i][j];
else
for (j=1;j<n;j+=2)
suma+=a[i][j];
}
//imprimir matriz
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%f\t",a[i][j]);
}
printf("\n");
}
printf("\n");
printf("la suma es %f",suma);
//borrar memoria
for(i=0;i<n;i++)
{
delete []a[i];
}
delete []a;
63
Ejemplo 5:
Realizar un programa que muestre los coeficientes que genera el triangulo de pascal
#include <iostream.h>
#include <conio.h>
void main()
{
int nf, r,x=40,y=1;
float f1=0, f2=0, f3=0;
// Limpiamos Pantalla
clrscr();
clrscr();
// Salto de linea
cout << "\n";
x -= 1;
y +=1;
}
64
// Funcion factorial segun valor dado.
float nfa(int b)
{
float fact=1;
return fact;
}
18-06-2009
REFERENCIA
Actúa como un puntero toma la dirección de un objeto (Variable) pero funcionan de diferente
manera. Una vez inicializado ya no se puede modificar
Tipo dato & Variable
Referencia Punteros
int i; *r;
Int &r=i ; r=&I;
r=400; *r=400
#include<………….>
Int I, &x=I;
main(…….)
{
i=2;
x*=100;
printf(“i=%d”,i);
printf(“\n x=%d”,x);
trampa
}
#include………….
int i=45, &j=i;
int fun_1(intj);
65
main(….)
{
printf(“i=%d\t j=%d\n”, i,j);
i=fun_1(j);
printf(“i=%d\t j=%D\n”,i,j);
}
Int fun_1(int j)
{
j=4;
retur n j;
}
ESTRUCTURA EJEMPLO
Int &fun2(int &k) #include………….
{ Int z[10];
int &element(int*v, int i)
{
return V[i];
}
return k; main(….)
} {
I=fun2(k); Element(z,2)=45;// z[2]=45
printf(“\n z[2]=%d”, z[2]);
Z[2]=45; }
EJEMPLO
#include………….
Int x=22, y=33, &z=x,&w=y;
void f1(int a, int b);
void f2(int*a,int*b);
void f3(int &a,int &b);
main(….)
{
printf(“\n x=%d \t y=%d \n”,x,y);
f1(x,y);
66
printf(“\n x=%d \t y=%d \n”,x,y);
f2 (&x,&y);
printf(“\n x=%d \t y=%d \n”,x,y);
f3(z,w);
printf(“\n x=%d \t y=%d \n”,x,y);
trampa
}
Void f1(int a, int b)
{
int aux;
aux=a;
a=b;
b=aux;
}
Void f2(int *a, int *b)
{
int aux;
aux= *a;
*a=*b
*b=aux;
}
void f3 (int &a, int b)
{
int aux;
aux=a;
a=b;
b=aux
}
22-06-2009
ESTRUCTURAS
Formato.-
Formato Ejemplo
Struct xxx Struct circuito
{ {
….. float voltaje
…… datos simples Float corriente
67
…… Float Resistencia
}; };
Anidamiento de estructuras.-
datos z;
z. nombre
z.nacimiento.mes
struct fecha
{
int dia;
int mes;
int anio;
};
struct datos
{
char nombre [15];
char direccion[20];
fecha nacimiento;
float sueldo;
int hijos;
};
Asignación de estructuras
A=Z;
A,Z son del mismo tipo de estructuras, los valores de asignan a los mismos campos
A.campo1 = Z.campo1;
A.campo2= Z.campo 2;
A.campo3.p = Z.campo3.p;
Ejemplo
1.- Leer datos
Scanf(“%f”, &z.campon);
3.-
W=(a+z.campon * p)/ y.campo2;
EJERCICIO
68
# include……
Struct circuito
{
float v;
Float I;
Float r;
};
Circuito a;
tmain(…..)
{
#ingreso de datos
printf(“v= i=”);
scanf(“%f%f”, & a.v,&a.i);
//calculo
a.r=a.v/a.i;
//salida
printf(“r=%5.3f”,a.r);
}
69
v,i,r;
};
int j,n;
circuito *a;
…….main(…)
{
// toma de memoria
Printf(“n”);
Scanf(“%d”,&n);
a=new circuito[n];
// ingreso de datos
For(j=0; j<n ; j++)
{
Printf(“v= , i= “);
Scanf(“%f%f”,&a[j].v, &a[j].i);
}
//calculo
For(j=o; j<n; j++)
A[j].r=a[j].v/a[j].i;
// salida
For(j=0; j<n; j++)
Printf(“r=%5.3f\n”, a[j].r);
delete[ ]a;
trampa
}
//estructuras y funciones
#include….
Struct circuito
{
Float v,i,r;
};
Int j,n;
Circuito *a;
Void leer (circuito *x, int w)
{
For(j=0; j<w; j++)
{
Printf(“v= i= “);
Scanf(“%f%f”,&x[j].v, &x[j].i);
}
}
Void calculo(circuito *x,int w)
{
For(j=0; j<w; j++)
x[j].r=x[j].v/x[j].i;
}
Void salir( circuito *x,int w)
{
For(j=0; j<w; j++)
Printf(“r=%5.3f\n”, x[j].r);
70
}
….main(….)
{
//toma de memoria
Printf(“n=”);
Scanf(%d”,&n);
A=new circuito [n];
Leer(a,n);
Calculo(a,n);
Salir(a,n);
//borrar memoria
Delete[]a;
trampa
V i r
v=[1]
i[4]
r[7]
j v,i,r
25-06-2009
f(x) Audio
>>wapread >>waplay
>>aviread >>avifile
71
Grafico (foto)
* .*
/ ./
Matlab
C:\elect1.jpg
C:\elect2.jpg
>>x=imread(‘c:\elect1.jpg’); y=imread(‘c:\elect.jpg’)
>>imshow(x) ---
>>p1=x+7 ---
>>imshow(p1)
>>p3=x.*5
>>imshow(q3)
z=x + y si es posible
imshow(z)
29-06-2009
Estructuras auto-referenciadas
a b
72
Inf Inf
dirección Dirección
a direc=&b;
a inf=12;
Estructuras auto-referenciadas
§1 sinopsis
Las estructuras se utilizan con frecuencia como elementos de estructuras de datos tipo árbol y
lista. En estos casos, un conjunto de objetos del mismo tipo, están relacionadas entre sí
mediante punteros contenidos en ellos mismos, de forma que basta conocer la raíz del árbol o
principio de la lista, para poder acceder a todo el conjunto. En ocasiones, si tales listas son
doblemente enlazadas, es posible entrar en cualquier nodo y recorrer la totalidad del conjunto en
cualquier sentido. Esta es la razón del apelativo "auto-
referenciadas".
Ejemplo:
#include "stdafx.h"
struct nodo
{
float inf;
nodo *direc;
};
nodo *a,*b;
int n;
{
a=new nodo;
a->inf=12.4;
a->direc=NULL;
b=new nodo;
b->inf=10.5;
b->direc=NULL;
73
a->direc=b;
b=NULL;
printf("a->inf=%5.2f\n",a->inf);
b=a->direc;
printf("a->inf=%5.2f\n",b->inf);
printf("ingrese un numero");
scanf("%d",n);
return 0;
}
30-06-2009
CREAR LISTAS
#include "stdafx.h"
int n;
struct nodo
{
char nombre[10];
float inf;
nodo *direc;
};
74
printf("Ingresar otro nodo s/n=?");
scanf("%c",&op);
}
aux=A;
while(aux!=NULL)
{
printf("%s\t%f",aux->nombre,aux->inf);
aux=aux->direc;
}
printf("\n\ningrese un numero para terminar\n");
scanf("%d",&n);
return 0;
}
LISTAS
#include "stdafx.h"
struct nodo
{
char nombre[10];
float inf;
nodo *direc;
};
int n,m=1;
nodo *A, *q, *aux;
char op='s';
75
aux=A;
while(aux!=NULL)
{
printf("%s\t%5.2f\n",aux->nombre,aux->inf);
aux=aux->direc;
}
printf("\n\ningrese un numero para terminar\n");
scanf("%d",&n);
return 0;
}
#include "stdafx.h"
struct nodo
char nombre[10];
float edad;
nodo *direc;
};
int b,m=2;
nodo *A,*aux,*ULT;
ULT=NULL;
while (m==2)
76
scanf("%d",&b);
switch (b)
case 1: if(A==NULL)
scanf("%s",&aux->nombre);
scanf("%f",&aux->edad);
aux->direc=NULL;
A=ULT=aux;
else
aux=new nodo
scanf("%s",&aux->nombre);
scanf("%f",&aux->edad);
aux->direc=NULL;
ULT->direc=aux;
ULT=aux;
break;
printf("esta vacio");
else
if (A==ULT)
77
aux=A;
A=ULT=NULL;
delete aux;
else
aux=ULT;
ULT=A;
while (ULT->direc!=aux)
ULT=ULT->direc;
delete aux;
aux=A;
while (aux!=NULL)
printf(" nombre%s\n",aux->nombre);
printf(" edad%f\n",aux->edad);
scanf("%d",&m);
scanf("%d",&b);
78
}
# include <iostream.h>
struct nodo
int info;
nodo *sig;
};
char op='s';
int op1=0;
void main ()
a=NULL;
while (op!='n')
cin >>op1;
switch (op1)
cin>>aux->info;
if (a==NULL)
a=aux;
79
aux->sig=NULL;
else
r=a;
if(aux->info<r->info)
aux->sig=a;
a=aux;
else
while((r->sig->info<aux->info)&&r->sig!=NULL)
r=r->sig;
if(r->sig!=NULL)
{aux->sig=r->sig;r->sig=aux;}
if(r->sig==NULL)
{aux->sig=NULL;r->sig=aux;}
break;
case2: cin>>clave;
if (a==NULL)
else
{r=a;
if (clave==r->info)
{//elimina primero
80
a=a->sig;
delete r;
else
while((clave!=r->sig->info)&&(r->sig!NULL))
r=r->sig;
p=r->sig;
if(p!=NULL)
if(p->sig!=NULL)
r->sig=p->sig;
if(p->sig==NULL)
r->sig=NULL;
delete p;
if(p==NULL)
} //del switch
//Impresion de la lista
r=a;
while(r!=NULL)
cout<<r->info;
r=r->sig;
81
}
cout<<"Continuar (s/n)?";
cin>>op;
02-07-2009
LISTAS
1.- INICIO
aux=new nodo;
scanf(“%f”,&aux inf);
aux direc = A;
A= aux;
BORRAR
aux=A;
A= aux direc;
delete aux;
82
aux = new nodo;
p direc=aux
BORRAR
P direc=aux;
delete aux
p direc = aux
BORRAR
delete aux;
include “stdafx.h”
struct nodo
float edad;
83
nodo *direc;
};
int m=2; b;
Main (……)
A=NULL;
while (m==2)
scanf(“%d”,&b);
switch(b)
scanf(“%f”,&aux edad);
aux direc=A;
A=aux;
Break;
Case 2: if(A==NULL)
printf(“Está vacío”);
else
aux=A;
A= aux direc;
delete aux;
84
}
aux=A
while(aux!=NULL)
scanf(“%d”,&m);
TRAMPA
09-07-2009
Auto
Static
Volatile
85
EJEMPLO:
Void f1()
a=a+10;
printf(“%d\n”;a);
Main(..)
f1();// 20
f2();// 30
f3() ;// 40
COMANDOS DE PROCESADORES
#define
#undef
#if
#else
#endif
#ifdef
#ifndef
#pragma
#error
86
#line
fie.cpp
# include"stdafx.."
#include"e:\fie\trabajo\uno.cpp"
#include"f:\electronica\tres.cpp"
Main(...)
uno.cpp
void fi()
printf("HOLA");
tres.cpp
void f2()
printf("TRES");
....................\
....................\
#define M 4
j=i+2; \
for(k=j; k<20;k++)\
printf("*"); \
87
printf("\n") \
main()
p=m+5;
#undef m
rutina;
13-07-2009
#indef uno_h
#define uno_h
Struct dato
Int x;
};
#endif
#include….
#include “uno.h”
Dato a;
……main()
Scanf(“%s”,&a.nombre);
88
#include “uno.h”
Scanf(“%d”,&a.x);
Printf(“%s\t%d”,a.nombre,a.x);
LOS ARCHIVOS
stream: debe ser una variable tipo apuntador a un archivo FILE *<nombre-variable>
modo: al igual que el nombre-archivo se puede expresar entre comillas o a travez de un arreglo
de caracteres;
89
simbolo si existe el archivo si
no existe
r abre archivo para lectura error: regresa NULL
w abre archivo para escritura crea archivo y abre escritura
a abre archivo para añadir crea archivo y abre escritura
b declara archivo como binario
(manejado por fread() y fwrite())
+ permite lectura y escritura
main()
{
FILE *p, *q;
char nombre[25], modo[5];
if ( p = fopen(''ejemplo.txt'', ''w+''))
{
...
}
else
{
printf(''\n Error: no se pudo abrir el archivo \n'');
exit(1)
}
...
Numeros
Estructuras
Imágenes
Audio
File *p,*q,*f
Video
p=fopen (“ nombre del archivo”,” + ”)
a b binario
90
r
fclose(p);
fwrite(&dato,sizeof(dato),1,P);
fread(&dato,sizeof(dato),1,p);
fseek (f,cont*sizeof(dato),SEEK_SET);
while(¡feof(p))
EJEMPLO.-
#include "stdafx.h"
struct datos
{
char nombre[10];
float nota1;
};
FILE *f;
datos *a;
int cont,opp;
int _tmain(int argc, _TCHAR* argv[])
{
f=fopen("c:\datos.dat","a+b");
scanf("%s",&a.nombre);
scanf("%f",&a.nota1);
fwrite(&a,sizeof(a),1,f);
fclose(f);
f=fopen("c:\datos.dat","r+b");
fread(&a,sizeof(a),1,f);
cont=1;
while(!feof(f))
{
printf("cont=%d",cont);
printf("%s\t%f\n",a.nombre,a.nota1);
fread(&a,sizeof(a),1,f);
cont++;
}
fclose(f);
f=fopen("c:\datos.dat","r+b");
printf("posicion=");
scanf("%d",&opp);
fseek(f,opp*sizeof(a),SEEK_SET);
fread(&a,sizeof(a),1,f);
printf("%s\t%f\n",a.nombre,a.nota1);
fclose(f);
91
printf("ingrese un numero");
scanf("%d",&cont);
return 0;
}
Bibliografía
http://www.geocities.com/eztigma/lenguajec.html
http://www.mailxmail.com/curso-introduccion-lenguaje-c/declaraciones
92
http://www.fismat.umich.mx/mn1/manual/node3.html#SECTION00330000000000000000
http://elvex.ugr.es/decsai/c/apuntes/tipos.pdf
http://ar.geocities.com/luis_pirir/cursos/operadores.htm
93