You are on page 1of 152

Fundamentos de Programación

Nombre: Sebastián Zúñiga

NRC: 3717

Fecha: 09-05-18

Instructora: Margarita Zambrano

Cuaderno Digital
Programación

Problema Solución

Problema

Proceso: Conjunto de pasos realizados de manera ordenada para solucionar un problema.

Ejemplo:

Computador no
enciende

1. Revisar conexiones, CPU, Monitor.

2. Revisar la fuente de energía.

Si no enciende abrir el CPU

Numero: 3482

Residuos:
2

Algoritmo

1. El numero dividir para 10

2. Guardar el cociente

3. Guardar el residuo

4. Escribir residuo

5. Guardar en número el cociente

6. Repetir el paso 1 mientras el cociente sea distinto de cero

Prueba de Escritorio

Numero Cociente Residuo Escribir

9538 953 8 8

953 95 3 3

95 9 5 5

9 0 9 9

0 - - -
Algoritmo: Conjunto de pasos realizados de manera ordenada para solucionar un

problema.

Como hacer Michelada

1. Cortar por la mitad el limón con el cuchillo

2. Exprimir el limón en la jarra con el exprimidor

3. Abrir la cerveza con el destapador

4. Verter la cerveza en la jarra hasta que la botella este vacía

5. Colocar una cuchara de tabasco en la jarra

6. Revolver hasta que los ingredientes se mezclen con una cuchara

7. Mezclar la sal y pimienta en el plato

8. Humedecer el borde del vaso con limón

9. Colocar el borde del vaso en el plato con sal y pimienta

10. Colocar el hielo en el vaso

11. Verter el líquido de la jarra en el vaso hasta llenarlo

12. Servir

Resolución de Problemas

Para realizar un programa se debe tomar en cuenta 2 pasos:

1. Resolución: Se refiere al diseño de la solución a través de un algoritmo


2. Implementación: Escribir en un lenguaje de programación para poder implementar

mi programa

Lenguaje de programación: Utilizar una sintaxis específica para mantener una

comunicación con el computador a través de instrucciones que cumplen con una sintaxis

Fases de la resolución de Problema

Análisis
Fase 1: Diseño Verificación

Codificación

Ejecución Verificación

Análisis: Involucra las posibles soluciones que se puede dar al problema

Diseño: Los pasos deben ser claros y el algoritmo debe ser: preciso, finito y definido

Partes del algoritmo:

1. Una entrada: Los datos ingresados, todo lo que ingresa el usuario

2. Un proceso: Son las operaciones

3. Una salida: Es el mensaje


Realizar el algoritmo para la verificación del número de cédula

Entrada: num_cedula (10 dígitos)

Proceso:

171893438-1

1*2=2

1*2=2

9*2=18-9=9

4*2=8

8*2=18-9=9

Suma= 28

7+8+3+3=21

28+21=49

50-49=1

Salida= Cedula correcta

Cedula incorrecta

Necesito Calcular el área del cuadrado

Entrada: valor_del_lado

Proceso:
L*L

Resultado= El área

Algoritmo:

Inicio

1. Ingresar y guardar el lado del cuadrado

2. Multiplicar lado por lado

3. Guardar el resultado del área

4. Escribir resultado del área

Fin

Preparar una taza de café

Entrada: café, taza,cuchara,agua,azúcar,plato,olla,estufa,grifo de agua,fosforos, hornilla

Proceso:

Luego de hervir el agua en la tetera colocar en la taza, agregar café, azúcar y servir

Salida: Taza de café preparada

Algoritmo

Inicio

1. Abrir el grifo de agua

2. Llenar la olla con agua hasta llenarla


3. Cerrar el grifo de agua

4. Encender la hornilla con fósforos

5. Colocar la olla con agua en la hornilla

6. Mientras la olla con agua en la hornilla no hierva

esperar

7. Colocar el agua caliente en la taza hasta que esté llena

8. Colocar dos cucharas de café en la tasa

9. Colocar dos cucharas de azúcar en la tasa

10. Revolver con la cuchara hasta obtener una mezcla uniforme

11. Colocar la tasa sobre el plato

12. Servir

Fin

Algoritmo para verificar si un año es divisible para 7

Inicio

1. Ingresar el año

2. Dividir para 100

3. Guardar residuo

4. Si residuo es 0 entonces dividir el año para 400 y guardar el residuo |


5. Dividir el año para 4 y guardar el residuo

6. Si residuo1=residuo2 entonces

7. Escribir “Año Bisiesto”

8. Caso contrario Escribir “año no bisiesto”

9. Caso contrario

10. Dividir el año para 4

11. Guardar residuo

12. Si residuo es 0 entonces

13. Escribir “Año bisiesto” (siempre el escribir primero)

14. Caso contrario

15. Escribir “Año no bisiesto”

Fin

Prueba de escritorio

Año Residuo1 Residuo2

2012 Diferente de cero 0

Algoritmo para verificar si un número es divisible para 3

Inicio

1. Ingresar un número

2. Colocar 0 en sumar

3. Dividir número para 10


4. Guardar cociente

5. Guardar residuo

6. Sumar residuo

7. Guardar cociente en número

8. Repetir paso 3 mientras cociente sea distinto de cero

9. Dividir la suma de los residuos para 3

10. Guardar residuo

11. Si residuo es 0

12. Escribir “Divisible”

13. Caso contrario

14. Escribir “No divisible”

Fin

Realizar un algoritmo para ver si un número es divisible para 7 o no

Entrada: Ingresar un número

Proceso: Si el número es menor o igual a 99 se divide el numero para 7 y se verifica si el

residuo es 0. Si el número es mayor a 99 se divide el número para 10 luego se multiplica el

residuo por 2 y luego se resta la multiplicación para el cociente de la división. Si la resta es

mayor a 99 se divide el número para 7 y si verifica si el residuo es cero, pero si la resta es

menor o igual a 99 se repite el proceso hasta que la resta sea mayor a 99.
Salida: Numero es divisible para 7

Número no es divisible para 7

Inicio

Ingresar un número

Si el número es menor e igual que 99 Entonces

Dividir el numero para 7

Guardar residuo

Si el residuo es 0 entonces

Escribir” el número es divisible para 7”

Sino

Escribir “el número no es divisible para 7”

Fin_si

Sino

Repetir

Dividir el número para 10

Guardar el residuo y el cociente

Multiplicar residuo por 2

Guardar multiplicación
Restar multiplicación de cociente

Guardar resta

Guardar en número la resta

Mientras resta sea mayor a 99

Dividir la resta para 7

Guardar residuo

Si residuo es igual a 0 entonces

Escribir “el número es divisible para 7”

Sino

Escribir “el número no es divisible para 7”

Fin_si

Fin

Numero Cociente Residuo Multiplicación Resta

45248 4524 8 16 4508

4508 450 8 16 434

434 43 4 8 35

Número divisible
para 7
Realizar el algoritmo para verificar si un número es divisible para 11 o no

Entrada: Ingresar un número

Proceso:

Salida: Número es divisible para 11

Número no es divisible para 11

Inicio

1. Ingresar el número

2. Colocar 0 en suma1 y en suma2

3. Si número es menor o igual que 99 Entonces

Dividir número para 11

Guardar residuo

Si residuo es igual que 0 entonces

Escribir “Es divisible”

Sino

Escribir “No es divisible”

Fin_si
4. Sino

Colocar 1 en aviso

Repetir

Dividir número para 10

Guardar residuo y cociente

Si aviso es 1 entonces

En suma1guardar suma1+residuo aviso poner 0

Sino

En suma2 guardar suma2+residuo aviso poner 1

Fin_si

Guardar cociente en número

Mientras el cociente sea distinto de cero

Restar suma1-suma2

Dividir restar para 11

Guardar residuo

Si el residuo es igual a 0 entonces

Escribir” Es divisible”

Sino
Escribir “No es divisible”

Fin_si

5. Fin_si

Fin

Número Aviso suma1 suma2 Residuo Cociente

48222 1 0 2 2 4822

4822 0 2 2 482

482 1 2 10 2 48

48

Validación de datos

Algoritmo para ingresar 2 números positivos y ver cuál es el mayor

Entrada: 2 Números positivos

Proceso: Verificar si los números son positivos y ver qué número es el mayor

Salida: Cual es el número mayor

Inicio

1. Ingresar un número1

2. Mientras el número1 sea menor a 0


Escribir” ingresar número1”

3. Ingresar un numero2

4. Mientras el número2 sea menor a 0

Escribir” ingresar número2”

5. Si numero1 es mayor a número2 entonces

Escribir “el número1 es mayor”

Sino Si número2 es mayor a numero1 entonces

Escribir “el número2 es mayor”

6. Sino

Escribir “son iguales”

Fin

Realizar un algoritmo para leer 2 números si el primer número es mayor mostrar la suma de

los 2, si el segundo es mayor elevar al cuadrado cada número sumarlos y mostrar su

resultado, en caso de que los 2 números sean iguales restar los 2 números y presentar el

mensaje que son iguales

Inicio

1. Ingresar un número1

2. Ingresar un numero2

3. Si numero1 es mayor a número2 entonces


Escribir “el número1 mas numero2”

