Programacion Basica

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 94

Introducción

Fases para desarrollar algoritmos


Pseudocódigos
Implementación en un lenguaje de alto
nivel(lenguaje C)
Estructura de control
2. Modulación y arreglos
Funciones punteros
Ámbito de los identificadores
Funciones recursivas
Modo grafico
Elaboración de proyectos
Arreglos
3. Punteros, cadenas, estructuras, archivos y
preprocesador c
Aritmética de punteros
Cadenas
Estructuras
Archivos
Preprocesador c
.Lenguaje algorítmico
Definición del problema
Análisis del problema
Prueba de escritorio Algoritmo

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:

Analisis del problema.


Con un ejemplo podemos analizarlo, en nuestro caso utilizaremos el
producto 4*5:
4 + 4 + 4 + 4 + 4
0

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.- usando restas encontrar el cociente entre m/n

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

repetir i (cociente) d (residuo) n


0 0 28 3
1 1 25 3
2 2 22 3
3 3 19 3
4 4 16 3
5 5 13 3
6 6 10 3
7 7 7 3
8 8 4 3
9 9 3 3
1

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:

a m izq derecha1 Izquierda2 numero_ numero_2


1
subrayado

CONSTANTES
Valores fijos que no cambian en la ejecución del programa
Ejemplo:

Constante pi (que vale3.1416)

ALGORITMO
Secuencia ordenada de pasos para resolver un problema (programa).
Diagrama de flujo
Pseudocódigos

1.- Diagramas de flujo

Un diagrama de flujo es una representación gráfica de un algoritmo o de una parte del


mismo. Los diagramas de flujo ayudan en la comprensión de la operación de las
estructuras de control (Si, Mientras).

La ventaja de utilizar un algoritmo es que se lo puede construir independiente mente de


un lenguaje de programación, pues al momento de llevarlo a código se lo puede hacer
en cualquier lenguaje.

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.

Nombre Símbolo Función


Representa el inicio y fin de un
programa. También puede representar
Terminal una parada o interrupción programada
que sea necesaria realizar en un
programa.
Entrada / salida Cualquier tipo de introducción de datos
en la memoria desde los periféricos o

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.

Reglas de los diagramas de flujo

 Debe de indicar claramente dónde inicia y dónde termina el diagrama.


 Cualquier camino del diagrama debe de llevarte siempre a la terminal de fin.
 Organizar los símbolos de tal forma que siga visualmente el flujo de arriba hacia
abajo y de izquierda a derecha.
 No usar lenguaje de programación dentro de los símbolos.
 Centrar el diagrama en la página.
 Las líneas deben ser verticales u horizontales, nunca diagonales.

2.- pseudocódigo

(falso lenguaje), es una serie de palabras léxicas y gramaticales referidos a los


lenguajes de programación, pero sin llegar a la rigidez de la sintaxis de estos ni a
la fluidez del lenguaje coloquial. Esto permite codificar un programa con mayor
agilidad que en cualquier lenguaje de programación, con la misma validez
semántica, normalmente se utiliza en las fases de análisis o diseño de Software,
o en el estudio de un algoritmo. Forma parte de las distintas herramientas de la
ingeniería de software.

6
EJEMPLOS DE DIAGRAMAS Y PSEUDOCODIGOS

Para división m/n


DIAGRAMA DE FLUJO PSEUDOCODIGO
Variables
inicio Contador, izq,derecho
Inicio
leer(izq,derecho)
Leer (izq, derecho) contador=0

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

DIAGRAMA DE FLUJO PSEUDOCODIGO

Variables
inicio distancia,tiempo,velocidad

Inicio
leer(distancia,tiempo)
Leer (distancia, tiempo)
si t>0

t>0 velocidad = distancia /tiempo


Si no Imprimir
velocidad
si
Velocidad = distancia tiempo

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

EJEMPPLO DE PSEUDOCODIGO CON SUMA DE MATRICES

A= A11 A12 A13


A21 A22 A23
A31 A32 A33

B11 B12 B13


B=
B21 B22 B23
B31 B32 B33

A11 + B11 A12 + B12 A13 + B13


A+B=c=
A21 + B21 A22 + B22 A23 + B23
A31 + B31 A32 + B32 A33 + B33

10
DESARROLLO PARA VER EL ALGORITMO
Repetirj=1 hasta j=n Repetirj=1 hasta j=n Repetirj=1 hasta j=n

C1j=A1j+B1j C2j=A2j+B2j C3j=A3j+B3j

Repetir i=1 hasta n

Repetir j=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.

Operador Propósito Asociatividad


