Top Banner
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
108

Programacion basica

Nov 20, 2014

Download

Documents

galandt
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Programacion basica

IntroducciónFases para desarrollar algoritmosPseudocódigosImplementación en un lenguaje de alto nivel(lenguaje C)Estructura de control2. Modulación y arreglosFunciones punterosÁmbito de los identificadoresFunciones recursivasModo graficoElaboración de proyectosArreglos3. Punteros, cadenas, estructuras, archivos y preprocesador cAritmética de punterosCadenasEstructurasArchivosPreprocesador c

Page 2: Programacion basica

.Lenguaje algorítmicoDefinición del problemaAnálisis del problemaPrueba de escritorio

CodificaciónAnálisis de errorControl de calidad final

EJERCICIOS:1.- Sumar n números enteros

Definición_ sumar n números enteros de uan serie asi:1+2+3+4+5+6+….nAnálisis del problema.

1 + 2 + 3 + 4 + 5 + 6 +…………..n

i=1 d=2 repetir n veces i=i+d d=d+1

Prueba de escritorio

rep i d01234....n

H 1361015

23456

2.- usando sumas encontrar el producto m*n

2

Algoritmo

Test software engineering

3

6

10

1

Page 3: Programacion basica

8

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

d= 0 repetir n veces d=d+m

Prueba de escritorio

veces d m012345

H 04

8 12 16 20

444444

3.- usando restas encontrar el cociente entre m/n

3

12

16

20

4

0

Page 4: Programacion basica

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

25-3

22-3

19-3 16-3

13-3

10-3 7-3

4-3

1-3 i=0

Repetir d>n d = d-n i = i+1

Prueba de escritorio

repetir i (cociente) d (residuo) n0123456789

0123456789

282522191613107431

3333333333

4

d

d

d

d

d

d

d

d

d

d

Page 5: Programacion basica

VARIABLESSon espacios de ememoria (RAM) que cambian continuamente de valor.Empiezan con un letra y continúan con una letra y/o número, signo subrayadoOjo no van espacios ni tildes ni la ñ (es recomendable máximo usar 8 signos)Ejemplos:

a m izq derecha1 Izquierda2

numero_1 numero_2

subrayado

CONSTANTESValores fijos que no cambian en la ejecución del programaEjemplo:

Constante pi (que vale3.1416)

ALGORITMOSecuencia ordenada de pasos para resolver un problema (programa).

Diagrama de flujoPseudocó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

Terminal

Representa el inicio y fin de un programa. También puede representar 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

Page 6: Programacion basica

registro de información procesada en un periférico.

Proceso

Cualquier tipo de operación que pueda originar cambio de valor, formato o posición de la información almacenada en memoria, operaciones aritméticas, de transformaciones, etc.

Decisión

Indica operaciones lógicas o de comparación entre datos (normalmente dos) y en función del resultado de la misma determina (normalmente si y no) cual de los distintos caminos alternativos del programa se debe seguir

Conector Misma Página

Sirve para enlazar dos partes cualesquiera de un diagrama a través de un conector en la salida y otro conector en la entrada. Se refiere a la conexión en la misma pagina del diagrama

Indicador de dirección o línea de flujo

Indica el sentido de la ejecución de las operaciones

Salida

Se utiliza en ocasiones en lugar del símbolo de salida. El dibujo representa 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

Page 7: Programacion basica

si

no

EJEMPLOS DE DIAGRAMAS Y PSEUDOCODIGOS

Para división m/n

DIAGRAMA DE FLUJO PSEUDOCODIGO

VariablesContador, izq,derechoInicio leer(izq,derecho) contador=0

repetir izq>derecho contador = contador+1 izq= izq – derechosacar a pantalla contador izqfin

7

inicio

Leer (izq, derecho)

Contador=0

Contador= contador + 1

Izq =izq -derecho

Izq>=derecho

Sacar a pantalla

Contador

fin

Page 8: Programacion basica

si

no

Para suma de n números enteros

DIAGRAMA DE FLUJO PSEUDOCODIGO

si no

Variables izq,derech,,n

Inicio leer(izq,derecho) izq=1 derecho=2

repetir n veces

izq = izq+derecho derecho = derecho +1

sacar a pantalla derecho

fin

8

inicio

Leer (izq,derecho)

Izq=1

derecho=2

Derecho<=n

fin

Imprimir: izq

Izq=izq+derecho

derecho=derecho+1

Page 9: Programacion basica

si

no

Para v/t cuando t>0

DIAGRAMA DE FLUJO PSEUDOCODIGO

Si no

Variables distancia,tiempo,velocidad

Inicio leer(distancia,tiempo) si t>0

velocidad = distancia /tiempo Imprimir velocidad