Sino Si número2 es mayor a numero1 entonces

Multiplicar numero1 por numero1

Guardar multiplicar1

Multiplicar numero2 por numero2

Guardar multiplicar2

Sumar multiplicar1 mas multiplicar2

Guardar sumar

Escribir “la suma”

Sino

Restar numero1 de numero2

Escribir “son iguales”

Fin

Representación de algoritmos

Existen tres tipos de representación:

4. Lenguaje natural

5. Pseudocódigo

6. Diagrama de Flujo
Diagrama de Flujo

Son la representación gráfica sobre los datos a través de un proceso dando así una solución

al problema planteado. El diagrama de flujo utiliza ciertos símbolos para representar los

pasos en forma secuencial.

Símbolo Significado

Inicio

Proceso

Entrada/Salida

Decisión

Comentario

Impresión

Línea de flujo

Conector

Realizar un algoritmo para saber cuál es el mayor de dos números a raves del

diagrama de flujo
Inicio

Num1

Num2

Si No
Num1>
Num2

Numero1 Numero2
es mayor es mayor

Fin

Dato: Hecho independiente

Tipos de datos:

1. Entero

1. Numérico entero (+-)

2. Serie de digito (0….9)

3. Numéricos reales (+-)

4. Serie de digito (0….9)

5. Parte entera
6. Parte decimal

7. Lógicos

1. Verdadero

2. Falso

1. Carácter

1. Alfanumérico

2. Especiales

3. Mayúsculas

4. Apostrofes

5. Numerales (carácter)

6. Apostrofes

Ejm: “a”

7. Cadenas: Conjunto de caracteres

Dentro del algoritmo el dato es una variable

<tipo_dato>: identificador

Ej:

Entero: num1, num2

Variable: espacio de almacenamiento en donde podemos colocar datos o extraer datos


Asignación de variables: Declaración de variables

Num1=5

Constante: Permanece así durante todo el programa

8. Entero: num3=2

Expresiones: conjunto de datos con operadores

Aritméticos

+,-,*,/,mod,div

A= 5 B=3

C=A/B (resultado en decimales) 1,66

C=A div B (resultado es entero) 1

C= A+B 8

C= A-B 2

C= A*B 12

C= A mod B 2 ( solo para enteros)

Relación

><;>=;<=;!=

==

a>b
5>1

8<>0 distinto

Operadores lógicos:

&&; ||; !

Y o not

9. Todo valor distinto de cero es verdadero para el computador

Ej:

a=2 b= 0

c= a&&b

c= 0

Diseñar un algoritmo en pseudocódigo y diagrama de flujo que lea 4 variables calcule

e imprima producto, suma y su promedio

10. Análisis

Entrada: 4 variables

Proceso: Se ingresan las 4 variables se suman, se saca el producto, el promedio y se

despliega resultados

Salida: Suma, producto y promedio

11. Diseño del algoritmo

Algoritmo calc_sum_prod_prom
Var

//Real:n1,n2,n3,n4, sum, prod, prom

Entero: n1, n2, n3, n4, sum, prod, prom

Real: prom

//Const

//real: num=2

Inicio

Leer n1 // Leer n1, n2, n3, n4

Leer n2

Leer n3

Leer n4

sum= n1+n2+n3+n4

prod= n1*n2*n3*n4

//prom= sum/4

prom= (n1+n2+n3+n4) /4

Escribir “sum, prod, prom”

Fin
Inicio

Num1

Num2

Num3

Num4
Diseñar el algoritmo que lee el peso de un individuo en libras y devuelva el peso en

kilogramos y gramos

12. Análisis

Entrada: Peso

Salida: Peso en kilogramos y gramos

Datos auxiliares: Libra

Proceso: Se ingresa el peso en libras y se lo transforma en kilogramos y gramos y

desplegar en pantalla

13. Diseño del algoritmo

Algoritmo conversión_libras_Kgr_gr

Var

Real: peso, Kg, gr

Const

Real: libra=0.453592

Inicio

Leer peso

Kg= libra*peso

gr= Kg*1000

Escribir “el peso en kilogramas es”,Kg


Escribir” el peso en gramos es”,gr

Fin

Inicio

Peso

Kg= lbxpeso

Gr= Kg*1000

“El peso en
kilogramos
es”Kg

“El peso en
gramos es”gr

Fin
Realizar un algoritmo para hacer una llamada telefónica

14. Análisis

Entrada: Número

Salida: La llamada

Datos auxiliares: Celular

Proceso: Buscar el contacto en el teléfono celular, si lo encuentra realizar la llamada, sino

ingresar el número al cual desea llamar

15. Diseño del algoritmo

Algoritmo llamada_telefonica

Var

Entero: número telefónico

Carácter: contacto

Const

Cadena: Luis:0987545157

Inicio

Escribir” Ingresar el contacto”

Leer contacto

Si contacto está en cadena entonces

Colocar contacto en número telefónico


Realizar la llamada

Sino

Escribir “Ingresar el número telefónico”

Leer número telefónico

Realizar la llamada

Fin

Inicio

Contacto

Si No
Si contacto está
en cadena

Número
Número telefónico
telefónico=Contacto

Hacer llamada Hacer llamada

Fin
Bucle

Proceso

Si
Condición

No

Proceso

Diseñar un algoritmo para ingresar números enteros entre 1 y 10, desplegar la suma
Inicio
de los números

Sum=0

Num=1

Sum=Sum+Num

Num=Num+1

Si
Num<=10

No

Sum

Fin
Realizar un diagrama de flujo para ver si un número es divisible para 3

Inicio

Sumar=0

Num

No Si
Num<=10

Cociente=Numdiv10
Si Num MOD 3==0
Residuo = NumMOD10 No

El numero es
El numero no es
divisible para 3
divisible para 3
Sumar= Sumar+Residuo

Número=Cociente

No

Cociente!=0

Si

Sumar MOD 3==0


Si
No
El numero es
El numero no es divisible para 3
divisible para 3

Fin
Paradigmas de la programación

16. Estructurada:

1. Da mayor prioridad a los datos

2. Es secuencial

3. Orientada a objetos:

1. Funciones

2. Eventos

3. Real (clases y objetos)

Deber diferencias entre las 2 cuadro sinóptico y conceptos generales de programación

Programa, Compilación, algoritmo, sentencia, instrucción, lenguaje de programación,

ejecución de un programa y otros que encontremos

Algoritmo: Es un conjunto de pasos debidamente ordenados para dar solución a un

problema.

Programa: Es un conjunto de sentencias secuenciales para dar solución o cumplir con un

propósito

Lenguaje de programación: El medio a través del cual se expresa un algoritmo.

1. Compilación de un programa: Verificar sentencia tras sentencia, línea a línea se

van a ir comprobando errores de sintaxis y errores lógicos.

2. Ejecución del programa: Vemos los resultados del algoritmo y compruebo si los

datos de salida que detecte al inicio.


Estructura del programa

Bibliotecas: Funciones especiales que son llamadas desde mi programa principal

#include<stdio.h>//.h head

//estándar input/output

Declaración de funciones

La parte principal de mi programa es main() int main() o void main()

Implementación de funciones

printf: significa escribir

;= significa fin de instrucción