:: Scope (unario) De derecha a izquierda
:: Scope (binario) De izquierda a derecha
-> . Selección de miembros De izquierda a derecha
[] Índices De izquierda a derecha
() Llamada a función De izquierda a derecha
++ Postincremento De izquierda a derecha
-- Postdecremento De izquierda a derecha
sizeof Tamaño de un objeto De derecha a izquierda
++ Preincremento De derecha a izquierda
-- Predecremento De derecha a izquierda
*&+-!~ Operadores unarios De derecha a izquierda
new Crea un objeto De derecha a izquierda
delete Borra un objeto De derecha a izquierda
() Conversión de tipo (type cast) De derecha a izquierda
->* .* Puntero a un miembro De izquierda a derecha
*/% Operadores multiplicativos De izquierda a derecha
+- Operadores aditivos De izquierda a derecha
<< >> Operadores bitwise De izquierda a derecha
< > <= >= Operadores de relación De izquierda a derecha
== != Operadores de igualdad De izquierda a derecha
& Y bitwise De izquierda a derecha
^ bitwise O exclusivo De izquierda a derecha
| bitwise O inclusivo De izquierda a derecha
&& Y lógico De izquierda a derecha
|| O lógico De izquierda a derecha
?: Operador condicional De derecha a izquierda
= *= /= += -= >*gt;= Operadores de asignación De derecha a izquierda
&= ^= |= %= <<=
, Operador coma De derecha a izquierda

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

C11 A11 B1 + A1 B21 + A13 B3 + A1 B4 + A15 B51


= 1 2 1 4 1
C21= A21 B1 + A2 B21 + A23 B3 + A2 B4 + A25 B51
1 2 1 4 1
C31= A31 B1 + A3 B21 + A33 B3 + A3 B4 + A35 B51
1 2 1 4 1
C41= A41 B1 + A4 B21 + A43 B3 + A4 B4 + A45 B51
1 2 1 4 1
C51= A51 B1 + A5 B21 + A53 B3 + A5 B4 + A55 B51
1 2 1 4 1

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

C11 A11 B1 + A1 B21 + A13 B3 + A1 B4 + A15 B51


= 1 2 1 4 1

C12= A11 B1 + A12 B2 + A13 B32 + A14 B4 + A15 B52


C14 A11 B1 + A12 B2 + A13 B34 + A14 B44 + A15 B54
2 2 2
= 4 4
C15 C13=
A11 A1
B1 + A12
B13 B2
+ A1 + A13
B23 B35 B33
+ A13 + A14 B4 B43
+ A14 + A15 B55 B53
+ A15
= 15 25 5 E
XAMINANDO fila 1

1.- C11 y C12

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)

Repetir K:1 hasta n


Suma = suma + A1k Bk1
C11 = suma

2.- C13

Repetir r:1 hasta n


C13=suma
Suma = suma + A1r Br3
3.- C14

Repetir m:1 hasta n


Suma = suma + A1m Bm4 C14=suma

4.- k=q=r=m:1 hasta n entonces para la PRIMERA FILA

Repetir j=1 hasta n


Suma =0

Repetir k=1 hasta n

14
Suma =suma + A1kBkj

C1j=suma

EXAMINANDO fila 2

Repetir j=1 hasta n


suma =0

Repetir k=1 hasta n


suma =suma + A2kBkj

C2j=suma

EXAMINANDO fila 3

Repetir j=1 hasta n


suma =0

Repetir k=1 hasta n


suma =suma + A3kBkj

C3j=suma

EXAMINANDO fila 4

Repetir j=1 hasta n


suma =0

Repetir k=1 hasta n


suma =suma + A4kBkj

C4j=suma

Ojo se puede observar que cambia


OJO SE PUEDE OBSERVAR QUE CAMBIA UNICAMENTE

Repetir j=1 hasta n


suma =0

15
Repetir k=1 hasta n
suma =suma + A kBkj

C j=suma

ENTONCES el algoritmo de multiplicación de matrices queda asi:

Repetir i=1 hasta n

Repetir j=1 hasta n


suma =0

Repetir k=1 hasta n


suma =suma + AikBkj

Cij=suma

Con pseudocódigos escalonar matrices.


Para realizar el estudios de este ejercicio es necesario que estudiemos por lo menos una matriz
de orden 5, para poder tener una mejor visualización de los ejercicios.

16
MATRIZ DE ORDEN n CON CEROS BAJO LA DIAGONAL

a11 a12 a13 a14 …… a1n


a21 a22 a23 a24 …… a2n
a31 a32 a33 a34 …… a1n
a41 a42 a43 a44 …… a2n
a51 a52 a53 a54 …… a1n
a61 a62 a63 a64 …… a2n
am
1 am2 am3 am4 …… a1n

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 k=1….n Repetir d=1….n Repetir t=1….n

a2k= a11*a2k - a21*a1k a3d= a11*a3d - a31*a1d a4t= a11*a4t - a41*a1t

Repetir p=1….n Repetir r=1….n

a5p= a11*a5p – a51*a1p a6r= a11*a6r – a61*a1r

Repetir j=2….n

a3d= a11*a3d
Repetir k=1….n
- a31*a1d

ajk= a11*ajk - aj1*a1k

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

Repetir k=2….n Repetir q=2….n


Repetir z=2….n
a3k= a22*a3k – a32*a2k a5q= a22*a5q – a52*a2q
a4z= a22*a4z – a42*a2z