caso contrario Mensaje: no se puede calcular la velocidad

fin

9

inicio

Leer (distancia, tiempo)

Mensaje: no se puede calcular la velocidad

Velocidad = distancia tiempo

t>0

fin

Imprimir: velocidad

Page 10: Programacion basica

si

no

Para multiplicar m *n

DIAGRAMA DE FLUJO PSEUDOCODIGO

si no

Variables m,n,d

Inicio leer(m,n) d=0repetir n veces

d = d +m

imprimir d

fin

EJEMPPLO DE PSEUDOCODIGO CON SUMA DE MATRICES

A11

A12

A13

A21 A22 A23A31 A32 A33

B11

B12 B13B21 B22 B23B31 B32 B33

10

inicio

Leer (m,n)

d=0

i=0

i<=n

fin

sacar: d

d = d +m

i=i+1

A=

B=

Page 11: Programacion basica

A11

+ B11 A12 + B12 A13 +

B13

A21 + B21 A22 + B22 A23 + B23A31 + B31 A32 + B32 A33 + B33

DESARROLLO PARA VER EL ALGORITMORepetirj=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

f

repetir n veces

11

A+B=c=

Page 12: Programacion basica

OPERADORESLos operadores permiten enfocar la búsqueda vinculando términos de búsqueda y definiendo la relación entre ellos

Precedencia de operadoresLa 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

12

Page 13: Programacion basica

&= ^= |= %= <<= , Operador coma De derecha a izquierda

Con pseudocódigos multiplicación de matrices

MULTIPLICANDO

C11= A11 B11 + A12 B21 + A13

B31 + A14

B41 + A15

B51

C21= A21 B11 + A22 B21 + A23

B31 + A24

B41 + A25

B51

C31= A31 B11 + A32 B21 + A33

B31 + A34

B41 + A35

B51

C41= A41 B11 + A42 B21 + A43

B31 + A44

B41 + A45

B51

C51= A51 B11 + A52 B21 + A53

B31 + A54

B41 + A55

B51

C14=

A11

B14

+ A12

B24

+ A13

B34

+ A14

B44

+ A15

B54

C24=

A21

B14

+ A22

B24

+ A23

B34

+ A24

B44

+ A25 B54

C34=

A31

B14

+ A32

B24

+ A33

B34

+ A34

B44

+ A35 B54

C44=

A41

B14

+ A42

B24

+ A43

B34

+ A44

B44

+ A45 B54

C54=

A51

B14

+ A52

B24

+ A53

B34

+ A54

B44

+ A55 B54

13

A11 A12 A13 A14 A15A21 A22 A23 A24 A25A31 A32 A33 A34 A35A41 A42 A43 A44 A45A51 A52 A53 A54 A55

B11 B12 B13 B14 B15B21 B22 B23 B24 B25B31 B32 B33 B34 B35B41 B42 B43 B44 B45B51 B52 B53 B54 B55

C12=

A11

B12

+ A12

B22

+ A13

B32

+ A14

B42

+ A15

B52

C22=

A21 B12

+ A22

B22

+ A23

B32

+ A24

B42

+ A25

B52

C32=

A31 B12

+ A32

B22

+ A33

B32

+ A34

B42

+ A35

B52

C42=

A41 B12

+ A42

B22

+ A43

B32

+ A44

B42

+ A45

B52

C52=

A51 B12

+ A52

B22

+ A53

B32

+ A54

B42

+ A55

B52

C13= A11 B13

+ A12

B23 + A13 B33

+ A14 B43

+ A15

B53

C23= A21 B13 + A22 B23 + A23 B33 + A24 B43 + A25 B53C33= A31 B13 + A32 B23 + A33 B33 + A34 B43 + A35 B53C43= A41 B13 + A42 B23 + A43 B33 + A44 B43 + A45 B53C53= A51 B13 + A52 B23 + A53 B33 + A54 B43 + A55 B53

Page 14: Programacion basica

C15=

A11

B15

+ A12

B25

+ A13

B35

+ A14

B45

+ A15

B55

C25=

A21 B15

+ A22

B25

+ A23

B35

+ A24

B45

+ A25

B55

C35=

A31 B15

+ A32

B25

+ A33

B35

+ A34

B45

+ A35

B55

C45=

A41 B15

+ A42

B25

+ A43

B35

+ A44

B45

+ A45

B55

C55=

A51 B15

+ A52

B25

+ A53

B35

+ A54

B45

+ A55

B55

ANALISANDO:1.- Comenzamos analizando fila por fila y elemento por elemento

C11= A11 B11 + A12 B21 + A13

B31 + A14

B41 + A15

B51

EXAMINANDO fila 1

1.- C11 y C12

1)A1- B1- 2)A1k B1q entonces

3)

4)