{= inicio

{al revés= fin


Return0= nos sirve para disminuir la velocidad y puede ser cualquier numero entero

\n= una línea mas abajo

%d= indicador de formato %d=

int %ld= long int %lf= double %f=Float %c= char

Scanf= Signifca leer numero 1 permite escribir

Tipos de datos:

Entero: int

Deciamles: double o float

Caractere: char

Tipos de datos que no me alcancen el int: long int

Variables deben ser máximo 8 caracteres

EL nombre de la variable no debe empezar con números

No debe tener caracteres especiales

No debe tener espacios en blanco

No debe existir variables con valores reservados

Diferencias entre la programación estructurada y la programación orientada a

objetos

Programación estructurada:
Es un paradigma de la programación que es utilizada para la escritura de un código de

programación, se considera como un estilo el cual tiene como objetivo lograr que el

programador elabore programas que al mismo tiempo sean sencillos y fáciles de entender,

esta programación se basa en un teorema fundamental, el cual nos dice que cualquiera que

sea el problema ya sea considerado un problema largo o difícil se lo puede resolver utilizando

únicamente las tres estructuras básicas las cuales son: secuencia, selección e iteración.

Características:

1. Usa tres estructuras básicas: secuencia, selección e iteración.

2. Secuencial: Esta nos indica que las instrucciones de un programa se deben ejecutar

una después de otra, tal cual aparece en el programa se lo representa gráficamente de

la siguiente manera:

3. Selectiva: También es considerada como una estructura de si-verdadero-falso esta

estructura propone la elección entre dos alternativas las cuales se basan en el resultado

de la evaluación de una condición, lo mismo que equivale a la instrucción mientras

(IF) y se lo representa gráficamente de la siguiente manera:


4. Iteración: También es considerada como una estructura hacer-mientras-que, esta

estructura propone la ejecución de una repetición de la instrucción siempre cuando

esta cumple una determinada condición y se lo representa gráficamente de la siguiente

manera:

5. Se puede crear programas que sean más sencillos y fáciles de entender.

6. Al momento de encontrar las fallas es mucho más fácil ya que existe una lógica en

los pasos.

7. Un programa que sea estructurado es mucho más fácil de ser leído por su secuencia.

Programación estructurada a objetos


Es un paradigma de programación el cual define a los programas como clases de objetos los

cuales son considerados como entidades que combinan estado el cual son las propiedades o

datos, comportamiento que es el procedimiento y la identidad la cual es una propiedad que

lo diferencia de los demás. Esta programación considera a cada programa como un

conjunto de todos los objetos que colaboran entre si para realizar las tareas, lo cual permite

mantener y volver a usar los programas con facilidad.

Características:

1. Abstracción: Generar un concepto de un conjunto de objetos.

2. Encapsulación: Capacidad de agrupar y condensar en un entorno con limites bien

definidos.

3. Herencia: Se lo aplica solo a las clases.

4. Polimorfismo: Hace referencia a la posibilidad de acceder a un rango variado de

funciones distintas a través del mismo interfaz

Cuadro comparativo

Tipo Definición Historia Ventajas Desventajas Lenguaje de

programación

Programación Es un paradigma de la Surgió en 1. Los programas 7. La Se lo puede usar

estructurada programación que es la década son más fáciles existencia de en cualquier

utilizada para la de 1960 y de entender. un único lenguaje de

escritura de un código principio programación.

de programación, se
considera como un de los años 2. Puede ser leído bloque de

estilo el cual tiene como 1970. de arriba hacia programa.

objetivo lograr que el abajo


8. Cuando el
programador elabore
3. Las código del
programas que al
instrucciones bloque es
mismo tiempo sean
poseen una muy grande
sencillos y fáciles de
relación más encontrar su
entenderse utiliza
estrecha. fallo es más
únicamente las tres
difícil.
4. Menores costos
estructuras básicas las
de
cuales son: secuencia,
mantenimiento.
selección e iteración.

5. Al momento de

encontrar las

fallas es mucho

más fácil ya

que existe una

lógica en los

pasos.

6. Da facilidades

al programador
Programación Es un paradigma de Surgió en 1. Se puede 6. No se Simula,

orientada a programación el cual la década reutilizar el pueden Smalltalk,

objetos define a los programas de 1980 código. modelar ABAP2, ABL3,

como clases de objetos pero se todos los ActionScript,


2. Permite dar
los cuales son hizo objetos. ActionScript 3,
una solución
considerados como popular Ada, C++, C, C
mas facial a 7. La ejecución
entidades que 1990. Sharp (C#),
problemas del
combinan estado el Clarion,
complejos. programa es
cual son las Clipper4, D,
más lenta.
3. Facilitan la
propiedades o datos. Object, Pascal,
creación de 8. Cuando el
Gambas, entre
programas código es
otros.
visuales. muy grande

provoca que
4. Brinda mayor
su
rapidez al
modificación
desarrollar
sea muy
software.
trabajosa y
5. Relaciona el
difícil.
sistema al

mundo real.

Conceptos generales de programación:


Programa: Un programa es un conjunto de instrucciones u ordenes basadas en un lenguaje

de programación que una computadora interpreta para resolver un problema o una función

específica.

Compilación: La compilación es el proceso y resultado de compilar código fuente

Compilar: Proceso de traducción de un código fuente (escrito en un lenguaje de

programación de alto nivel) a lenguaje máquina (código objeto) para que pueda ser

ejecutado por la computadora.

Algoritmo: Un conjunto finito de instrucciones que se deben seguir para resolver un

problema.

Sentencia: En programación, una sentencia es una línea de código en algún lenguaje de

programación.

Instrucción: Una instrucción indica a la computadora la o las operaciones que ésta debe

realizar con unos datos terminados.

Lenguaje de programación: Cualquier lenguaje artificial que puede utilizarse para definir

una secuencia de instrucciones para su procesamiento por un ordenador o computadora.

Lenguaje máquina: Está formado por las instrucciones que es capaz de ejecutar

directamente la máquina, estando estas construidas mediante cadenas de 0s y 1s.

Lenguaje ensamblador: En éste, cada instrucción máquina es traducida al lenguaje

humano, usando, para ello, una notación nemotécnica que resume en una pequeña cadena

de letras, la

operación que realiza la instrucción máquina asociada.


Abstracción: Proceso de análisis del mundo real con el propósito de interpretar los

aspectos

esenciales de un problema y expresarlo en términos precisos.

Modelización: Abstraer un problema del mundo real y simplificar su expresión, tratando

de encontrarlos aspectos principales que se pueden resolver, requerimientos, los datos que

se han de

procesar y el contexto del problema.

Precondición: Información conocida como verdadera antes de iniciar el programa.

Postcondición: Información que debiera ser verdadera al cumplir un programa, si se

cumple

adecuadamente el requerimiento pedido.

Especificación: Proceso de analizar problemas del mundo real y determinar en forma clara

y concreta el objetivo que se desea. Especificar un problema significa establecer en forma

univoca el contexto, las precondiciones el resultado esperado, del cual se derivan las

postcondiciones.

Depuración: La depuración de programas es el proceso de identificar y corregir errores de

programación.

Operadores y expresiones en C

En C existen dos tipos de operadores: binarios y unarios

Binarios: Son aquellos que tienen 2 operados


1. Aritméticos

2. Lógicos

3. Relacionales

Unarios: Solo tienen 1 operando

1. Prefijos: pueden ser incrementales o decrementales

2. Sufijos: pueden ser incrementales o decrementales

Aritméticos: +,-,*,/,%=MOD es solo para enteros

Lógicos: &&, ||, !

Relacionales: ><, >=, ==, !=

Incremento o Decremento: ++, --

Prioridades de los operadores


?: = analiza si una expresión es verdadera o falsa

Tiene 3 partes la primera es la condición, la segunda en el caso que la expresión sea

verdadera y tercera en el caso que la expresión sea falsa

(x+i)>3?:x=5:x=0 primero es verdadero y el segundo falso

Sentencia de Control

Sentencias de condición

Cuando yo necesito tomar una decisión o mas

 If: (1 condición)

 If-else: (2 decisiones/condiciones)
 If-else-If: (+2 decisiones)

Ejemplos:

Int num;

Printf (“Ingrese un numero”);

Scanf(“%d”,&num);

If(num<=0);

Printf(“El numero es menor a cero”);

Int num;

Printf (“Ingrese un numero”);

Scanf(“%d”,&num);

If (num%2==0)

Printf(“Escriir par”);

Else

Printf(“Escribir impar”);

Realizar un algoritmo que permita ver el mayor de 2 números

Algoritmo

Inicio

Var
Entero num1,num2;

Leer num1;

Leer num2;

Si (num1>num2) entonces

Escribir “numero1 es mayor numero2”;

Caso contrario si (num2>num1)

Escribir “numero2 es mayor numero1”;

Caso contrario

Escribir “son iguales”;

Fin

C++

int main () {

int num1,num2;

printf (“Ingrese el número uno”);

scanf (“%d”,&num1);

printf (“Ingrese el número dos”);

scanf (“%d”,&num2);

if (num1>num2)
printf(“numero1 es mayor numero2”);

else if (num2>num1)

printf(“numero2 es mayor numero1”);

else

printf(“numeros iguales”); }

Realizar un programa que compruebe si un año ingresado por el usuario es bisiesto o

no
Ingresar tres notas parciales, sacar su promedio si su promedio es mayor igual a 14

escribir aprobado caso contrario reprobado

Switch() : Para enteros y para char cuando es una decicison multiple no para flotantes

Sintaxis:

Switch (variable)

Case valor1:

Break;

Case valor2:
Break;

Case valor3:

Break;

Default:

Ejemplo:

Switch (dia)

Case1:

Printf(“Lunes”);

Break;

Case2:

Printf(“Martes”);

Break;

Case3:

Printf(“Miercoles”);

Break;
Case4:

Printf(“Jueves”);

Break;

Case5:

Printf(“Viernes”);

Break;

Case6:

Printf(“Sabado”);

Break;

Case7:

Printf(“Domingo”);

Break;

Default:

Printf(“Error”);

El if y el switch nos sirve para una decision multiple pero el switch solo enteros y

caracteres

En caso, seleccione entre ahi es switch


Realizar un programa en el que se despliegue un menu de opciones

si el usuario presione la tecla A sume 2 numeros E reste dos numeros

I multiplique dos numeros O divida dos numeros. Controlar con otro caracter

letra incorrecta
Sentencias de repetición:

Do{

}while (condición)

Centinela: cuando quiere realizar algo bajo una condición

No conoce cuantas veces realiza un proceso

Por lo menos una vez

While (condición)

Validación de datos

Cero veces

For (inicio, condición, incremento/decremento)


Conoce el # de veces de realizar un proceso

Do while: pasa el dato y valido

While: primero valido y luego permite hacer otra actividad

For: cuando sabe el número de veces que voy a realizar una actividad

+= sum +=3 significa que sum=sum+3

-=

/= coc/=2 significa que coc=coc/2

%= *=

Ejemplo:

Sum=5

Do{

Sum+=3;

]While (sum<15);

Si es verdadero se repite si es falso sale

While
Sum=5;

While (sum<15)

Sum+=3;

Realizar un programa que permita separar un numero en sus cifras

Operadores Unitarios

Estos operadores se los conoce como operadores de incremento o decremento.

Operadores de Incremento ++

Operadores de Decremento –

Estos operadores solo pueden afectar a un operando y pueden estar antes o después del

operando.

Ejemplos:
a=15;

++a;

Esto quiere decir que la variable se incrementa en uno eso significa que ahora a tiene 16

b=3;

b++;

en este caso b tiene 4

j=5;

j--;

en este caso j se disminuye en 1 es decir j tiene 4

j=8;

--j;

En este caso j tiene 7

El orden del operador ++ o – se puede colocar antes o después y cumple con la función de

aumentar o disminuir en uno.

Este operador se puede combinar con el operador asignación = y ahí si se debe poner

mucha atención como se usa estos operadores.

Ejem:

x=5;

y=2;
x=y++;

x Y

5 2

2 3

Después de la sentencia x=y++ x toma el valor de 2 y y toma el valor de 3 por que el

operasor = se resuelve de derecha a izquierda entonces primero se guarda el valor de y en x

y luego se incrementa y porque el operador ++ le afecta a y.

El mismo ejemplo pero con el operador antes de y

x=5;

y=2;

x=++y;

x Y

5 2

3 3

En este caso primero x guarda el valor incrementado y luego y se incrementa en uno

Resolver los siguientes ejemplos:

a) (3*i-2*j)%(2*d-c)*j!=6

b) - -j-!(i<=j)

c) i++ %2*x+y==0
donde:

los valores son:

int i=8,j=5;

float x=0.005,y=-0,001;

char c=’c’,d=’d’;

Clases con su esposo

Bucles

Sentencia While Sentencia do-while Sentencia for

Al menos se ejecuta 0 veces Se conoce el número de veces que se va a


Al menos se ejecuta 1 vez
repetir
Sintaxis: Sintaxis:
Sintaxis:
1. While(condición_bucle) 1. Do sentencia;while (expresión)
Sentencia; es el cuerpo 1. for (Inicializacion/es; Condicion_Iteracion;
2. Do {
2. While(condición_bucle) Incremento/Decremento)
Sentencia1;
{ Cuerpo sentencia; cuerpo del bucle
Sentencia2;
Sentencia1; del 2. for (inicialización/es; Condicion_Iteracion;
Sentencian;
Sentencia2; bucle Incremento/Decremento)
}while (expresión);
Sentencian; {
3. Do
} Sentencia1;
Sentencia; Cuerpo
Sentencia2;
Cuerpo del bucle While (expresión) del bucle
Sentencian;
Es la expresión lógica que
}
determina si las acciones se
repiten
inicialización/es= Inicializar la variable de
control del bucle.
Condicion_Iteracion=Expresión lógica que
determina si la acción se repite o se ejecuta,
mientras sea verdadera la condición
Incremento/Decremento= Incrementa o
decrementa la variable del control del bucle
Bucles anidados

1. for()

for()

para realizar arreglos

2. for()

for()

for()

para realizar matrices

3. for()

for()

for()

for()

for()

para realizar espacios vectoriales

Bucles Anidados Combinados


3. for()

do()

4. do()

for()

5. do()

while()
Acumuladores

Definición= Es una variable especial que se utiliza para acumular valore

Sumatorias: ∑(signo)

Inicializar el acumulador

Acum=0; neutro aditivo

Acum+=valor;

Producto= Π(pi mayúscula)

Inicializar el acumulador

Acum=1; Neutro aditivo

Acum*=valor;

Ejercicios:

Escribir un programa que realice el cálculo de calorías consumida por una persona, en

función de los alimentos tomados

Ejecución:

¿Cuántos alimentos ha comido hoy? 8 num_elementos

Introduzca el número de calorías de cada uno de los 8 alimentos tomados:

Alimento1= 500

Alimento2= 50 calorías_por_alimento
Bucle
Alimento3= 1400
Alimento4= 700

Alimento5= 10

Alimento6= 5

Alimento7= 250

Alimento8= 100

Se imprime las calorías totales consumidas hoy son: 3015 total_calorias

El promedio de las calorías consumidas es: 376.88 promedio_calorias

Analisis del ejercicio

Variables

Entrada= num_elementos; calorías_por_alimento

Salida= total_calorias; promedio_calorias

Auxiliares= Con

tador=cont; Acumulador= total_calorias

Do While
While
For
Prueba de escritorio
Maximo y minimo
Cambios de base

86 B10,B2,B8

Decimal a binario
Binario a Decimal
Palíndromos: Que sea el mismo número al revés
Sucesiones y series numéricas

S(n)=1+2+3+4+….+n n-esimo termino

∞ n

S(n)=∑n Convertir S(n)=∑ i

N=1 i=1

Sucesion infinita Sucesion finita

n!=1*2*3*4*…..*n formula general

∞ n

n!= πn Convertir i!= π i

n=1 i=1

Sucesion infinita Sucesion finito


Bucles anidados

Serie del numero e


Prueba de escritorio
Serie del Seno
Funciones

Segmento de código que me permite cumplir un propósito o una función, hace que mi

programa sea modular. Esta propuesto por módulos o segmentos de código

Ventajas:

 Se detecta más fácilmente errores

 Modular

 Reutilización del código

Partes de una función

 Cabecera: Tipo dato retornado, nom.funcion, parámetros recepción.


 Cuerpo de la función: Implementación.

Realizar un programa que mediante funciones sumar, multiplicar, restar, dividir 2

números
Realizar con funciones un programa que permite ingresar un número y el numero

ingresado va a imprimir si es par o impar

Solo puede haber 7 for anidados

Realizar un programa en el que muestre un menú de opciones

Cuando el usuario ingrese el numero 1 sacara el mcd de 2 números


Cuando el presione el numero 2 va a realizar la verificación de si un número es primo

o no

Cuando presione el 3 el usuario va ingresar un número y va a separar en cifras

Cuando presione el 4 el usuario va a ingresar un número y va a desplegar la tabla del

número ingresado 1-12

#include <stdio.h>

#include <conio.h>

#include<math.h>

int ingreso (int x)

printf("Ingrese el dato:");

scanf("%d",&x);

return(x);

int mayor (int x, int y)

if (x>y)

return(x);
else

return(y);

int menor (int x, int y)

if (x<y)

return(x);

else

return(y);

int mcd()

int n1,n2,ma,me,res,maximo;

n1=ingreso(n1);

n2=ingreso(n2);

ma=mayor(n1,n2);

me=menor(n1,n2);

do
{

res=ma%me;

if (res==0)

maximo=me;

else

ma=me;

me=res;

}while (res!=0);

return(maximo);

bool primo()

int n1,raiz,cont=0,res;

n1=ingreso(n1);

raiz=sqrt(n1);

for(int i=1;i<=raiz;i++)
{

res=n1%i;

if(res==0)

cont++;

if (cont>1)

return(false);

else

return(true);

void tabla ()

int n1,i;

n1=ingreso(n1);

for (i=1;i<=12;i++)

printf("\n%d * %d= %d",i,n1,(i*n1));

}
}

void menu ()

int opc;

do

printf("\nMENU PRINCIPAL:");

printf("\n1. MAXIMO COMUN DIVISOR");

printf("\n2. NUMERO PRIMO");

printf("\n3. SEPARAR EN CIFRAS");

printf("\n4. DESPLEGAR TABLA DE MULTIPLICAR");

printf("\n5. SALIR");

printf("\ningrese la opcion que desea realizar:");

scanf("%d",&opc);

switch(opc)

case 1:

printf("El maximo comun divisor es:%d",mcd());


break;

case 2:

if (primo()==true)

printf("El numero es primo");

else

printf("el numero no es primo");

break;

case 3:

//separar cifras();

break;

case 4:

tabla();

break;

case 5:

getch();

break;

default:

printf("Opcion no valida");
}

}while (opc<=4);

int main()

menu();

return 0;

}
Arreglo:

Es una estructura de memoria continua que puede almacenar un mismo tipo de datos

Unidimensional: vector bidimensional: matrices

0=5 1=3 2=1 3=2 4=4

Cada casillero se le llama subíndice la estructura debe tener cualquier tipo de variable

Subíndice me permite acceder directamente a la posición de memoria que yo quiero

siempre son con letras mayúsculas


Dimensión 5 porque tiene 5 casilleros accede a través de un subíndice, solo puede

almacenar un solo tipo de dato.

Declaración de un arreglo

Tipo_dato nom_arreg [dimensión];

Ejemplo:

Int A[5];

Float NUMEROS[10];

Doublé CONJUNTO [25];

Bool DATOS [3];

Lectura arreglo

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

printf(“Ingrese el dato”);

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

0 Ingrese un dato

1 Ingrese un dato

3
2 Ingrese un dato

3 Ingrese un dato

4 Ingrese un dato

Un arreglo no puede crearse si la memoria ram no tiene suficiente espacio

Escritura de un arreglo

For (i=0;i<5;i++)

Printf(“%d”,A[i])

0 5

1 3

2 1

3 2

4 4

Puede haber hasta 7 for anidados