b3=a22*b3-a32*b2 b3=a22*b3-a32*b2 b5=a22*b5-a52*b2

Repetir t=2….n Repetir r=2….n

a6t= a22*a6t – a62*a2t a7r= a22*a7r – a72*a2r

b6=a22*b6-a62*b2 b7=a22*b7-a72*b2

Repetir w= 3……..n

21
Repetir z=2….n

awz = a22*awz – aw2*a2z


bw =a22*bw-aw2*b2
Tercera Columna

a. Cuarta Fila

a33*a4 Repetir m=3….n


a43 = 3 - a43*a33
a4m= a33*a4m – a43*a3m
a33*a4
a44 = 4 - a43*a34
a33*a4 b4=a33*b4-a43*b3
a45 = 5 - a43*a35
a33*a4
a46 = 6 - a43*a36
a33*a4
a47 = 7 - a43*a37
a33*a4
a4n = n - a43*a3n

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

d.= Séptima Fila

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

a4m= a33*a4m – a43*a3m a5d= a33*a5d – a53*a3d a6e= a33*a6e – a63*a3e

b4=a33*b4-a43*b3 b5=a33*b5-a53*b3 b6=a33*b6-a63*b3

Repetir f=3….n

a7f= a33*a7f – a73*a3f

b7=a33*b7-a73*b3

23
Repetir p=4………….n

Repetir f=3….n

apf = a33*apf – ap3*a3f

bp = a33*bp-ap3*b3

Visualizando todas las fórmulas de las columnas:

1era colmuna 2da columna

Repetir j=2….n Repetir w= 3……..n

a3d= a11*a3d - a31*a1d


Repetir k=1….n
Repetir z=2….n
ajk= a11*ajk - aj1*a1k
awz = a22*awz – aw2*a2z

bw =a22*bw-aw2*b2

24
3era columna 4ta columna

Repetir p=4………….n
Repetir p=4………….n

Repetir f=3….n Repetir v=4….n

apf = a33*apf – ap3*a3f atv = a44*atv – ap4*a4v

bt = a44*bt-at4*b4
bp = a33*bp-ap3*b3

Fórmula para hacer ceros bajo la diagonal:

Repetir k=1………….n-1

Repetir i=k+1….n

Repetir j=k….n

aij = akk*aij – aik*akj

bi = akk*bi-aik*bk

Para encontrar las raíces:


examinamos las 5 raíces
ultimas

b5 b 4 −a 45∗X 5
X 5= X 4=
a55 a 44

b3 −( a34∗X 4 +a35∗X 5 )
X 3=
a33

b2 −( a 23∗X 2 +a24∗X 4 + a25∗X 5 )


X 2=
a22

b1 −(a 11∗X 2 +a 13∗X 3 +a14∗X 4 +a 15∗X 5 )


X 1=
a11

25
n
bi − ∑ aij∗ X j
j =i+1
X i=
aii

Formula que encuentra raíces:

Repetir i= n……..1

Suma =0

Repetir j=i+1……n

Suma=suma +aij*xj

Xi=(bi-suma)/aii

PSEUDOCÓDIGO

VARIABLES

Matriz ann, vector bn, vector Xn


Suma i,j,k

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.

Una lista de declaración de argumentos, si se incluyen estos en la cabecera.

Una sentencia compuesta, que contiene el resto de la función


 

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 y/o prototipos de funciones

Función principal (programa principal)

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.

Los distintos tipos de datos se representan como un conjunto o secuencia de dígitos


binarios (bits). Los lenguajes de programación de alto nivel nos permiten basarnos en
abstracciones para no manejar los detalles de representación interna.

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"

Tipos de datos básicos

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.

De cada objeto en un programa C se puede establecer tres propiedades que le afectan en


su relación: el alcance, la visibilidad y la durabilidad.

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.

La durabilidad es el tiempo de ejecución del programa donde el objeto existe


en la memoria. La durabilidad puede ser:

Estática: El objeto perdura desde la compilación hasta el final.

Local: El objeto es creado en la entrada de un bloque y es borrado a la salida.

Para declarar una variable en C, se debe seguir el siguiente formato:

tipo lista_variables;

tipo es un tipo válido de C y lista_variables puede consistir en uno o más


indentificadores separados por una coma.

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.

Los operadores aritméticos que se pueden utilizar en C++ son:

Operación Acción
+ Suma
- Resta
* Multiplicación
/ División
% resto

Operador de relación

Los operadores relacionales comparan sus operandos y devuelven el valor 1 si la


relación es cierta, y 0 si no lo es. Son:

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.

Los operadores lógicos que se pueden utilizar en C++ son:

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.

Prioridad de los operadores


Prioridad Operador(es)
Más alta ( ) [ ] ->
  ! ~ ++ -- - (tipo) * & sizeof
  */%
  +-
  << >>
  < <= > >=
  == !=
  &
  ^
  |
  &&
  ||
  ?
  = += -= *= /=