C11 = suma

2.- C13

C13=suma3.- C14

14

C12= A11 B12 + A12 B22 + A13 B32 + A14 B42 + A15 B52

C13= A11 B13

+ A12

B23 + A13 B33

+ A14 B43

+ A15

B53

C14= A11

B14 + A12 B24 + A13 B34 + A14 B44 + A15 B54

C15=

A11 B15 + A12 B25 + A13 B35 + A14 B45 + A15 B55

K:1 hasta nq:1 hasta nA1k Bq1

K:1 hasta n k=q (cambian igual en misma posición)A1k B1k

Repetir K:1 hasta nSuma = suma + A1k Bk1

Repetir r:1 hasta nSuma = suma + A1r Br3

Repetir m:1 hasta nSuma = suma + A1m Bm4

Page 15: Programacion basica

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

15

Page 16: Programacion basica

C4j=suma

Ojo se puede observar que cambia OJO SE PUEDE OBSERVAR QUE CAMBIA UNICAMENTE

Repetir j=1 hasta n suma =0

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

16

Page 17: Programacion basica

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.

MATRIZ DE ORDEN n CON CEROS BAJO LA DIAGONAL

Primera Columnaa) Segunda Fila:

a21 = a11*a21 -

a21*a11

a22 = a11*a22 - a21*a12

a23 = a11*a23 - a21*a13

a24 = a11*a24 - a21*a14

a25 = a11*a25 - a21*a15

a2n =a11*a2n -

a21*a1n

17

Repetir k=1….n

a2k= a11*a2k - a21*a1k

a11 a12 a13 a14 …… a1na21 a22 a23 a24 …… a2na31 a32 a33 a34 …… a1na41 a42 a43 a44 …… a2na51 a52 a53 a54 …… a1na61 a62 a63 a64 …… a2nam1 am2 am3 am4 …… a1n

Page 18: Programacion basica

b) Tercera Fila

a31 =a11*a31 -

a31*a11

a32 =a11*a32 - a31*a12

a33 =a11*a33 - a31*a13

a34 =a11*a34 - a31*a14

a35 =a11*a35 - a31*a15

a3n =a11*a3n - a31*a1n

c) Cuarta Fila

a41 =a11*a41 - a41*a11

a42 =a11*a42 -

a41*a12

a43 =a11*a43 - a41*a13

a44 =a11*a44 - a41*a14

a45 =a11*a45 - a41*a15

a4n =a11*a4n - a41*a1n

d) Quinta Fila

a51 =a11*a51 -

a51*a11

a52 =a11*a52 - a51*a12

a53 =a11*a53 - a51*a13

a54 =a11*a54 - a51*a14

a55 =a11*a55 - a51*a15

18

Repetir d=1….n

a3d= a11*a3d - a31*a1d

Repetir t=1….n

a4t= a11*a4t - a41*a1t

Repetir p=1….n

a5p= a11*a5p – a51*a1p

Page 19: Programacion basica

a5n =a11*a5n - a51*a1n

e) Sexta Fila

a61 =a11*a61 - a61*a11

a62 =a11*a62 -

a61*a12

a63 =a11*a63 - a61*a13

a64 =a11*a64 - a61*a14

a65 =a11*a65 - a61*a15

a6n =a11*a6n - a61*a1n

Conclusión del estudio de la primera columna:

19

Repetir r=1….n

a6r= a11*a6r – a61*a1r

Repetir d=1….n

a3d= a11*a3d - a31*a1d

Repetir r=1….n

a6r= a11*a6r – a61*a1r

Repetir j=2….n

a3d= a11*a3d - a31*a1dRepetir k=1….n

ajk= a11*ajk - aj1*a1k

Repetir p=1….n

a5p= a11*a5p – a51*a1p

Repetir t=1….n

a4t= a11*a4t - a41*a1t

Repetir k=1….n

a2k= a11*a2k - a21*a1k

Page 20: Programacion basica

SEGUNDA COLUMNA

a. Tercera Fila

a32 =a22*a32 -

a32*a22

a33 =a22*a33 - a32*a23

a34 =a22*a34 - a32*a24

a35 =a22*a35 - a32*a25

a36 =a22*a36 - a32*a26

a3n =a22*a3n - a32*a2n

b3 = a22*b3 - a32*b2

b. Cuarta Fila

a42 =a22*a42 -

a42*a22

a43 =a22*a43 -

a42*a23

a44 =a22*a44 - a42*a24

a45 =a22*a45 - a42*a25

a46 =a22*a46 - a42*a26

a4n =a22*a4n - a42*a2n

b4 = a22*b4 - a42*b2

c. Quinta Fila

20

b3=a22*b3-a32*b2

Repetir k=2….n

a3k= a22*a3k – a32*a2k