El for se hace infinito for(; ;) for infinito


For (i=0;;i++) tiene inicio

I=0;

For(;i<5;)

I++;

For(i=0,=1,k=5,i<5,j<10,k>0;i++,j--,k++)

Cuando se pone punto y como al final el for se convierte en un if

Desbordamiento de un arreglo A[6]=8 Acceder a una posición que no existe

Ingrese de 10 números en un arreglo de enteros


Buscar si un número es divisible o no para 11
Ordenamiento de un Arreglo

Método Burbuja:

0 Ingrese un dato

1 Ingrese un dato

2 Ingrese un dato

3 Ingrese un dato

7
4 Ingrese un dato

Aux=a

A=b

B=aux

Aux a b

5 5 3

3 5

For (i<0;i<dim;i++)

For (j=i+1;j<dim;j++)

If(A[i]>A[j])

Aux=A[i]

A[i]=A[j]

A[j]=aux

}
Cadena de caracteres

Char Nombre [20]

Char Apellido [20]

Scanf (

Cadena de caracteres :

Char nombre_cadena [dimencion ];

Ejemplo :

char nombre[7]:
A N I T A \0 ?

 Cadena de caracteres tiene al final un elemento nulo en este caso es “\0”.

 si no tiene el elemento nulo es un arreglo de caracteres.

Librería

 <String.h>

Lectura

 prinrf(“ingrese su nombre :”);

o scanf(“%s”,nombre);

 prinrf(“ingrese su nombre :”);

o gets(nombre);

impresión

 prinrf(“su nombre :”);

o scanf(“%s”,nombre);

%c 1 carácter

%s una cadena

Scanf(“%s”,Nombres[0])

Scanf (“%c”,&Nombres[0][0])

Carácter espacio “ “

Do
While(frase[i]!=´\0´)

If (frase[i]==´ ´)

Funcion

 Strlen()= # caracteres de mi cadena

 Devuelve un entero y recibe una cadena

Int i;

I=strlen(Nombre);

Printf(“%d”,strlen(Nombre));

Char*Nombre=”Hola”

Strcpy()=

Que tenga la misma dimensión para igualar una cadena de caracteres

Strcpy(c2,c1);

Char*nombre=”hola”

Char*nombre;

Nombre=”Hola” No se puede

Strcmp ver si son iguales mayúsculas y minúsculas

Stricmp ver si son iguales sin mayúsculas y minúsculas

Indicar todas las funciones que contiene la biblioteca string.h

memcpy:
Copia los valores de núm bytes desde la ubicación apuntada por la fuente directamente al

bloque de memoria apuntado por el destino.

El tipo subyacente de los objetos apuntados por los punteros tanto de origen como de destino

son irrelevantes para esta función; El resultado es una copia binaria de los datos.

La función no verifica ningún carácter nulo de terminación en la fuente; siempre copia

exactamente el número de bytes.

Para evitar desbordamientos, el tamaño de las matrices a las que apuntan los parámetros de

origen y destino debe ser al menos numéricobytes, y no debe superponerse (para la

superposición de bloques de memoria, memmove es un enfoque más seguro).

Ejemplo:

#include <stdio.h>

#include <string.h>

struct {

char name[40];

int age;

} person, person_copy;

int main ()

char myname[] = "Pierre de Fermat";

/* using memcpy to copy string: */

memcpy ( person.name, myname, strlen(myname)+1 );

person.age = 46;

/* using memcpy to copy structure: */

memcpy ( &person_copy, &person, sizeof(person) );


printf ("person_copy: %s, %d \n", person_copy.name, person_copy.age );

return 0;

memmove:

Copia los valores de núm bytes desde la ubicación apuntada por fuente al bloque de memoria

apuntado por destino. La copia se realiza como si se utilizara un buffer intermedio,

permitiendo que el destino y la fuente se superpongan.

El tipo subyacente de los objetos apuntados por los punteros tanto de origen como

de destino son irrelevantes para esta función; El resultado es una copia binaria de los datos.

La función no verifica ningún carácter nulo de terminación en la fuente; siempre copia

exactamente el número de bytes.

Para evitar desbordamientos, el tamaño de las matrices señaladas tanto por los parámetros

de origen y destino, serán al menos numéricos.

Ejemplo:

#include <stdio.h>

#include <string.h>

int main ()

char str[] = "memmove can be very useful......";

memmove (str+20,str+15,11);

puts (str);

return 0;

memchr:
Búsquedas dentro de los primeros num bytes del bloque de memoria apuntado por ptr para

la primera ocurrencia de valor (interpretado como un unsigned char ), y devuelve un

puntero a la misma.

Tanto el valor como cada uno de los bytes verificados en la matriz ptr se interpretan como

caracteres sin signo para la comparación.

busca un valor a partir de una dirección de memoria dada y devuelve un puntero a la primera

ocurrencia del valor buscado o null si no se encuentra

Ejemplo:

#include <stdio.h>

#include <string.h>

int main ()

char * pch;

char str[] = "Example string";

pch = (char*) memchr (str, 'p', strlen(str));

if (pch!=NULL)

printf ("'p' found at position %d.\n", pch-str+1);

else

printf ("'p' not found.\n");

return 0;

memcmp:

Compara los primeros num bytes del bloque de memoria apuntado por ptr1 a los

primeros num bytes apuntados por ptr2 , volviendo cero si todo el fósforo o un valor diferente
de cero que representa que es mayor si no lo hacen.

Tenga en cuenta que, a diferencia de strcmp , la función no deja de comparar después de

encontrar un carácter nulo.

Ejemplo:

#include <stdio.h>

#include <string.h>

int main ()

char buffer1[] = "DWgaOtP12df0";

char buffer2[] = "DWGAOTP12DF0";

int n;

n=memcmp ( buffer1, buffer2, sizeof(buffer1) );

if (n>0) printf ("'%s' is greater than '%s'.\n",buffer1,buffer2);

else if (n<0) printf ("'%s' is less than '%s'.\n",buffer1,buffer2);

else printf ("'%s' is the same as '%s'.\n",buffer1,buffer2);

return 0;

memset:

Establece el primer num bytes del bloque de memoria apuntado por ptr a la

especificada valor (interpretado como un unsigned char ).

Sobreescribe un área de memoria con un patrón de bytes dado

Ejemplo:

#include <stdio.h>

#include <string.h>
int main ()

char str[] = "almost every programmer should know memset!";

memset (str,'-',6);

puts (str);

return 0;

strcat:

Esta permite añadir un bloque de memoria a otro. Los dos bloques deben terminar con un

carácter nulo. Como en C las cadenas de caracteres no son tipos de datos en sí

mismos strcat añade una cadena a otra pasándole dos punteros a los bloques de memoria

reservados. El nombre strcat es una abreviación de "string concatenate" (concatenación de

cadena).

Ejemplo:

#include <stdio.h>

#include <string.h>

int main ()

char str[80];

strcpy (str,"these ");

strcat (str,"strings ");

strcat (str,"are ");

strcat (str,"concatenated.");
puts (str);

return 0;

strncat:

Añade los primeros caracteres numéricos de origen a destino , más un carácter nulo de

terminación.

Si la longitud de la cadena C en la fuente es menor que num , solo se copiará el contenido

hasta el carácter nulo de terminación.

Añade los n primeros caracteres de una cadena al final de otra

Ejemplo:

#include <stdio.h>

#include <string.h>

int main ()

char str1[20];

char str2[20];

strcpy (str1,"To be ");

strcpy (str2,"or not to be");

strncat (str1, str2, 6);

puts (str1);

return 0;

strchr:

Localiza un carácter en una cadena, buscando desde el principio.


Devuelve un puntero a la primera aparición de carácter en la cadena C str .

El carácter nulo de terminación se considera parte de la cadena C. Por lo tanto, también se

puede ubicar para recuperar un puntero al final de una cadena.

Ejemplo:

#include <stdio.h>

#include <string.h>

int main ()

char str[] = "This is a sample string";

char * pch;

printf ("Looking for the 's' character in \"%s\"...\n",str);

pch=strchr(str,'s');

while (pch!=NULL)

printf ("found at %d\n",pch-str+1);

pch=strchr(pch+1,'s');

return 0;

strrchr:

Localiza un carácter en una cadena, buscando desde el final.

Devuelve un puntero a la última aparición de carácter en la cadena C str .

El carácter nulo de terminación se considera parte de la cadena C. Por lo tanto, también se

puede ubicar para recuperar un puntero al final de una cadena.


Ejemplo:

#include <stdio.h>

#include <string.h>

int main ()

char str[] = "This is a sample string";

char * pch;

pch=strrchr(str,'s');

printf ("Last occurence of 's' found at %d \n",pch-str+1);

return 0;

strcmp:

Compara la cadena C str1 con la cadena C str2 . Esta función comienza comparando el

primer carácter de cada cuerda. Si son iguales entre sí, continúa con los siguientes pares

hasta que los caracteres difieran o hasta que se llegue a un carácter nulo de terminación.

Esta función realiza una comparación binaria de los caracteres. Para una función que tenga

en cuenta las reglas específicas de la configuración regional, vea strcoll .

Ejemplo:

#include <stdio.h>

#include <string.h>

int main ()

char key[] = "apple";

char buffer[80];
do {

printf ("Guess my favorite fruit? ");

fflush (stdout);

scanf ("%79s",buffer);

} while (strcmp (key,buffer) != 0);

puts ("Correct answer!");

return 0;

strncmp:

Compara los n primeros caracteres de dos cadenas numéricamente. Compara

hasta num caracteres de la cadena C str1 con los de la cadena C str2 .

Esta función comienza comparando el primer carácter de cada cuerda. Si son iguales entre

sí, continúa con los siguientes pares hasta que los caracteres difieran, hasta que se llegue a

un carácter nulo de terminación, o hasta que los caracteres numéricos coincidan en ambas

cadenas, lo que ocurra primero.

Ejemplo:

#include <stdio.h>

#include <string.h>

int main ()

char str[][5] = { "R2D2" , "C3PO" , "R2A6" };

int n;

puts ("Looking for R2 astromech droids...");


for (n=0 ; n<3 ; n++)

if (strncmp (str[n],"R2xx",2) == 0)

printf ("found %s\n",str[n]);

return 0;

strcoll:

Compara la cadena C str1 con la cadena C str2 , ambas interpretadas adecuadamente de

acuerdo con la categoría LC_COLLATE de la configuración regional C actualmente

seleccionada.

Esta función comienza comparando el primer carácter de cada cuerda. Si son iguales entre

sí, continúa con el siguiente par hasta que los caracteres difieran o hasta que se alcance un

carácter nulo que señale el final de una cadena.

El comportamiento de esta función depende de la categoría LC_COLLATE de

la configuración regional C seleccionada .

Strcpy: Copia la cadena C apuntada por fuente en la matriz apuntada por destino, incluido

el carácter nulo de terminación (y se detiene en ese punto).

Para evitar desbordamientos, el tamaño de la matriz señalada por el destino debe ser lo

suficientemente largo como para contener la misma cadena C que la fuente (incluido el

carácter nulo de terminación), y no debe superponerse en la memoria con la fuente.

Ejemplo:

/* strcpy example */

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

int main ()

char str1[]="Sample string";

char str2[40];

char str3[40];

strcpy (str2,str1);

strcpy (str3,"copy successful");

printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3);