Más baja ,

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.

Cualquier número de cualquier base se puede representar mediante la siguiente ecuación


polinómica:

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

Emplea 10 caracteres o dígitos diferentes para indicar una determinada cantidad: 0, 1,


2, 3, 4, 5, 6, 7, 8, 9

Si el número contiene decimales:

SISTEMA BINARIO

Es el sistema digital por excelencia, aunque no el único, debido a su sencillez. Su base es 2


Emplea 2 caracteres: 0 y 1. Estos valores reciben el nombre de bits (dígitos binarios). Así,
podemos decir que la cantidad 10011 está formada por 5 bits. Veamos con un ejemplo como
se representa este número teniendo en cuenta que el resultado de la expresión polinómica
dará su equivalente en el sistema decimal:

SISTEMA OCTAL

Posee ocho símbolos: 0, 1, 2, 3, 4, 5, 6, 7. Su base es 8.

SISTEMA HEXADECIMAL.

Está compuesto por 16 símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Su base es 16. Es uno


de los sistemas más utilizados en electrónica, ya que además de simplificar la escritura de los
números binarios, todos los números del sistema se pueden expresar en cuatro bits binarios al
ser 16 = 24

Conversión de un sistema a otro

Transformar el número decimal 100 en binario.

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.

1011112 = 1.25+0.24+1.23+1.22+1.21+1.20 = 4510

101012= 1.24+0.23+1.22+0.21+1.20 = 2110

Entrada y salida de datos


En el lenguaje c++ tenemos varias alternativas para ingresar y/o mostrar datos, dependiendo
de la librería que vamos a utilizar para desarrollar el programa, entre estas están: iostream.h y
stdio.h

#include <iostream.h>

     Los objetos de flujo que vienen predefinidos serán:

1. cin, que toma caracteres de la entrada estándar (teclado);


2. cout, pone caracteres en la salida estándar (pantalla);

Estos objetos se utilizan mediante los operadores << y >>.

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.

La sintaxis sería la siguiente:

36
                        cin>>variable1>>...>>variablen;

#include <stdio.h>

     Los objetos de flujo que vienen predefinidos serán:

1. scanf

2. printf

scanf es utilizado para asignar la información que se introduce por el teclado

La sintaxis del scanf es la siguiente:

scanf(“%letra%letra”,&var1,&var2);

es utilizado para imprimir en la pantalla los resultados del programa

La sintaxis del PRINTF es el siguiente:

printf(“mensaje %letra”,var1);

PASOS PARA PROGRAMAR


1. Abrir Borland

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

4. Ejecutar el programa.- cuando se ejecuta el archivo se guardan tres


tipos de archivos:

 Suma.exe es el archivo ejecutable

 Suma.obj archivo que se encuentra en lenguaje de máquina

 Suma.cpp es un archivo de borland

Al correr el programa solo sale la pantalla en blanco y se ingresan los valores con
un enter.

Para evitar esto se utilizan instrucciones que indiquen que hacer

#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

Programa para calcular la hipotenusa de un triángulo rectángulo

#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

contra una constante, según se necesite.

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:

1 instrucción 2 o más instrucciones

Condición V, F Condición V, F

39
if( ) if( )
instrucción; {

Ejemplo:

1 instrucción 2 o más instrucciones


if(a>10) if(b<14.5)
{
p=14*a
q=p+r;

w=sqrt(q);
}
}

Condición verdadera o falsa


Las estructuras condicionales dobles permiten elegir entre dos opciones o alternativas posibles
en función del cumplimiento o no de una determinada condición. Se representa de la siguiente
forma:

if( )
instrucción;

else

40
Ejemplo

Programa que determina el mayor de dos números ingresados

#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

Leer tres números diferentes e imprimir el número mayor de los tres.

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

1) Cuando se conoce el número de veces a repetir


for ( inicialización; control; incremento)

instrucción(es);

Ejemplo

Programa que suma una progresión aritmética 1, 2, 3, 4, 5, 6, 7, 8, 9…..n

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

2) Cuando NO se conoce el numero de veces a repetir

1.1 puede no ejecutarse nunca


while ( condición )

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

1.2 puede ejecutarse por lo menos una vez


do

instrucciones;

}while ( condición )

44
Ejemplo

Programa que suma una progresión aritmética

#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

#include<stdio.h> #include <stdio.h>