b3=a22*b3-a32*b2

Repetir z=2….n

a4z= a22*a4z – a42*a2z

b5=a22*b5-a52*b2

Page 21: Programacion basica

a52 =a22*a52 -

a52*a22

a53 =a22*a53 - a52*a23

a54 =a22*a54 - a52*a24

a55 =a22*a55 - a52*a25

a56 =a22*a56 - a52*a26

a5n =a22*a5n - a52*a2n

b5 = a22*b5 - a52*b2

d. Sexta Fila

a62 =a22*a62 -

a62*a22

a63 =a22*a63 -

a62*a23

a64 =a22*a64 - a62*a24

a65 =a22*a65 - a62*a25

a66 =a22*a66 - a62*a26

a6n =a22*a6n - a62*a2n

b6 = a22*b6 - a62*b2

e. Séptima Fila

21

b5=a22*b5-a52*b2

Repetir q=2….n

a5q= a22*a5q – a52*a2q

b6=a22*b6-a62*b2

Repetir t=2….n

a6t= a22*a6t – a62*a2t

Page 22: Programacion basica

a72 =a22*a72 -

a72*a22

a73 =a22*a73 -

a72*a23

a74 =a22*a74 - a72*a24

a75 =a22*a75 - a72*a25

a76 =a22*a76 - a72*a26

a7n =a22*a77 - a72*a2n

b7 = a22*b7 - a72*b2

22

b7=a22*b7-a72*b2

Repetir r=2….n

a7r= a22*a7r – a72*a2r

b3=a22*b3-a32*b2

Repetir k=2….n

a3k= a22*a3k – a32*a2k

b5=a22*b5-a52*b2

Repetir q=2….n

a5q= a22*a5q – a52*a2q

b6=a22*b6-a62*b2

Repetir t=2….n

a6t= a22*a6t – a62*a2t

b7=a22*b7-a72*b2

Repetir r=2….n

a7r= a22*a7r – a72*a2r

b3=a22*b3-a32*b2

Repetir z=2….n

a4z= a22*a4z – a42*a2z

Repetir w= 3……..n

bw =a22*bw-aw2*b2

Repetir z=2….n

awz = a22*awz – aw2*a2z

Page 23: Programacion basica

Tercera Columna

a. Cuarta Fila

a43 =a33*a43 - a43*a33

a44 =a33*a44 - a43*a34

a45 =a33*a45 - a43*a35

a46 =a33*a46 - a43*a36

a47 =a33*a47 - a43*a37

a4n =a33*a4n - a43*a3n

b4 = a33*b4 - a43*b3

b. Quinta Fila

a53 =a33*a53 -

a53*a33

a54 =a33*a54 - a53*a34

a55 =a33*a55 - a53*a35

a56 =a33*a56 - a53*a36

a57 =a33*a57 - a53*a37

a5n =a33*a5n - a53*a3n

b5 = a33*b5 - a53*b3

23

Repetir w= 3……..n

b4=a33*b4-a43*b3

Repetir m=3….n

a4m= a33*a4m – a43*a3m

b5=a33*b5-a53*b3

Repetir d=3….n

a5d= a33*a5d – a53*a3d

Page 24: Programacion basica

c. Sexta Fila

a63 =a33*a63 -

a63*a33

a64 =a33*a64 - a63*a34

a65 =a33*a65 - a63*a35

a66 =a33*a66 - a63*a36

a67 =a33*a67 - a63*a37

a6n =a33*a6n - a63*a3n

b6 = a33*b6 - a63*b3

d.= Séptima Fila

a73 =a33*a73 -

a73*a33

a74 =a33*a74 - a73*a34

a75 =a33*a75 - a73*a35

a76 =a33*a76 - a73*a36

a77 =a33*a77 - a73*a37

a7n =a33*a7n - a73*a3n

b7 = a33*b7 - a73*b3

24

b6=a33*b6-a63*b3

Repetir e=3….n

a6e= a33*a6e – a63*a3e

b7=a33*b7-a73*b3

Repetir f=3….n

a7f= a33*a7f – a73*a3f

b5=a33*b5-a53*b3

Repetir d=3….n

a5d= a33*a5d – a53*a3d

b6=a33*b6-a63*b3

Repetir e=3….n

a6e= a33*a6e – a63*a3e

b4=a33*b4-a43*b3

Repetir m=3….n

a4m= a33*a4m – a43*a3m

Page 25: Programacion basica

Visualizando todas las fórmulas de las columnas:

25

b7=a33*b7-a73*b3

Repetir f=3….n

a7f= a33*a7f – a73*a3f

Repetir p=4………….n

bp = a33*bp-ap3*b3

Repetir f=3….n

apf = a33*apf – ap3*a3f