return 0;

Strncpy: Copia los primeros caracteres numéricos de origen a destino. Si se encuentra el

final de la cadena C de origen (que se señala mediante un carácter nulo) antes de que se hayan

copiado los caracteres numéricos, el destino se rellena con ceros hasta que se le escriban un

total de núm caracteres. No se agrega implícitamente un carácter nulo al final del destino si

la fuente es más larga que num. Por lo tanto, en este caso, el destino no se considerará una

cadena C terminada nula (leerla como tal se desbordará). el destino y la fuente no se

superpondrán.

Ejemplo:

/* strncpy example */

#include <stdio.h>

#include <string.h>

int main ()

{
char str1[]= "To be or not to be";

char str2[40];

char str3[40];

/* copy to sized buffer (overflow safe): */

strncpy ( str2, str1, sizeof(str2) );

/* partial copy (only 5 chars): */

strncpy ( str3, str2, 5 );

str3[5] = '\0'; /* null character manually added */

puts (str1);

puts (str2);

puts (str3);

return 0;

strerror: Interpreta el valor de errnum, generando una cadena con un mensaje que describe

la condición de error como si estuviera configurada en errno por una función de la biblioteca.

El puntero devuelto apunta a una cadena asignada estáticamente, que no debe ser modificada

por el programa. Las llamadas posteriores a esta función pueden sobrescribir su contenido

(no se requieren implementaciones de biblioteca particulares para evitar carreras de datos).

Las cadenas de error producidas por strerror pueden ser específicas para cada sistema y la

implementación de la biblioteca.

Ejemplo:

/* strerror example : error list */

#include <stdio.h>

#include <string.h>
#include <errno.h>

int main ()

FILE * pFile;

pFile = fopen ("unexist.ent","r");

if (pFile == NULL)

printf ("Error opening file unexist.ent: %s\n",strerror(errno));

return 0;

Strlen: Devuelve la longitud de la cadena C str. La longitud de una cadena C está

determinada por el carácter nulo de terminación: Una cadena C es tan larga como el número

de caracteres entre el comienzo de la cadena y el carácter nulo de terminación (sin incluir el

carácter nulo de terminación).

Ejemplo:

/* strlen example */

#include <stdio.h>

#include <string.h>

int main ()

char szInput[256];

printf ("Enter a sentence: ");


gets (szInput);

printf ("The sentence entered is %u characters long.\n",(unsigned)strlen(szInput));

return 0;

strspn: Devuelve la longitud de la porción inicial de str1 que consta solo de caracteres que

son parte de str2. La búsqueda no incluye los caracteres nulos de terminación de ninguna de

las cadenas, sino que termina allí.

Ejemplo:

/* strspn example */

#include <stdio.h>

#include <string.h>

int main ()

int i;

char strtext[] = "129th";

char cset[] = "1234567890";

i = strspn (strtext,cset);

printf ("The initial number has %d digits.\n",i);

return 0;

Strcspn: Escanea str1 para la primera aparición de cualquiera de los caracteres que son parte

de str2, devolviendo la cantidad de caracteres de str1 leídos antes de esta primera aparición.
La búsqueda incluye los caracteres nulos de terminación. Por lo tanto, la función devolverá

la longitud de str1 si ninguno de los caracteres de str2 se encuentra en str1.

Ejemplo:

/* strcspn example */

#include <stdio.h>

#include <string.h>

int main ()

char str[] = "fcba73";

char keys[] = "1234567890";

int i;

i = strcspn (str,keys);

printf ("The first number in str is at position %d.\n",i+1);

return 0;

strbrk: Devuelve un puntero a la primera aparición en str1 de cualquiera de los caracteres

que son parte de str2, o un puntero nulo si no hay coincidencias. La búsqueda no incluye los

caracteres nulos de terminación de ninguna de las cadenas, sino que termina allí.

Ejemplo:

/* strpbrk example */

#include <stdio.h>

#include <string.h>

int main ()

{
char str[] = "This is a sample string";

char key[] = "aeiou";

char * pch;

printf ("Vowels in '%s': ",str);

pch = strpbrk (str, key);

while (pch != NULL)

printf ("%c " , *pch);

pch = strpbrk (pch+1,key);

printf ("\n");

return 0;

Strstr: Devuelve un puntero a la primera aparición de str2 en str1, o un puntero nulo si str2

no es parte de str1.

El proceso de coincidencia no incluye los caracteres nulos de terminación, pero se detiene

allí.

/* strstr example */

#include <stdio.h>

#include <string.h>

int main ()

char str[] ="This is a simple string";

char * pch;
pch = strstr (str,"simple");

strncpy (pch,"sample",6);

puts (str);

return 0;

Strtok: Una secuencia de llamadas a esta función divide str en tokens, que son secuencias

de caracteres contiguos separados por cualquiera de los caracteres que forman parte de los

delimitadores.

En una primera llamada, la función espera una cadena C como argumento para str, cuyo

primer carácter se usa como la ubicación inicial para escanear tokens. En llamadas

posteriores, la función espera un puntero nulo y utiliza la posición justo después del final del

último token como la nueva ubicación de inicio para el escaneo.

Para determinar el comienzo y el final de un token, la función primero escanea desde la

ubicación inicial para el primer carácter que no está contenido en los delimitadores (que se

convierte en el comienzo del token). Y luego escanea comenzando desde este principio del

token para el primer carácter contenido en delimitadores, que se convierte en el final del

token. El escaneo también se detiene si se encuentra el carácter nulo de terminación.

Este final del token se reemplaza automáticamente por un carácter nulo, y la función devuelve

el token.

Una vez que se encuentra el carácter nulo de terminación de str en una llamada a strtok, todas

las llamadas posteriores a esta función (con un puntero nulo como primer argumento)

devuelven un puntero nulo.


El punto donde se encontró el último token se mantiene internamente por la función que se

utilizará en la próxima llamada (no se requieren implementaciones de biblioteca particulares

para evitar carreras de datos).

Ejemplo:

/* strtok example */

#include <stdio.h>

#include <string.h>

int main ()

char str[] ="- This, a sample string.";

char * pch;

printf ("Splitting string \"%s\" into tokens:\n",str);

pch = strtok (str," ,.-");

while (pch != NULL)

printf ("%s\n",pch);

pch = strtok (NULL, " ,.-");

return 0;

Strxfrm: Transforma la cadena C apuntada por origen de acuerdo con la configuración

regional actual y copia los primeros caracteres numéricos de la cadena transformada a

destino, devolviendo su longitud. Alternativamente, la función puede usarse para recuperar

solo la longitud, al especificar un puntero nulo para el destino y cero para num.
Ejemplo:

#include <stdio.h>

#include <string.h>

int main () {

char dest[20];

char src[20];

int len;

strcpy(src, "Tutorials Point");

len = strxfrm(dest, src, 20);

printf("Length of string |%s| is: |%d|", dest, len);

return(0);

Strrev: Realiza la impresión de la cadena de caracteres a la inversa, con excepción del

carácter nulo.

Ejemplo:

#include <string.h>

#include <stdio.h>

intmain(void)

{char *forward = "string";

printf("Antes de strrev(): %s ", forward);

strrev(forward);

printf("Después de strrev(): %s ", forward);


return 0;

El programa tiene la siguiente salida:

Antes de strrev (): string

Después de strrev(): gnirts<br />

#include <string.h>

#include <stdio.h>

void ingresar_cadena(char x[20]){

printf("Ingrese el nombre:");

scanf("%s",x);}

void imprimir (char x[20]){

printf("%s\n",x);}

int dimension (char x[20]){

int i;

i=strlen(x);//numero de caracteres de una cadena

return(i);}

void copiar (char x[20],char y[20],char z[30]){

int i;

strcpy(y,"Hola");

strcpy(z,x);//Copia una cadena en otra


printf("\n%s",z);

int comparacion(char x[20],char y[20],char z[30]){

int i;

i=stricmp(x,y);//Devuelve un cero si son iguales un valor igual a 1 si la cadena 1 es

menor a la cadena 2 y un valor mayar a 1 si la cadena 1 es mayor a la cadena 2

if (i==0)

printf("\ncadenas iguales");

else

printf("\ncadenas distintas");}

int main()

char Nombre[20];

char Cad1[10],Cad2[30];

ingresar_cadena(Nombre);

imprimir(Nombre);

dimension(Nombre);

printf("El numero de caracteres es:%d",dimension(Nombre));


copiar(Nombre,Cad1,Cad2);

comparacion(Nombre,Cad1,Cad2);

return 0;

Puntero

Es un tipo de variable que se encarga de almacenar las direcciones de otra variable un

puntero ocupa siempre 2 bytes de memoria.

Tipo_dato*nom_puntero;

Int*p,n=5,**q,***t; &=dirección de una variable *acceder al contenido de lo que apunta

P=&n;

Printf(“%d”,n);

Printf(“%d”,*p);

Imprimir direcciones:

Printf(“%p”,&n) AB006

Printf(“%p”,&p); AB000

Pritnf(“%p”,p); AB006

q=&p; AB00

**q=8; guarda en n

T=&q;
***t=0; garda en n

**q guarda la dirección del puntero de primer nivel

***t guarda la dirección del puntero de segundo nivel

#include <stdio.h>

int main()

int n,*p,**q,***t;

n=5;

p=&n;

printf("%d\n",n);

printf("%d\n",*p);

printf("%p\n",&n);

printf("%p\n",&p);

printf("%p\n",p);

q=&p;

**q=8;

printf("%d\n",*p);

t=&q;
***t=0;

printf("%d\n",*p);

return 0;

#include <stdio.h>

int main()

int a,b,c,*p,*q,*r;

p=&b;

q=&a;

printf("Ingrese el primer numero:");

scanf("%d",&*q);

printf("Ingrese el segundo numero:");

scanf("%d",&*p);

c=*p+*q;

r=&c;
printf("La suma de los nos numeros %d y %d es:%d\n",*q,*p,*r);

return 0;

RAM

A3

Fa001

B5

Fa003

P Fa003

Fa005

Q Fa001

Fa007

C8

FA011

R Fa011

Fa013

Realizar el mapa de memoria para el siguiente ejercicio


Envió de parámetros

 Valor

 Dirección: cuando deseo cambiar los datos.

double sumar (double a, double b){

return(a+b)}

void intercambio(double *a,double *b)

Double aux;

Aux=*b

*b=*a;

*a=aux;

Main (){

Int x,y,z;

x=5;

y=3;

z=sumar(&x,&y);

imprimir (z);
intercambio (x,y);

imprimir (x);

imprimir(y);

#include <stdio.h>

void ingreso(double **a){

printf("Ingrese el valor:");

scanf("%lf",&**a);}

double sumar (double a, double b){

return(a+b);

void imprimir(double a){

printf("%lf",a);}

void intercambio(double *a,double *b)

double aux;

aux=*b;

*b=*a;
*a=aux;

int main (){

double *x,*y,c,d;

x=&d;

y=&c;

ingreso (&x);

ingreso (&y);

printf("\nEl valor de x es:");

imprimir (*x);

printf("\nEl valor de y es:");

imprimir (*y);

printf("\nEl valor de la suma es:%lf",sumar(*x,*y));

intercambio (x,y);

printf("\nEl valor de x es:");

imprimir (*x);

printf("\nEl valor de y es:");

imprimir (*y);
return(0);

#include <stdio.h>

void ingreso(double **a){

printf("Ingrese el valor:");

scanf("%lf",&**a);}

void sumar (double a, double b,double*c){

*c=a+b;

void imprimir(double a){

printf("%lf",a);}

void intercambio(double *a,double *b)

double aux;

aux=*b;

*b=*a;

*a=aux;
}

int main (){

double *x,*y,c,d,z;

x=&d;

y=&c;

ingreso (&x);

ingreso (&y);

printf("\nEl valor de x es:");

imprimir (*x);

printf("\nEl valor de y es:");

imprimir (*y);

sumar(*x,*y,&z);

printf("\nEl valor de la suma es:%lf",z);

intercambio (x,y);

printf("\nEl valor de x es:");

imprimir (*x);

printf("\nEl valor de y es:");

imprimir (*y);
return(0);

Estructura de datos

Tipos de datos abstracto: Son estructuras de datos personalizadas, son capaces de

almacenar varios tipos de datos al mismo tiempo.

Declaración de estructura de datos:

Struct Estudiantes {

Long int CI;

Int edad;

Double nota;

Char nombre[20];

};

Entre las bibliotecas y el main

Int main(){

Estudiante e1,*p;

Scanf(“ld”,%e1.CI);

Scanf(“%d”%e1.edad);

Scanf(“%lf”%e1.nota);

Gets(e1.nombre);
P=&e1;

p->edad=20;

printf(“%lf”,p->nota);

Arreglo con estructura Estudiante A[20]

CI CI CI CI

Edad Edad Edad Edad

Nota Nota Nota Nota

Nombre Nombre Nombre Nombre

0 1 2 3

P=&A[0];

p->nota=2;

Estructuras anidadas

#include <stdio.h>

#define dim 3

using namespace std;

struct Estudiante{

long int CI;


char nombre[20];

int edad;

};

struct Materia{

char codigo[5];

char nombre[15];

int creditos;

double notas[4];

};

struct Matricula{

char codigo[5];

Estudiante datos_est;

Materia datos_mat;

};

void ingreso(Matricula *e){

printf("Ingrese su cedula:");

scanf("%ld",&e->datos_est.CI);

fflush(stdin);
printf("\nIngrese su edad:");

scanf("%d",&e->datos_est.edad);

printf("\nIngrese su nombre:");

fflush(stdin);

scanf("%s",e->datos_est.nombre);

printf("\nIngrese el codigo de la materia:");

scanf("%s",e->datos_mat.codigo);

printf("\nIngrese el nombre de la materia:");

scanf("%s",e->datos_mat.nombre);

printf("\nIngrese el numero de creditos:");

scanf("%s",e->datos_mat.creditos);

printf("\nIngrese sus notas:");

for (int i=0;i<3;i++){

printf("\nIngrese la nota %d:",i+1);

scanf("%lf",&e->datos_mat.notas[i]);}

void imprimir(Matricula e){

printf("\nCedula:%ld",e.datos_est.CI);
printf("\nNombre:%s",e.datos_est.nombre);

printf("\nedad:%d",e.datos_est.edad);

printf("\ncodigo materia:%s",e.datos_mat.codigo);

printf("\nnombre materia:%s",e.datos_mat.nombre);

printf("\ncreditos:%d",e.datos_mat.creditos);

for (int i=0;i<dim;i++){

printf("\nnota%d:",i+1);

printf("%lf",e.datos_mat.notas[i]);}

printf("\n Promedio:%lf",e.datos_mat.notas[3]);}

double promedio(double notas[]){

double n;

n=((notas[0]+notas[1]+notas[2])/3);

return(n);}

int main()

Matricula e1;

ingreso(&e1);

e1.datos_mat.notas[3]=promedio(e1.datos_mat.notas);
imprimir(e1);

return 0;

#include <stdio.h>

#define dim 3

using namespace std;

struct Estudiante{

long int CI;

char nombre[20];

int edad;

};

struct Materia{

char codigo[5];

char nombre[15];

int creditos;

double notas[4];

};
struct Matricula{

char codigo[5];

Estudiante datos_est;

Materia datos_mat;

};

void ingreso(Matricula *e){

printf("\nIngrese su cedula:");

scanf("%ld",&e->datos_est.CI);

fflush(stdin);

printf("\nIngrese su edad:");

scanf("%d",&e->datos_est.edad);

printf("\nIngrese su nombre:");

fflush(stdin);

scanf("%s",e->datos_est.nombre);

printf("\nIngrese el codigo de la materia:");

scanf("%s",e->datos_mat.codigo);

printf("\nIngrese el nombre de la materia:");

scanf("%s",e->datos_mat.nombre);
printf("\nIngrese el numero de creditos:");

scanf("%d",&e->datos_mat.creditos);

printf("\nIngrese sus notas:");

for (int i=0;i<3;i++){

printf("\nIngrese la nota %d:",i+1);

scanf("%lf",&e->datos_mat.notas[i]);}

void imprimir(Matricula e){

printf("\nCedula:%ld",e.datos_est.CI);

printf("\nNombre:%s",e.datos_est.nombre);

printf("\nedad:%d",e.datos_est.edad);

printf("\ncodigo materia:%s",e.datos_mat.codigo);

printf("\nnombre materia:%s",e.datos_mat.nombre);

printf("\ncreditos:%d",e.datos_mat.creditos);

for (int i=0;i<dim;i++){

printf("\nnota%d:",i+1);

printf("%lf",e.datos_mat.notas[i]);}

printf("\n Promedio:%lf",e.datos_mat.notas[3]);}
double promedio(double notas[]){

double n;

n=((notas[0]+notas[1]+notas[2])/3);

return(n);}

/*

double promedi (double notas[3],Matricula e){

double c=0;

for (int i=0;i<dim;i++){

c+=datos_mat.notas[3];

return(c);*/

int main()

double c;

Matricula e1[3];

// ingreso (e1);

for (int i=0;i<dim;i++){


ingreso(&e1[i]);

e1[i].datos_mat.notas[3]=promedio(e1[i].datos_mat.notas);

imprimir(e1[i]);

c+=e1[i].datos_mat.notas[3];

printf("\nEl promedio del curso es :%lf",c/3);

return 0;

Objetivo:
Crear un programa usando archivos o ficheros logrando así mantener en un archivo externo
los datos ingresados.
Poner en práctica lo aprendido respecto al manejo, escritura y lectura de archivos.

Marco teórico:
Archivos:
El estándar de C contiene varias funciones para la edición de ficheros, éstas están definidas
en la librería <stdio.h> e inician con la letra f, haciendo referencia a file(archivo).
Adicionalmente se agrega un tipo FILE, el cual se usará como apuntador a la información
del fichero. La secuencia que usaremos para realizar operaciones será la siguiente:

1. Crear un apuntador del tipo FILE *


2. Abrir el archivo utilizando la función fopen y asignándole el resultado de la llamada
a nuestro apuntador.
3. Hacer las diversas operaciones (lectura, escritura, etc).
4. Cerrar el archivo utilizando la función fclose.
fopen:
Es la función base para la creación de archivos o para abrir estos, esta función devuelve la
dirección de memoria del archivo nuevo o abierto.
La escritura correcta es la siguiente:

Parametros:
“r” abre un archivo para lectura (capturar información)
“w” abre un archivo para realizar escritura.
“r+” abre un archivo para realizar lectura y escritura a la vez.
“w+” se crea un archivo para realizar lectura y escritura.
“rb” abre un archivo de forma binaria para hacer lectura.
“rb+” abre un archivo de forma binaria para realizar acciones de lectura y escritura.
fclose:
Esta función sirve para cerrar un archivo o fichero que se haya abierto y devuelve a la
variable FILE* que se ha creado, el valor cero indicando que ese archivo se cerró
correctamente.
Es necesario que se lo haga para que el contenido de archivo no resulte defectuoso, si
resulta un error dentro de fclose, como esta función es de tipo entera, devuelve un 1 si
acabó en un error.

Funciones de escritura:
- fputc(); Es homólogo a fgetc(), escribe un carácter en el archivo, este devuelve el carácter
escrito
- fputs(); Escribe una cadena a un fichero, para escribirlo necesita de la ayuda de una
variable auxiliar tipo char[] que contenga el valor de cadena deseada.
- fscanf(); Funciona como un fprintf pero en vez de imprimir un contenido de una variable,
escribe con la ayuda de una variable auxiliar el contenido en el fichero a la vez que lo
amuestra por pantalla.

Funciones de lectura:
fgetc(); Recorre el archivo leyendo los caracteres que lo contiene, a cada que se llama a la
función, este devuelve dicho caracter y recorre al siguiente. Si devuelve el caracter EOF
significa que se ha recorrido a lo último del archivo
fgets(); Al igual que fgetc pero lee cadenas de caracteres, dejará de leer cuando se
encuentre un “\n” o un EOF
fscanf(); Funciona como un scanf, pero en vez de leer en el teclado, lo lee en un archivo.
(no lee espacios)

Codigo del programa:


#include <stdlib.h>
#include<stdio.h>
#include <fstream>
#include<iostream>
using namespace std;
void usuario(){
ofstream archivo;//Se coloca el nombre de nuestro archivo
string nombrearchivo,texto;//Variable que nos sirve para guardar el nombre del archivo
printf("Ingrese el nombre que desea poner al archivo:");
getline (cin,nombrearchivo);//Se guarda el nombre
archivo.open(nombrearchivo.c_str(),ios::out);//Devuelve un puntero fstream
if (archivo.fail()){//Se verifica si se pudo abrir el archivo o no
printf("No se pudo abrir el arvhivo");
exit(1);
}
printf("\nIngrese el texto que desea ingresar en el archvio:");
getline(cin,texto);
archivo<<texto;//Copiamos una frase en nuestro bloc de notas
archivo.close();//Cerramos el archivo
}
void carpeta(){
ofstream ferreteria;//Se coloca el nombre de nuestro archivo
ferreteria.open("d://Universidad//ferreteria.txt",ios::out);
if (ferreteria.fail()){//Se verifica si se pudo abrir el archivo o no
printf("No se pudo crear el arvhivo");
exit(1);
}
ferreteria<<" Bienvenidos a la ferreteria ";//Copiamos una frase
en nuestro bloc de notas
ferreteria<<"\nA continuacion se encuentra la lista de productos:";
ferreteria<<"\n1.Taladro $8.00";
ferreteria<<"\n2.Clavo $0.10";
ferreteria<<"\n3.Cerrucho $4.00";
ferreteria<<"\n4.Pala $2.00";
ferreteria<<"\n5.Desarmador $1.00";//Copiamos una frase en nuestro bloc de notas
ferreteria.close();//Cerramos el archivo
}
void establecido(){
ofstream tienda;//Se coloca el nombre de nuestro archivo
tienda.open("comida.txt",ios::out);//Se abre el archivo
if (tienda.fail()){//Se verifica si se pudo abrir el archivo o no
printf("No se pudo abrir el arvhivo");
exit(1);
}
tienda<<" Bienvenidos a la tienda ";//Copiamos una frase en
nuestro bloc de notas
tienda<<"\nA continuacion se encuentra la lista de productos:";
tienda<<"\n1.Agua $1.00";
tienda<<"\n2.Cola $1.50";
tienda<<"\n3.Sanduche $3.00";
tienda<<"\n4.Hamburguesa $5.00";
tienda<<"\n5.Cerveza $2.00";
tienda.close();//Cerramos el archivo
}
void imprimir(){
ifstream tiend,ferreteri,usuari,archivo;
string info;
tiend.open("comida.txt",ios::in);//Se abre el archivo existente
ferreteri.open("ferreteria.txt",ios::in);
archivo.open("f://programa.txt",ios::in);
//usuari.open("jabon.txt",ios::in);
if (tiend.fail()){
printf("No existe el archivo");//Se verifica si se pudo abrir el archivo o no
exit(1);
}
printf("\nTexto establecido en carpeta del programa:\n");
while (!tiend.eof()){//recorre el archivo hasta que llega la final
getline(tiend,info);
cout<<info<<endl;
}
if (archivo.fail()){
printf("No existe el archivo");//Se verifica si se pudo abrir el archivo o no
exit(1);
}
printf("\nTexto establecido en la flash:\n");
while (!archivo.eof()){//recorre el archivo hasta que llega la final
getline(archivo,info);
cout<<info<<endl;
}
/*printf("\nTexto establecido por el usuario:\n");
if (usuari.fail()){
printf("No existe el archivo");//Se verifica si se pudo abrir el archivo o no
exit(1);}
while (!usuari.eof()){
getline(usuari,info);
cout<<info<<endl;}*/
printf("\nTexto establecido en cualquier carpeta que elijamos:\n");
if (ferreteri.fail()){
printf("No existe el archivo");//Se verifica si se pudo abrir el archivo o no
exit(1);}
while (!ferreteri.eof()){
getline(ferreteri,info);
cout<<info<<endl;}
tiend.close();//Cierre del archivo
ferreteri.close();
usuari.close();
archivo.close();
}
void agregar (){
ofstream archivo;
string info;
archivo.open("agua.txt",ios::app);//Sirve para agregar texto
if (archivo.fail()){
printf("No existe el archivo");//Se verifica si se pudo abrir el archivo o no
exit(1);}
printf("\nIngrese la informacion que quiere agregar:");
getline(cin,info);
archivo<<info<<endl;
archivo.close();
}
int main()
{
establecido();
carpeta();
//usuario();
//agregar();
imprimir();
return 0;
}
Capturas de pantalla:
Conclusiones:
Los archivos nos ayudan a mantener un orden más estructurado en la programación, nos
facilitan la manera de acceder, crear, leer información que se puede almacenar
externamente al código.
Esto es de gran utilidad para crear bases de datos con información personal de clientes, o
registros de productos, o en cualquier aplicativo para almacenamiento de datos grandes.

You might also like