int n,j,i=0,d; int n,i,np,y;
void main() void main ()
{ {
//ingreso de datos printf ("INGRESAR NÚMERO => ");
printf("ingrese d # entero scanf ("%d",&n);
positivo:"); //calculos
scanf("%d",&d); np=0;
printf("ingrese n # entero y=0;

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

Comparacion de nombres Comparacion con un nombre

#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

#include<stdio.h> #include <stdio.h>


int i,n=0,flag=0; float n,i,ft;
void main() void main()
{ {
//ingreso de datos //ingreso
printf("ingrese el numero:\n"); printf("ingrese un numero");
scanf("%d",&n); scanf("%f",&n);
//calculos //calculos
flag=0; ft=1;
for(i=2;i<n-1;i++) for (i=1;i<=n;i++)
{ ft=(ft*i);
if(n%i==0) printf("factorial es =%f",ft);
flag=1; }
}
if (flag==0)
printf("es un numero primo:\n");
else
printf("no es un numero
primo:\n");

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:

· Almacenan los elementos en posiciones contiguas de memoria


· Tienen un mismo nombre de variable que representa a todos los elementos. Para
hacer referencia a esos elementos es necesario utilizar un índice que especifica el lugar
que ocupa cada elemento dentro del archivo

Tipos de Arreglos:

Estáticos.- Tiene número de elementos fijos


Dinámicos.- Número de elementos variables.

Vector: Es un arreglo de “N” elementos organizados en una dimensión donde “N”


recibe el nombre de longitud o tamaño del vector. Para hacer referencia a un
elemento del vector se usa el nombre del mismo, seguido del índice (entre corchetes),
el cual indica una posición en particular del vector.

A 0

Matriz: Es un arreglo de M * N elementos organizados en dos dimensiones donde


“M” es el numero de filas o reglones y “N” el numero de columnas.

47
Cubo:

Estaticos.-

Tipo de Dato Nombre [ * ] [ * ] [ * ]

float A[10];

int [10][20];

double C[5][5][5];

Dinámicos.-

Tipo de Dato * * *Nombre

Puntero

float *A;

int **B;

double ***C;

48
 Unidimensional

A [3]=10.6;

scanf (“%letra”;&A[3]);

printf (“………%letra”, A[3]);

for (i=o; i<10; i++)

scanf (“%letra”, &A[i] );

for (i=o; i<10; i++)

printf (“……%letra”, A[i] );

 Bidimencional

A [3][4]);

scanf (“%letra”;&A[3][4]);

printf (“………%letra”, A[3][4]);

for (i=o; i<10; i++)

for (j=o; j<10; j++)

scanf (“%letra”;&A[i][j]);

for (i=o; i<10; i++)

for (j=o; j<10; j++)


49
printf (“………%letra”, A[i][j]);

 Tridimensional

A [3][4][5]10.6;

scanf (“%letra”;&A[3][4][5]);

printf (“………%letra”, A[3][4][5]);

for (i=o; i<10; i++)

for (j=o; j<10; j++)

for (k=o; k<10; k++)

scanf (“%letra”;&A[i][j][k]);

for (i=o; i<10; i++)

for (j=o; j<10; j++)

for (k=o; k<10; k++)

printf (“………%letra”, A[i][j][k]);

PROGRAMAS // SUMA DE MATRICES


// SUMA DE VECTORES
#include "stdafx.h"
#include "stdafx.h"
float A[10],B[10],C[10]; float A[5][5],B[5][5],C[5][5];
int i; int i,j;
int _tmain(int argc, _TCHAR* argv[])
{ int _tmain(int argc, _TCHAR* argv[])
{
//leer datos //leer datos
for (i=0;i<10;i++) for (i=0;i<5;i++)
{ for (j=0;j<5;j++)
printf("A[%d]=",i);
scanf("%f",&A[i]); {
} printf("A[%d][%d]=",i,j);
for (i=0;i<10;i++) scanf("%f",&A[i][j]);
{ }
printf("B[%d]=",i); for (i=0;i<5;i++)
scanf("%f",&B[i]); for (j=0;j<5;j++)
} {
//calculos printf("B[%d][%d]=",i,j);
scanf("%f",&B[i][j]);

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;

int _tmain(int argc, _TCHAR* argv[])


{
//leer datos
for (i=0;i<3;i++)
for (j=0;j<3;j++)
for (k=0;k<3;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

“sinónimos de dirección (memoria RAM)”

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

Siendo b=4; f=1.1;i=2.001;l=A

int *a,b,c;   4  
float *e,f,g;   1,1  
double *h,i,j;   2,001  
char *k,l,m;   A  

Para escribir la dirección colocamos por ejemplo:

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

Siendo : %P = valor del puntero

%X=entero en formato hexadecimal

Ejemplo 1:

En el siguiente ejemplo se muestra la estructura básica utilizada en los punteros:

//punteros

#include "stdafx.h"
float *a,*b,c,d,e;

int _tmain(int argc, _TCHAR* argv[])


{
a=&c;
b=&d;
printf("c=" );
scanf("%f",&c);
printf("d=" );
scanf("%f",&d);
e=*a+*b;
printf("c=%f\t d=%f\t e=%f\t",*a,*b,e);
printf("\n\n direccion\n\n");
printf("&a=%x\t &b=%x\t &c=%x\t &d=%x\t &e=
%x",&a,&b,&c,&d,&e);
printf("\n\n contenidos \n\n");
printf("a=%x\t b=%x\t c=%f\t d=%f\t e=%f\n",a,b,c,d,e);
scanf("%f",&e);
return 0;
}

53
Punteros del tipo **q

Podría decirse que es la dirección de la dirección:

p q r
     

Ejemplo 2

En este ejemplo se explica la estructura de los punteros del tipo **q:

//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);
}

Operaciones con punteros

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;

3) Una variable de puntero puede aceptar una dirección nula.

pV=null;

4) A una variable de puntero se le puede sumar o restar un número entero.

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

Para asignar un nuevo valor a la memoria de la variable, colocamos:

Pv=new tipodato [#]

Ejemplo 1:

Suma de matrices con punteros y arreglos

#include "stdafx.h"
float **a,**b,**c;
int i,j,n;

int _tmain(int argc, _TCHAR* argv[])


{
//toma de memoria
printf("ingrese dimension n=");
scanf("%d",&n);
a=new float*[n];
b=new float*[n];
c=new float*[n];
for(i=0;i<n;i++)
{
a[i]=new float[n];
b[i]=new float[n];
c[i]=new float[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;

printf("Digite un numero, para terminar : ");


scanf("%d",&i);
return 0;
}

Ejemplo 2:

Sistema de ecuaciones lineales:

#include "stdafx.h"
float **A,*B,*X,aux,sum=0.0;
int n,i,j,k;

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

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

printf("\n\nLAS RAICES SON\n\n");


for(i=0;i<n;i++)
printf("%f\t",X[i]);

// 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;
}

Subprogramas

Estructura básica de un subprograma:

58
tipodato
nombre(datos a
ingresar o salir del subprograma cada uno con su tipo de dato)
{
variables locales
-
-
return var td;
}

Las variables que se encuentran fuera del subprograma se denominan globales.


La variables locales son aquellas que solo existen dentro de cada subprograma.
Las variables globales se inicializan en cero.
Las variables locales se inicializan con basura.

Ejemplo 1:

Estructura básica de un subprograma:

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

int _tmain(int argc, _TCHAR* argv[])


{
printf("ingrese un valor decimal=" );
scanf("%f",&y2);
q=f1(y2);
printf("ingrese dos enteros =>");
scanf("%d%d",&c,&d);
f2(c,d);
printf("q=%f\n",q),
printf("a=%d\t b=%d\n",a,b);
printf("ingrese un numero entero para terminar");
scanf("%d",&c);
return 0;

59
}
void f2(int p, int q)
{
float x,y;
y=p-q;
x=y+5;
a=y;
b=x;
}

Ejemplo 2:

Paso de parámetros a funciones:

# include "stdafx.h"
float x,y,z;

void f3(float a,float *b, float*c)


{
float aux;
printf("x=%f\t y=%f\t z=%f\t",a,*b,*c);
aux=*b;
(*b)=a+(*b)+(*c);
(*c)=a-aux-(*c);
a=2*a;
printf("x=%f\t y=%f\t z=%f\t",a,*b,*c);
}

int _tmain(int argc, _TCHAR* argv[])


{
printf("x=");
scanf("%f",&x);

printf("y=");
scanf("%f",&y);

printf("z=");
scanf("%f",&z);

printf("\n antes de llamar a la funcion");


printf("x=%f\t y=%f\t z=%f\t\n\n",x,y,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:

Sistema de ecuaciones lineales con punteros y subprogramas:

#include "stdafx.h"

float **A,*B,*X,aux,sum=0.0;
int n,i,j,k;

void leer (float **x,float *y,int w)


for (i=0;i<w;i++)
{
for(j=0;j<w;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]);
}

void calculo (float **x,float *y,float *z, int w)


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];
}
//raices

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;

void imprimir (float *X,int n)

printf("\n\nLAS RAICES SON\n\n");


for(i=0;i<n;i++)
printf("%f\t",X[i]);5
}

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;

void leer(float **x, int w)


{
for(i=0;i<w;i++)
for(j=0;j<w;j++)
{
printf("a[%d][%d]= ",i+1,j+1);
scanf("%f",&x[i][j]);

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];
}

int _tmain(int argc, _TCHAR* argv[])


{
//toma de memoria
printf("ingrese n=");
scanf("%d",&n);
a=new float*[n];
for(i=0;i<n;i++)
a[i]=new float[n];
leer(a,n);
calculo(a,n);
printf("\n");

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

printf("ingrese un numero para terminar");


scanf("%d",&n);
return 0;
}

63
Ejemplo 5:

Realizar un programa que muestre los coeficientes que genera el triangulo de pascal

#include <iostream.h>
#include <conio.h>

float nfa(int b);

void main()
{
int nf, r,x=40,y=1;
float f1=0, f2=0, f3=0;

// Limpiamos Pantalla
clrscr();

cout << "hasta n terminos ===> ";


int a;

// Obtenemos el dichos valor


cin >> a;

clrscr();

// Creamos secuencia numerica


for (nf=0; nf<=a; nf++)
{
gotoxy(x,y);

for (r=0; r<=nf; r++)


{
f1 = nfa(nf);
f2 = nfa(r);
f3 = nfa(nf-r);

// Mostramos el valor segun rf/r, guardados en f1,f2,f3


cout<< f1/(f3*f2) << " ";
}

// Salto de linea
cout << "\n";
x -= 1;
y +=1;
}

64
// Funcion factorial segun valor dado.
float nfa(int b)
{
float fact=1;

for (int i=1; i <=b; i++)


fact *= i;

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

FUNCIONES QUE DEVUELVEN REFERENCIAS

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

Def.- Tipo de dato que crea el programador

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

2.- Sacar datos


Printf (“%t”, 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);
}

// Arreglos estaticos de estructura


#include…..
struct circuito
{
Float v,I,r;
};
Circuito a[10];
int j;
….tmain(…)
{
// ingreso de datos
For(j=0; j<10 ; j++)
{
Printf(“v= , i= “);
Scanf(“%f%f”,&a[j].v, &a[j].i);
}
//calculo
For(j=o; j<10; j++)
A[j].r=a[j].v/a[j].i;
// salida
For(j=0; j<10; j++)
Printf(“r=%5.3f\n”, a[j].r);
trampa
}

// arreglos dinamicos de estructura


#include…….
Struct circuito
{
Float

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

>>x la imagen digitalizada matriz ---

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

§2  Como ejemplo, construiremos un programa que


acepte caracteres por el teclado y construya un árbol
binario ( 1.8b) cuyos elementos contengan el carácter
introducido y estén ordenados según su valor ASCII. En
la Fig. 1 se muestra gráficamente el resultado de
introducir los caracteres:  b, D, g, A, E y k.

El programa acepta caracteres indefinidamente (mientras exista memoria suficiente, o se pulse


ESC). Después de la introducción de cada nuevo elemento, se muestra ordenadamente la
totalidad del árbol.

 Ejemplo:

#include "stdafx.h"
struct nodo
{
float inf;
nodo *direc;
};
nodo *a,*b;
int n;

int _tmain(int argc, _TCHAR* argv[])

{
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

// Crar.cpp : Defines the entry point for the console application.


//

#include "stdafx.h"
int n;
struct nodo
{
char nombre[10];
float inf;
nodo *direc;

};

nodo *A, *q, *aux;


char op='s';

int _tmain(int argc, _TCHAR* argv[])


{
aux = new nodo;
printf("Ingrese nombre=");
scanf("%s",&aux->nombre);
printf("Ingrese numero=");
scanf("%f",&aux->inf);
aux -> direc = NULL;
A=q=aux;
while (op!='n')
{
printf("Ingrese nombre=");
scanf("%s",&aux->nombre);
printf("Ingrese numero=");
scanf("%f",&aux->inf);
aux = new nodo;

aux -> direc = NULL;


q->direc=aux;
q=aux;

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

int _tmain(int argc, _TCHAR* argv[])


{
aux = new nodo;
printf("Ingrese nombre=");
scanf("%s",&aux->nombre);
printf("Ingrese numero=");
scanf("%f",&aux->inf);
aux -> direc = NULL;
A=q=aux;
while (m==1)
{

aux = new nodo;


printf("Ingrese nombre=");
scanf("%s",&aux->nombre);
printf("Ingrese numero=");
scanf("%f",&aux->inf);
aux -> direc = NULL;
q->direc=aux;
q=aux;
printf("Ingresar otro nodo s=1/n=0?");
scanf("%d",&m);
}

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

LISTAS QUE SE INSERTA POR EL FINAL

#include "stdafx.h"

struct nodo

char nombre[10];

float edad;

nodo *direc;

};

int b,m=2;

nodo *A,*aux,*ULT;

int _tmain(int argc, _TCHAR* argv[])

ULT=NULL;

while (m==2)

printf("ingrese 1 para insertar\n");

printf("ingrese 2 para eliminar\n");

printf("ingrese 3 para salir\n");

76
scanf("%d",&b);

switch (b)

case 1: if(A==NULL)

aux = new nodo;

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;

case 2:if (A==NULL)

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

aux=aux -> direc;

printf("continuar s=2, n =0");

scanf("%d",&m);

printf("ingrese un numero entero para terminar");

scanf("%d",&b);

78
}

LISTAS POR CUALQUIER LADO

# include <iostream.h>

struct nodo

int info;

nodo *sig;

};

nodo *a, *r, *p, *aux;

char op='s';

int op1=0;

void main ()

a=NULL;

while (op!='n')

cout <<"1.-Ingreso\n 2.-Borrar\n 3.-Salir\n";

cin >>op1;

switch (op1)

case 1:aux=new nodo;

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)

[cout<<"lA LISTA ESTA VACIA";getch();}

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)

cout<<"No hay nombre en la lista";

} //del switch

//Impresion de la lista

r=a;

while(r!=NULL)

cout<<r->info;

r=r->sig;

81
}

cout<<"Continuar (s/n)?";

cin>>op;

} //fin del while

} // fin del main

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;

2.- INSERTAR FINAL (Ubicar el puntero


en el último nodo)

82
aux = new nodo;

scanf (“%f”,&aux inf);

aux direc = null

p direc=aux

BORRAR

P direc=aux;

delete aux

3.- INSERTAR INTERMEDIO (Ubicar el Puntero


en el nodo)

aux = new nodo;

scanf (“%f”,& aux inf);

aux direc =p direc;

p direc = aux

BORRAR

p direc = aux direc;

delete aux;

include “stdafx.h”

struct nodo

char nombre [10];

float edad;

83
nodo *direc;

};

nodo *A, *aux;

int m=2; b;

Main (……)

A=NULL;

while (m==2)

printf(“ingrese 1 para inserter\n”);

printf(“ingrese 2 para eliminar\n”);

printf((“ingrese 3 para salir\n”);

scanf(“%d”,&b);

switch(b)

case 1: aux = nex nodo;

scanf(“%s”, & aux nombre);

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)

printf(“ nombre %s\n”,a nombre);

printf(“ edad %f\n”, a edad);

aux= aux direc;

printf(“continuar s=2; N=0”);

scanf(“%d”,&m);

TRAMPA

09-07-2009

FORMAS DE ALMACENAMIENTO DE LAS VARIABLES

Auto

Static

Register auto float a;

Extern static tipo var;

Const register tipo var;

Volatile

85
EJEMPLO:

Void f1()

static int a= 10;

a=a+10;

printf(“%d\n”;a);

Main(..)

f1();// 20

f2();// 30

f3() ;// 40

COMANDOS DE PROCESADORES

#include -----> #include <stdio.h> "stdafx"

#define

#undef

#if

#else

#endif

#ifdef

#ifndef

#pragma

#error

86
#line

"path.\...\....\"...las comillas buscan la Dirección en la computadora.

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 NOMBRE Lista de comandos.................... (SE CORTA CON \)

....................\

....................\

#define M 4

#define rutina for(i=1;i<10;i++)\

j=i+2; \

for(k=j; k<20;k++)\

printf("*"); \

87
printf("\n") \

main()

p=m+5;

#undef m

rutina;

#undef (elimina a la macro)

13-07-2009

#indef uno_h

#define uno_h

Struct dato

Char nombre [15];

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

Almacenamiento en variables y arreglos es temporal: termina programa y estos datos se


pierden;
Conservación permanente de grandes cantidades de datos: archivos;
Archivos almacenados en dispositivos almacenamiento secundario, (p.e. disco);
C ve un archivo como un flujo secuencial de bytes, (stream); que se conoce con el
nombre de descriptor o manejador de archivos.
Cada archivo termina con un marcador de fin de archvio, (eof);
Cuando un archivo se abre se asocia un stream con el archivo;
La ejecución de un programa abre automaticamente tres archivos, los cuales tienen
relacionados tres streams:
 1. stdi: entrada estándar, (que vale 0);
                                        2. stdo: salida estándar, (valor: 1);
                                        3. stderr: error estándar, (valor: 2);

Dos tipos de archivos:

                                        1. Archivos tipo texto


                                        2. Archivos binarios
 

Abertura de archivos texto

stream = fopen(nombre-archivo, modo)

stream: debe ser una variable tipo apuntador a un archivo FILE *<nombre-variable>

nombre-archivo: es el nombre de un archivo, el cual debe de estar entre comillas, (''):


                    ''/usr/local/tarea.txt''

también puede referenciarse usando un arreglo de caracteres:


                    char nombre[40]
                    nombre = ''/usr/local/tarea.txt''

modo: al igual que el nombre-archivo se puede expresar entre comillas o a travez de un arreglo
de caracteres;

Los valores que puede tomar modo son:

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
 

Ejemplos abertura archivos

main()
            {
                FILE *p, *q;
                char nombre[25], modo[5];

/*     Abriendo archivo texto en modo escritura */

if ( p = fopen(''ejemplo.txt'', ''w+''))
                        {
                            ...
                        }
                else
                        {
                                printf(''\n Error: no se pudo abrir el archivo \n'');
                                exit(1)
                        }
                ...

               /* Abriendo archivo binario en modo lectura */

nombre = ''/usr/al445566/toto.dat''; modo = ''rb'';


                if ( q = fopen(nombre,modo) == NULL)
                    printf(''No pudo abrirse el archivo nn'');
               else
                    ...
}

Numeros

Estructuras

                Imágenes

Audio
File *p,*q,*f
Video
p=fopen (“ nombre del archivo”,” + ”)

a b binario

c:\file\tralnp\datos.dat w t letras ASCII-uincode

90
r

Archive Existe No existe


a(append) adiciona Crea
w(write) Borra crea

fclose(p);

fwrite(&dato,sizeof(dato),1,P);

fread(&dato,sizeof(dato),1,p);

fseek (f,cont*sizeof(dato),SEEK_SET);

rewind(p); pone al punter del archive al inicio

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

You might also like