Page 26: Programacion basica

Repetir w= 3……..n

bw =a22*bw-aw2*b2

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

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

1era colmuna 2da columna

3era columna 4ta columna

Fórmula para hacer ceros bajo la diagonal:

Para encontrar las raíces: examinamos las 5 raíces

ultimas

26

Repetir j=2….n

a3d= a11*a3d - a31*a1dRepetir k=1….n

ajk= a11*ajk - aj1*a1kRepetir z=2….n

awz = a22*awz – aw2*a2z

bp = a33*bp-ap3*b3

Repetir f=3….n

apf = a33*apf – ap3*a3f

bt = a44*bt-at4*b4

Repetir v=4….n

atv = a44*atv – ap4*a4v

Repetir i=k+1….n

bi = akk*bi-aik*bk

Repetir j=k….n

aij = akk*aij – aik*akj

Page 27: Programacion basica

Repetir i= n……..1

Suma =0

Repetir j=i+1……n

Xi=(bi-suma)/aii

X5=b5

a55 X 4=

b4−a45∗X5

a44

X3=b3−(a34∗X4+a35∗X5 )

a33 X2=

b2−(a23∗X2+a24∗X 4+a25∗X5 )a22

X1=b1−( a11∗X2+a13∗X3+a14∗X 4+a15∗X 5)

a11

X i=bi− ∑

j=i+1

n

aij∗X j

aii

Formula que encuentra raíces:

PSEUDOCÓDIGO

VARIABLES

Matriz ann, vector bn, vector XnSuma i,j,k

INICIO

//leer datos

27

Suma=suma +aij*xj

Page 28: Programacion basica

//CALCULAR

//SACAR A PANTALLA

Repetir i:1…nImprimir Xi

FIN

28

Page 29: Programacion basica

DIAGRAMA DE FLUJO

29

Page 30: Programacion basica

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

PreprocesadorTipos de datosVariablesFunciones y/o prototipos de funcionesFunción principal (programa principal)Funciones

Ejemplo

Suma de dos números

#include<iostream.h> preprocesadorfloat a,b,c; variablesvoid main() función principal{//ingreso de datoscin >>a>>b;

30

Page 31: Programacion basica

//calculosc=a+b;//resultadoscout<<c;}

Tipos de datosLas 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 Caracteresint Números enterosfloat 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.

31

Page 32: Programacion basica

32

Page 33: Programacion basica

int i, j, k;float x,y,z;

char ch;

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.

Ejemplo:

Operadores

33

Page 34: Programacion basica

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:

Operador

Acción

! Negación lógica

&& Y lógico || O lógico

Precedencia de operadores.

34

Page 35: Programacion basica

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:

35

Page 36: Programacion basica

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 2Emplea 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.

36

Page 37: Programacion basica

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

37

Page 38: Programacion basica

La sintaxis sería la siguiente:

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

#include <stdio.h>

Los objetos de flujo que vienen predefinidos serán:

1. scanf2. 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 Borland2. 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;

}

38

Page 39: Programacion basica

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 datosprintf("ingrese 2 numeros:");scanf("%f%f",&a,&b);//calculosc=a+b;//resultados

39

Page 40: Programacion basica

printf("el resultado es:%f",c);}

Ejercicios

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

#include<iostream.h>#include<math.h> libreriafloat a,b,c;void main(){//ingreso de datos comentariocout<<"ingrese un cateto:\n";cin>>a;cout<<"ingrese un cateto:\n";cin>>b;//calculosc=sqrt((a*a)+(b*b));//resultadoscout<<"la hipotenusa es:\n";cout<<c;}

Instrucciones de controlLas 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, Fif( ) if( )

40

Page 41: Programacion basica

instrucción; {

}

Ejemplo:

1 instrucción 2 o más instruccionesif(a>10)

p=14*a

if(b<14.5){

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

{

}

41

Page 42: Programacion basica

Ejemplo

Programa que determina el mayor de dos números ingresados

#include "stdio.h"float a,b;void main(){// ingreso de datosprintf("ingrese dos numeros\n");scanf("%f%f",&a,&b);// calculosif(a>=b)printf("A>=B");elseprintf("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;

elseif (( )&&( ))instrucción;

elseinstrucción;

Ejemplo

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

42

Page 43: Programacion basica

#include<stdio.h>float n1,n2,n3;void main(){//ingreso de datosprintf("ingrese tres numeros\n");scanf("%f%f%f",&n1,&n2,&n3);// calculosif((n1>n2)&&(n1>n3)) if anidadoprintf("el numero mayor es %f",n1);elseif((n2>n1)&&(n2>n3)) printf("el numero mayor es %f",n2);elseprintf("el numero mayor es %f",n3);}

2.SWITCHswitch( ){case __: instrucción;break;case __: instrucción;break;default: instrucción;}

Ejemplos

#include <stdio.h>int a;void main(){// ingreso de datosprintf("ingrese un numero entero de uno a tres\n");scanf("%d",&a);//calculosswitch(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");}}

43

Page 44: Programacion basica

#include "stdio.h"enum {liga,quito,nacional,barcelona,emelec};int p;void main(){//ingreso de datosprintf("ingrese un numero entero:");scanf("%d",&p);//calculosswitch (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íclicasSe 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

44

Page 45: Programacion basica

#include<stdio.h>int n,suma,i;void main(){//ingreso de datosprintf("ingrese n:");scanf("%d",&n);//calcularsuma=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 datosprintf("ingrese n:");scanf("%d",&n);//calcularsuma=0;i=1;while(i<=n){suma+=i;i++;}printf("suma=%d",suma);}

1.2 puede ejecutarse por lo menos una vezdo

{

instrucciones;

}while ( condición )

45

Page 46: Programacion basica

Ejemplo

Programa que suma una progresión aritmética

#include<stdio.h>int n,suma,i;void main(){//ingreso de datosprintf("ingrese n:");scanf("%d",&n);//calcularsuma=0;i=1;do {suma+=i;i++;}while (i<=n)printf("suma=%d",suma);}

EjerciciosMultiplicación con for

#include<stdio.h>int n,m,i,d=0;void main(){//ingreso de datosprintf("ingrese n:");scanf("%d",&n);printf("ingrese m:");scanf("%d",&m);//calcularfor(i=1;i<=n;i++)d=d+m;printf("d=%d",d);}

Multiplicación con do while

#include<stdio.h>int n,m,i,d=0;void main(){//ingreso de datosprintf("ingrese n:");scanf("%d",&n);printf("ingrese m:");scanf("%d",&m);//calculari=1;do{d=d+m;i++;} while(i<=n);//resultadosprintf("d=%d",d);}

División con cociente y residuo

#include<stdio.h>int n,j,i=0,d;void main(){//ingreso de datosprintf("ingrese d # entero positivo:");scanf("%d",&d);printf("ingrese n # entero

Ingresar un número y determinar si es perfecto

#include <stdio.h>int n,i,np,y;void main (){printf ("INGRESAR NÚMERO => ");scanf ("%d",&n); //calculosnp=0;y=0;

46

Page 47: Programacion basica

positivo:");scanf("%d",&n);//calcularfor(j=1;d>n;j++){d=d-n;i++;}printf("cociente");printf("%d",i);printf("residuo:");printf("%d",d);}

for (i=1;i<n;i++){np=(n%i);if (np==0) y=y+i;}if (n==y)printf("El número %d es perfecto",n);elseprintf("El número %d no es perfecto",n);}

Comparacion de nombres

#include<stdio.h>#include<string.h>char nombre1[10], nombre2[10];void main(){//ingrese de datosprintf("ingrese nombre=");scanf("%s",&nombre1);printf("ingrese nombre=");scanf("%s",&nombre2);//calculosif(!strcmp(nombre1,nombre2))printf("son iguales");elseprintf("son diferentes");}

Comparacion con un nombre

#include<stdio.h>#include<string.h>char nombre[10], nombre1[10];void main(){//ingrese de nombresprintf("ingrese nombre=");scanf("%s",nombre);strcpy(nombre1,"maria");//calculosif(!strcmp(nombre,nombre1))printf("son iguales");elseprintf("son diferentes");}

números primos

#include<stdio.h>int i,n=0,flag=0;void main(){//ingreso de datosprintf("ingrese el numero:\n");scanf("%d",&n);//calculosflag=0;for(i=2;i<n-1;i++){if(n%i==0)flag=1;}if (flag==0)printf("es un numero primo:\n");elseprintf("no es un numero primo:\n");

factorial

#include <stdio.h>float n,i,ft;void main(){//ingresoprintf("ingrese un numero");scanf("%f",&n);//calculosft=1;for (i=1;i<=n;i++)ft=(ft*i);printf("factorial es =%f",ft);}

47

Page 48: Programacion basica

} 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 fijosDiná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.

48

Page 49: Programacion basica

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;

49

Page 50: Programacion basica

int **B;

double ***C;

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

50

Page 51: Programacion basica

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

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

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 VECTORES

#include "stdafx.h"float A[10],B[10],C[10];int i;int _tmain(int argc, _TCHAR* argv[]){

//leer datosfor (i=0;i<10;i++){

printf("A[%d]=",i);scanf("%f",&A[i]);

}for (i=0;i<10;i++){

// SUMA DE MATRICES

#include "stdafx.h"

float A[5][5],B[5][5],C[5][5];int i,j;

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

//leer datosfor (i=0;i<5;i++)for (j=0;j<5;j++)

{printf("A[%d][%d]=",i,j);scanf("%f",&A[i][j]);

}

51

Page 52: Programacion basica

printf("B[%d]=",i);scanf("%f",&B[i]);

}//calculosfor (i=0;i<10;i++)

C[i]=A[i]+B[i];//salidafor (i=0;i<10;i++)

printf("%f\t",C[i]);printf("Para terminar ingrese

un numero entero=");scanf("%d",&i);return 0;

}

for (i=0;i<5;i++)for (j=0;j<5;j++){

printf("B[%d][%d]=",i,j);scanf("%f",&B[i][j]);

}//calculosfor (i=0;i<5;i++)for (j=0;j<5;j++)

C[i][j]=A[i][j]+B[i][j];//salidafor (i=0;i<5;i++){

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 datosfor (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]);

}//calculosfor (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];//salidafor (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]);

52

Page 53: Programacion basica

printf("\n");}

}printf("Para terminar ingrese un numero entero=");scanf("%d",&i);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

53

Page 54: Programacion basica

Para escribir la dirección colocamos por ejemplo:

a=&b;

e=&f;

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

54

Page 55: Programacion basica

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

55

Page 56: Programacion basica

pV=&a;

2) Una variable de puntero puede aceptar otra variable de puntero (mismo tipo de dato).

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.

56

Page 57: Programacion basica

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.

Función Operador malloc() newfree() 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 memoriaprintf("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 datosfor(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++)

57

Page 58: Programacion basica

for(j=0;j<n;j++) { printf("B[%d][%d]=",i+1,j+1);

scanf("%f",&b[i][j]); }

//calculosfor(i=0;i<n;i++) for(j=0;j<n;j++) c[i][j]=a[i][j]+b[i][j];

//salidafor(i=0;i<n;i++){ for(j=0;j<n;j++) printf("%f\t",c[i][j]); printf("\n");}

//liberacion de memoriafor(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 memoriaprintf("INGRESE LA DIMENSION N=");

58

Page 59: Programacion basica

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

//ingreso de la matrizfor (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]);}//calculosfor(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 MEMORIAfor(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);

59

Page 60: Programacion basica

return 0;}

Subprogramas

Estructura básica de un subprograma:

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

60

Page 61: Programacion basica

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

61

Page 62: Programacion basica

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

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

62

Page 63: Programacion basica

{

//toma de memoriaprintf("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];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;

63

Page 64: Programacion basica

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

}

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 memoriaprintf("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 matrizfor(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 memoriafor(i=0;i<n;i++){

64

Page 65: Programacion basica

delete []a[i];}

delete []a;

printf("ingrese un numero para terminar");scanf("%d",&n);return 0;}

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

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

// Obtenemos el dichos valorcin >> a;

clrscr();

// Creamos secuencia numericafor (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,f3cout<< f1/(f3*f2) << " ";}

65

Page 66: Programacion basica

Tipo dato & Variable

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

}

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

Referencia Punterosint i;Int &r=i ;r=400;#include<………….>Int I, &x=I;main(…….){i=2;x*=100;printf(“i=%d”,i);

*r;r=&I;*r=400

66

Page 67: Programacion basica

printf(“\n x=%d”,x);trampa}

#include………….int i=45, &j=i;int fun_1(intj);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 EJEMPLOInt &fun2(int &k){

return k;}I=fun2(k);

Z[2]=45;

#include………….Int z[10];int &element(int*v, int i){return V[i];}main(….){Element(z,2)=45;// z[2]=45printf(“\n z[2]=%d”, z[2]);

}

67

Page 68: Programacion basica

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

68

Page 69: Programacion basica

ESTRUCTURAS

Def.- Tipo de dato que crea el programador

Formato.-

Formato EjemploStruct xxx{…..…… datos simples……};

Struct circuito{float voltajeFloat corrienteFloat Resistencia};

Anidamiento de estructuras.-

datos z;z. nombrez.nacimiento.messtruct 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

69

Page 70: Programacion basica

1.- Leer datosScanf(“%f”, &z.campon); 2.- Sacar datosPrintf (“%t”, Z.campon);

3.- W=(a+z.campon * p)/ y.campo2;

EJERCICIO# include……Struct circuito{float v;Float I;Float r;};Circuito a;tmain(…..){#ingreso de datosprintf(“v= i=”);scanf(“%f%f”, & a.v,&a.i);//calculoa.r=a.v/a.i;//salidaprintf(“r=%5.3f”,a.r);}

// Arreglos estaticos de estructura#include…..struct circuito{Float v,I,r;};Circuito a[10];int j;….tmain(…){// ingreso de datosFor(j=0; j<10 ; j++){Printf(“v= , i= “);Scanf(“%f%f”,&a[j].v, &a[j].i);}//calculoFor(j=o; j<10; j++)A[j].r=a[j].v/a[j].i;

70

Page 71: Programacion basica

// salidaFor(j=0; j<10; j++)Printf(“r=%5.3f\n”, a[j].r);trampa}

// arreglos dinamicos de estructura#include…….Struct circuito{Floatv,i,r;};int j,n;circuito *a;…….main(…){// toma de memoriaPrintf(“n”);Scanf(“%d”,&n);a=new circuito[n];// ingreso de datosFor(j=0; j<n ; j++){Printf(“v= , i= “);Scanf(“%f%f”,&a[j].v, &a[j].i);}//calculoFor(j=o; j<n; j++)A[j].r=a[j].v/a[j].i;// salidaFor(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++)

71

Page 72: Programacion basica

{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);}….main(….){//toma de memoriaPrintf(“n=”);Scanf(%d”,&n);A=new circuito [n];Leer(a,n);Calculo(a,n);Salir(a,n);//borrar memoriaDelete[]a;trampa

}

V i r

v=[1]

i[4]

r[7]

j v,i,r

25-06-2009

72

Page 73: Programacion basica

f(x) Audio

>>wapread >>waplay

>>aviread >>avifile

y

Grafico (foto)

x

-

* .*

/ ./

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)

73

Page 74: Programacion basica

29-06-2009

Estructuras auto-referenciadas

a 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"74

Inf dirección

InfDirección

Page 75: Programacion basica

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;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[]){

75

Page 76: Programacion basica

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

76

Page 77: Programacion basica

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

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;

77

Page 78: Programacion basica

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

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;

78

Page 79: Programacion basica

ULT=aux;

}

break;

case 2:if (A==NULL)

printf("esta vacio");

else

{

if (A==ULT)

{

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)

{

79

Page 80: Programacion basica

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

}

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

80

Page 81: Programacion basica

{

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;

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

81

Page 82: Programacion basica

}

}

break;

case2: cin>>clave;

if (a==NULL)

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

else

{r=a;

if (clave==r->info)

{//elimina primero

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;

82

Page 83: Programacion basica

}

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;

}

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;

83

Page 84: Programacion basica

BORRAR

aux=A;

A= aux direc;

delete aux;

2.- INSERTAR FINAL (Ubicar el puntero en el último nodo)

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

84

Page 85: Programacion basica

p direc = aux direc;

delete aux;

include “stdafx.h”

struct nodo

{

char nombre [10];

float edad;

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;

85

Page 86: Programacion basica

A=aux;

Break;

Case 2: if(A==NULL)

printf(“Está vacío”);

else

{

aux=A;

A= aux direc;

delete aux;

}

}

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

}

86

Page 87: Programacion basica

09-07-2009

FORMAS DE ALMACENAMIENTO DE LAS VARIABLES

Auto

Static

Register auto float a;

Extern static tipo var;

Const register tipo var;

Volatile

EJEMPLO:

Void f1()

{

static int a= 10;

a=a+10;

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

]

Main(..)

;

f1();// 20

f2();// 30

f3() ;// 40

}

87

Page 88: Programacion basica

COMANDOS DE PROCESADORES

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

#define

#undef

#if

#else

#endif

#ifdef

#ifndef

#pragma

#error

#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

88

Page 89: Programacion basica

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("*"); \

printf("\n") \

}

main()

{

p=m+5;

#undef m

rutina;

}

#undef (elimina a la macro)

13-07-2009

#indef uno_h

#define uno_h

89

Page 90: Programacion basica

Struct dato

{

Char nombre [15];

Int x;

};

#endif

#include….

#include “uno.h”

Dato a;

……main()

{

Scanf(“%s”,&a.nombre);

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

90

Page 91: Programacion basica

                                        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:

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

91

Page 92: Programacion basica

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

               

File *p,*q,*f

p=fopen (“ nombre del archivo”,” + ”)

a b binario

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

r

Archive Existe No existe

92

Numeros

Estructuras

Imágenes

Audio

Video

Page 93: Programacion basica

a(append) adiciona Creaw(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);printf("ingrese un numero");scanf("%d",&cont);

93

Page 94: Programacion basica

return 0;}

Bibliografía

http://www.geocities.com/eztigma/lenguajec.html

http://www.mailxmail.com/curso-introduccion-lenguaje-c/declaraciones

http://www.fismat.umich.mx/mn1/manual/node3.html#SECTION00330000000000000000

94

Page 95: Programacion basica

http://elvex.ugr.es/decsai/c/apuntes/tipos.pdf

http://ar.geocities.com/luis_pirir/cursos/operadores.htm

95