Libro Introduccion A La Programacion Con C
Libro Introduccion A La Programacion Con C
Introducción a la
Programación con C
Autor: Msc. Luis Eduardo Muñoz Guerrero.
Universidad Tecnológica de Pereira
Colombia
Página Legal
Titulo del libro: Introducción a la programación con C
ISBN: 978-958-53396-6-8
Autor: Luis Eduardo Muñoz Guerrero
Sello editorial: Corporación Centro Internacional de Marketing
Territorial para la Educación y el Desarrollo (978-958-53396)
Editor: Corporación Centro Internacional de Marketing
Territorial para la Educación y el Desarrollo CIMTED.
Corporación CIMTED
Nit: 811043395-0
Materia: Programación. programas. datos de computadores
Tipo de Contenido: Computación y sistemas
Clasi cación THEMA: UMX - Lenguajes de programación y
extensión / "scripting": generalidades
Público objetivo: Enseñanza universitaria o superior
Idioma: Español
Fecha de aparición: 2021-11-29
Edición: Primera
Tipo de soporte: Libro digital descargable
Formato: Pdf (.pdf)
Tipo de contenido: Texto (legible a simple vista)
www.editorialcimted.com
www.memoriascimted.com
Depósito digital: 007963
Cuidado de la edición:
Juliana Escobar Gómez
Calle 41 no 80b 120 int 301
Código postal: 050031 - Medellín - Colombia
Noviembre 2021
© Derechos reservados
Todo el contenido de este libro esta protegido por la ley según los derechos materiales
e intelectuales del editor y del autor que escribió este libro, por lo tanto, no esta permitido
copiar, fragmentar con propósitos comerciales todo su contenido, sin la respectiva
autorización de los anteriores.
Si se hace como servicio académico o investigativo debe contar igualmente con el
permiso escrito del autor y citar sus respectivas fuentes
Más información: [email protected]
Páginas: 158
Incluye bibliografía
ISBN: 978-958-53396-6-8
Formato electrónico Distribución Gratuita Puede descargarse desde:
www.editorialcimted.com www.memoriascimted.com
Sobre el autor
Correspondencia: [email protected]
Dedicatoria
D
edico este libro:
A mi madre por darme la sabiduría, la intuición, el anhelo y la
con anza de seguir adelante paso a paso en mi vida.
Resumen
E
ste libro es una guía de enseñanza para los estudiantes que
quieren explorar por primera vez el mundo de la programación.
se orientará de manera sencilla, debido a que la mayoría de los textos
que existen en la actualidad son ambiguos, complicados y en otros
casos presentan contenidos incompletos o muy avanzados, que
tienden a di cultar el aprendizaje de los estudiantes, por esta razón
se ha escrito de forma tal que se pueda llevar al lector de una forma
amigable y paso a paso por los conceptos básicos de la
programación en lenguaje C. Con el n de disminuir la deserción
estudiantil, aumentar las competencias de los estudiantes y mejorar
el nivel académico de las nuevas generaciones.
fi
fi
Introducción
Introducción a la programación con C
ftell -----------------------------------------------------------------------------150
fprintf y fscanf ---------------------------------------------------------------151
Conclusiones ......................................................................................152
Bibliografía..........................................................................................154
Referencias .........................................................................................157
Capítulo 1:
Capítulo
1 Introducción a la
programación con C
fi
fi
fi
fl
fi
fi
Lenguajes de Programación
Los lenguajes de programación se diseñaron con el objetivo de
poder crear software de una manera ágil y e caz, esto permitiendo
una completa comunicación entre el usuario y la máquina. Ello pudo
ser posible hasta el día de hoy gracias a la utilización de programas
especiales conocidos como compiladores o intérpretes, encargados
de transformar las instrucciones escritas en un lenguaje de
programación a instrucciones de lenguaje maquina (bits, compuesto
por unos y ceros) de modo que esta (la máquina) pueda entenderlas.
Lenguajes de maquina
Inconvenientes
fi
fi
fi
fi
Ventajas
fi
fi
fi
fi
Inconvenientes
Ventajas
Inconvenientes
fi
fi
fi
Intérpretes
Compilador
fi
Los algoritmos
¿Qué es un algoritmo?
fi
fi
fi
fi
fi
fi
Introducción a la programación con C
Clasificación de algoritmos
-Algoritmo determinista: ese determina de forma única el
siguiente paso al momento de su ejecución.
-Algoritmo no determinista: en cada paso de la ejecución se debe
decidir de entre varias alternativas, todas se deben agotar para
encontrar la solución.
fi
fi
Las siguientes son las etapas que se deben cumplir para resolver
con éxito un problema de programación:
4.Diagramación
Teniendo en mente una opción de cómo resolver el problema, se
procede a gra car la lógica de dicha opción. El grá co viene siendo
lo que se conoce cómo Diagrama de Flujo: la representación grá ca
de una secuencia lógica de pasos a cumplir por el computador para
producir un resultado esperado.
5.Prueba de escritorio
Para garantizar que los diagramas y pseudocódigos además del
programa codi cado funcione correctamente, es conveniente
someterlos a pruebas de escritorio. Esta prueba consiste en
establecer diferentes datos de entrada al programa (en cualquiera de
sus representaciones) y seguir la secuencia de pasos lógicos creados,
para que al nal del recorrido se veri que si los resultados son los
fi
fi
fi
fi
fi
fi
fl
fi
Introducción a la programación con C
6.Codificación
Una vez que se veri cado el programa usando las pruebas de
escritorio, se procede codi car el programa en el lenguaje de
computador seleccionado. Esto es, reescribir los pasos del diagrama
en instrucciones que utilizan un lenguaje que el computador
reconoce.
7.Transcripción
Es necesario que se lleve el programa codi cado a un medio que
sea aceptado como entrada por el computador: perforado en
tarjetas, grabado en un disco exible o grabado en un disco duro.
Este programa es el que se conoce como Programa Fuente.
8.Compilación
Se procede a utilizar a continuación un “programa de computador
llamado Compilador o Traductor, el cuál analiza todo el programa
fuente y detecta errores de sintaxis ocasionados por fallas en la
codi cación o en la trascripción. Las fallas de lógica que pueda tener
un programa fuente no son detectadas por el compilador. Cuando
no hay errores graves en la compilación, el compilador traduce cada
instrucción del programa fuente a instrucciones propias de la
máquina (Lenguaje de Maquina), creando el Programa Objeto.
Algunos computadores utilizan Interpretadores, (Generalmente
para el Lenguaje Basic), en reemplazo de programas compiladores.
La diferencia consiste en que el interpretador recibe desde una
terminal sólo una instrucción a la vez, la analiza y si está bien la
convierte al formato propio de la máquina. Si la instrucción tiene
algún error, el interpretador llama la atención de la persona para que
fi
fi
fi
fl
fi
fi
9.Pruebas de computador
Cuando se tiene un programa ejecutable (en lenguaje de
máquina), se le ordena al computador que lo ejecute, para lo cual se
ingresan datos de prueba, como se hizo en la prueba de escritorio
(paso 5). Los resultados obtenidos se analizan, luego de lo cual puede
ocurrir cualquiera de estas situaciones:
-La lógica del programa está bien, pero existen algunos errores
sencillos de solucionar modi cando, añadiendo o eliminando
instrucciones. Este proceso se repite hasta el paso 6.
-Existen errores que son resultados de la lógica utilizada, obligando
al programador a regresar a los pasos 4 y 5 para revisión y
modi cación del diagrama.
-No existen errores y los resultados son los esperados. En este caso,
el programa se puede guardar permanentemente en una librería o
biblioteca del computador, para sacarlo de allí cuando se necesite
ejecutar nuevamente.
10.Documentación externa
Es conveniente hacer la documentación externa de un programa
luego de que este se da por nalizado. En esta documentación se
podría indicar las normas de la instalación, recomendaciones para
futuros cambios, y en general cualquier otra información que pueda
fi
fl
fi
fi
fi
Introducción a la programación con C
aportar a una clara comprensión del programa. Por otra parte , los
elementos que no pueden faltar en una buena documentación son:
-Enunciado del problema
-Diagrama de pasada
-Narrativo con la descripción de la solución
-Relación de las variables o campos utilizados en el programa, cada
uno con su respectiva función
-Diagrama del programa
-Listado de la última compilación
-Resultados de la ejecución del programa.
INICIO
PASO 1 Llenar una jarra con un litro de agua
PASO 2 Echar el jugo de tres limones
PASO 3 Echar cuatro cucharadas de azúcar
PASO 4 Revolver el agua hasta disolver completamente el azúcar
FIN
Notas:
-El término LEER signi ca obtener un dato de algún dispositivo de
entrada como el teclado y almacenarlo en una variable.
fi
fi
Algoritmos formales
Normas:
fi
Cadenas y variables
Se escribe la cadena y luego de una coma se indica la variable. Se
continúa de esta manera hasta representar por completo el mensaje
con las variables necesarias.
Pseudocódigo:
Tipos de formatos
fi
fi
fi
fi
Ejemplo:
//Visualiza un mensaje por pantalla:
printf(“hola como estas”);
int A=1;
//Visualiza un mensaje y el contenido de la variable A de tipo entero:
printf(“el valor es %d”, A);
Instrucciones de Entrada
Formato pseudocódigo;
...
x = leer ();
leer(x);
Formato scanf
fi
Ejemplo:
int h;
printf(“Digite un número”);
scanf(“%d”,&h)
Pseudocódigo
Lenguaje C
Problemas de pseudocódigo
fi
Introducción a la programación con C
Pseudocódigo
Inicio
real: e1, e2, e3, e4, t1, t2, t3, t4, v1, v2, v3, v4;
real: espacio_total, tiempo_total, velocidad _total;
escribe (“digite la distancia cuerpo 1”); leer(e1);
escribe (“digite tiempo del cuerpo 1”); leer(t1);
escribe (“digite distancia cuerpo 2”); leer(e2);
escribe (“digite tiempo del cuerpo 2”); leer(t2);
escribe (“digite distancia cuerpo 3”); leer(e3);
escribe (“digite tiempo del cuerpo 3”); leer(t3);
escribe (“digite distancia cuerpo 4”); leer(e4);
escribe (“digite tiempo del cuerpo 4”); leer(t4);
v1 = e1 / t1;
v2 = e2 / t2;
v3 = e3 / t3;
v4 = e4 / t4;
espacio_total = e1+e2+e3+e4;
tiempo_total = t1+t2+t3+t4;
velocidad _total = v1+ v2+ v3+ v4;
escribe (“velocidad del cuerpo 1:”, v1);
escribe (“velocidad del cuerpo 2:”, v2); escribe (“velocidad del cuerpo 3:”, v3);
escribe (“velocidad del cuerpo 4:”, v4);
escribe (“velocidad total de los cuatro cuerpos:”, velocidad_total);
escribe (“espacio total de los cuerpos:”, espacio_total);
escribe (“tiempo total de los cuerpos:”, tiempo_total);
Fin
Pseudocódigo
Inicio
real: r, pi, a1, a2, a3, p1, p2, p3, area_total, perímetro_total;
escribe (“Digite el valor del radio: ”); leer (r);
escribe (“Circunferencia 1:”);
pi = 3.1416; a1= pi * (r * r);
p1 = 2 * (pi * r);
escribe(“Su perímetro es: ”, p1);
escribe(“Su área es: ”, a1);
escribe(“Circunferencia 2:”);
r = 2 * r; a2 = pi * (r * r);
p2 = 2 * (pi * r);
escribe(“Su perímetro es: ”, p2);
escribe(“Su área es: ”, a2);
escribe(“Circunferencia 3”);
r = 3 * r; a3 = pi * (r * r); p3 = 2 * ( pi * r);
escribe(“Su perímetro es: ”, p3);
escribe(“Su área es :”, a3);
perímetro_total = p1+ p2+ p3;
area_total = a1+ a2+ a3;
escribe(“Perímetro total de las circunferencias:”, perímetro_total);
escribe(“Área total de las circunferencias:”, area_total);
Fin
Ejercicios
fl
fl
fl
fi
fl
fi
1122334455 110001001
c) 1 2 3 4 5 6 7 8 9
1.1 1 2 2 2 3 3 3
Capítulo 2:
Capítulo Programación en C
2
En este capítulo se dará una introducción
a la programación en C.
Programación en C
fi
fi
fi
fi
Institute (ANSI) version of C" esta versión fue mejor conocida como
ANSI C o C estándar.
fi
fi
fl
fi
fi
Introducción a la programación con C
Entero
Los números enteros son todos aquellos números que solo tienen
una parte entera y no tienen parte decimal, hacen parte del
subconjunto nito de los números Naturales, el rango depende de
cuantos bits utilice para codi car el número, normalmente 2 bytes
para números positivos.
Con 16 bits se pueden almacenar 216 = 65536 números enteros
diferentes que van de 0 al 65535 y de -32768 al 32767 para números
con signo.
Por ejemplo
2, 14, -199,....
fi
fi
Real
Los números reales son todos aquellos números que tienen una
parte entera y una parte decimal.
Su tamaño de almacenamiento puede variar según el subconjunto
de números representado (4, 6 ó 10 bytes en el uso de otantes,
enteros largos, entre otros). Se representan por medio de la mantisa
y un exponente
(1E-3 = 0’001). Según Carmona Quintana en su libro Resolución de
problemas por computadora se dice que “utilizando 24 bits para la
mantisa (1 para el signo y 23 para el valor) y 8 bits para el exponente (1
para el signo y 7 para el valor)”.
Lógico
Operadores lógicos
fl
Introducción a la programación con C
Operadores de relación
Y sus combinaciones
Carácter
fi
fi
fi
Introducción a la programación con C
Cadena
Es diferente tener “H” indicando con las dobles comillas que es una
cadena en lugar de tener ‘H’ indicando un carácter.
Ejemplos:
C1 = “Hola”, C2 = “Pepeeerl”
C3 = Concatenar(C1,C2) //C3=”HolaPepeeerl”
X = Longitud(C2) //X=8
C3=Extraer(C1,3) C3=”Hol”
Los tipos de datos Entero, Real, Carácter, Cadena y Lógico son tipos
prede nidos en toda la programación, o como también son
llamados, datos primitivos. Por otro lado, muchos de los lenguajes de
programación permite al usuario poder de nir sus propios tipos de
datos.
fi
fi
fi
fi
fi
fl
Algo parecido puede ocurrirnos con los int, que en los sistemas de
16 bits serán considerados como short y en los de 32 como long.
Si vamos a declarar una variable int que pueda salirse del rango de
los shorts sería recomendable usar long (o long int) para que
funcionara en cualquier sistema.
Todo esto para dar la portabilidad y con abilidad al manejo de
datos.
Constantes
fi
fi
fi
fi
Numéricas
Enteras
10 0
2 -1
12350 -13500
Octales
Hexadecimales
Ejemplo
Decimal
Ejemplo:
56,333 67,333123 78,0000 34.6565
Reales
Ejemplo:
12.5 1.6
-2341.189 -0.146987
Por supuesto, el principal indicador que se trata en las constantes
de punto otante es el punto.
En las constantes de punto otante, No importa que su parte
fraccionaria sea cero, la sola presencia del punto la convierte en una
constante de punto otante.
Note como las constantes de punto otante también pueden ser
negativas o positivas y que se puede usar el signo más (+)
explícitamente.
fl
fl
fl
fl
fl
fi
fl
fl
fl
6.2e13
-.36E-15
-83.423e+12
1E3
6.2x1013 o 62000000000000
-0.36x10-15 o -0.00000000000000036
-83.426x1012 o -83423000000000
1x103 o 1000
Float y doublé
Ejemplo:
oat 64 Aproximadamente seis (6) dígitos de precisión.
double Aproximadamente doce (12) dígitos de precisión.
Alfanuméricas
Simbólicas
fi
fi
fi
fi
fi
fi
fl
fi
Ejemplo: #de ne N 10
Lógicas
Ejemplo:
Variables
Ejemplo:
Ejemplo:
Persona _ cine = 1 y lo habrán hecho 2, 3, 4 y así sucesivamente.
fi
• Los nombres de las variables deben empezar con una letra (no
importa si es minúscula o mayúscula) o con el símbolo de
subrayado_.
• Los nombres de las variables no pueden contener espacios, ni
símbolos especiales como &, ., (, + y así sucesivamente. Tampoco
pueden contener letras tildadas o eñes.
• Los nombres de las variables pueden contener dígitos y más
símbolos de subrayado. El valor numérico de los dígitos dentro de
los nombres de las variables no tendrá ningún signi cado
particular para el computador, simplemente harán parte del
nombre.
• No se pueden emplear como variables aquellas palabras que son
consideradas propias del lenguaje y a las que se les llama
palabras reservadas.
La lista de palabras reservadas por C, ANSI estándar son tan sólo 32,
las cuales se listan a continuación:
fi
fi
Introducción a la programación con C
volatile while
Nota: Además de estas palabras se debe tener en cuenta no usar palabras de las
funciones de las librerías usadas.
fi
Operadores
Aritméticos
int x, y, z;
x = 30; y = 3;
z = 10 %3
x= (-b+raiz ((b*b) - (4*a*c))) / (2*a);
fl
fi
Espaciado y paréntesis
a) X=10/y(127/x); b) X = 10 / y ( 127 / x ) ;
fl
Relaciónales
Asignación
fi
Introducción a la programación con C
Nota “el operador de asignación (=) representa una sustitución”, ya que toma el
valor de la expresión y lo guarda en la variable nombre_ variable.
Abreviatura
+= -= *= /= % ==
Ejemplo:
Lógicos
fi
fi
Sentencias
fi
fi
Cadenas y variables:
Tipos de formatos
fi
Ejemplo 1
Ejemplo 2
Formato scanf
-Secuencial
-Selectiva
-Repetitiva
fi
Estructura secuencial
fi
Ejemplo 1
Lenguaje C
fi
fi
Ejemplo 2
Ejemplo
Un programa que indica el estado de un número. (Positivo,
negativo o igual a cero)
Pseudocódigo
Inicio
{
leer (numero);
Si (numero = 0) entonces
escribe (“el numero digitado es igual a cero”);
Si (numero<0) entonces
escribe (“el numero digitado es negativo”); Si (numero>0) entonces
escribe (“el numero digitado es positivo”);
}
Pseudocódigo
inicio
{leer (x); // Obtenemos x desde el teclado
si (x>=0) entonces
y = raíz(x);// si x es positiva hallamos la raíz
x = x * x; // hacemos x2
escribe (x); // Escribimos el valor de x
}
fi
Pseudocódigo
si (condición) entonces
{ <acción 1>;}
sino
{ si (condición) entonces
{<acción 2>; }
sino
{<acción 3>;}
}
Ejemplo 2
Inicio
{
leer (edad);
si (edad>=18) entonces
{
escribe (“usted es mayor de edad”);
escribe (edad);
}
sino
{
escribe (“usted es menor de edad”)
escribe (edad);
}
}
switch (variable)
{
case constante1: secuencia de sentencias
break;
case constante2: secuencia de sentencias
break;
case constante3: secuencia de sentencias
break;
default: secuencia de sentencias;
}
fi
fi
Pseudocódigo:
Inicio
entero número, suma;
suma = 0;
Leer (numero);
suma = suma + numero;
Leer (numero);
suma = suma + numero;
…
Fin
fi
Estructura mientras
Pseudocódigo:
i = índice
Mientras i = valor_inicial hasta i = valor_final
<acción>;
incremento valor
fl
Inicio
nd = 0; leer(a);
haga
a = a/10;
nd = nd + 1;
mientras (a>=1)
escribe (“el numero tiene: ”);
escribe (”%d dígitos”, nd);
Fin
Ejercicios en C
1 #include "stdio.h"
2 #include "conio.h"
3 int i,numero;
4 void main (void)
5 {
6 for(i=1;i<=10;i++)
7 {
8 printf("\n\n digite el numero %d:",i);
9 scanf("%d",&numero);
10 if((numero%2)==0)
11 printf(" el número es par:%d",numero);
12 else
13 if((numero%2)!=0)
14 printf(" el número es inpar :%d ",numero);
15 }
16 }
1 #include <stdio.h>
2 #include <conio.h>
3 int i, suma, suma1, num;
4 void main(void)
5 {
6 for(i=1;i<=10;i++)
7 {
8 printf("digite el numero: ");
9 scanf("%d",&num);
10 if((num%2)==0)
11 suma=suma+num;
12 else
13 if((num%2)!=0)
14 suma1=suma1+num;
15 }
16 printf("\n numeros pares %d \t",suma);
17 printf("\n total inpares %d\t",suma1);
18 getch();
19 }
Problema 1
•Un simple (y fácil de descifrar) método de cifrado es el de escribir
una palabra al revés (de atrás hacia delante). Por tanto la cadena:
"Hola mi nombre es Pepa" sería cifrada por "aloH im erbmon se
apeP". En este algoritmo la clave está implícita.
Problema 2
• El alfabeto cifrado es un alfabeto normal el cual está desplazado
un número determinado de posiciones hacia la izquierda o la
derecha. Por ejemplo, aquí el cifrado César está usando un
desplazamiento de seis espacios hacia la derecha:
fi
fi
fi
fi
Problema 3
Introducción a la programación con C
Capítulo 3: Arreglos y
Capítulo métodos de
3 ordenamiento
En este capítulo se dará una
introducción a los arreglos más básicos:
los vectores y las matrices.
Se verán primero los vectores,
introducción de valores y manejo de
estos. Después se pasará a ver métodos
de ordenamiento para los vectores,
métodos que ayudan a organizar un
vector de modo que sus valores vayan de
menor a mayor.
fi
Arreglo
fi
Arreglo (vectores):
Declaración
Por ejemplo:
int var[10]; //Para declarar enteros
var1[5]=40;
contador = var1[3] + 7;
if (var1 [0] >= 37)
int numero[8] = { 4 , 7 , 0 , 0 , 0 , 9 , 8 , 7 };
En este caso los tres primeros elementos del vector valdrán 1 (uno)
y las posiciones restantes toman el valor de cero en caso de que la
declaración sea global o local.
Ejemplo:
M[0] =0;
Como imprimir un vector por pantalla:
int M[5], I;
for ( I=0; I< 5; I++)
{
printf (“los vectores son %d ”, M[I]);
}
Ejemplo 1:
Ejercicios
fi
fi
fi
p ro d u c to s p o r d o s . E l m é to d o co n s i s te e n rea l i z a r
sucesivamente las siguientes operaciones: multiplicar uno de
los números por dos y obtener la división entera del otro,
también por dos. Se detiene el proceso al obtener como
cociente de la división un uno. Por ejemplo, para multiplicar 22
por 64 se obtienen las dos columnas siguientes:
fi
Algoritmos de Ordenamiento
Existen dos tipos de métodos de ordenación:
• Ordenación interna
• Ordenación externa
Ordenación interna
Método de Selección:
Paso 1
fi
Paso 2
Se busca el segundo elemento más pequeño y la posición en que
se encuentra, en este caso es el número 9.
Paso 3
Se busca el tercer elemento más pequeño y la posición en que se
encuentra, en este caso es el número 10.
Paso 4
Se busca el cuarto elemento más pequeño y la posición en que se
encuentra, en este caso es el número 21.
1 int arreglo[N];
2 int i, j, menor, aux;
3 for(i =0; i <N-1; i++)
4 {
5 for( j =i+1, menor=i; j<N; j++)
6 if (arreglo[j] < arreglo[menor])
7 menor = j; // el menor pasa a ser el elemento j.
8 aux = arreglo[i]; // Se intercambian los elementos
9 arreglo[i] = arreglo[menor];
10 arreglo[menor] = aux;
11 }
Método de Burbuja:
Primera pasada:
Segunda pasada:
Tercera pasada:
Algoritmo en c:
1 int arreglo[N];
2 int i, j, aux;
3 for (i=0; i<N-1; i++)
4 for(j=0; j<N-i-1; j++) //Mirar los N-i-1 pares
5 if(arreglo[j+1] < arreglo[j])
6 {
7 aux=arreglo[j+1];
8 arreglo[ j+1] = arreglo[j];
9 arreglo[ j] = aux;
10 }
Ejemplo: se tiene
fi
<-- Insertamos el 9:
Algoritmo en c:
1 int arreglo[N];
2 int i, j, aux;
3 for(i=1; i<N; i++)
4 {
5 aux=arreglo[i];
6 for(j=i-1;j>=0;j--)
7 {
8 if(aux>arreglo[j])
9 {
10 arreglo[ j+1]=aux;
11 break;
12 }
13 else
14 arreglo[j+1]=arreglo[j];
15 }
16 if(j==-1)
17 arreglo[0]=aux;
18 }
Primera pasada:
Segunda Pasada:
Algoritmo en c:
1 int arreglo[N];
2 int salto, cambios, aux, i;
3 for(salto=N/2; salto!=0; salto/=2)
4 for(cambios = 1; cambios != 0;)
5 {
6 cambios = 0;
7 for(i=salto; i<N; i++)
8 if(arreglo[i-salto]>arreglo[i])
9 {
10 aux=arreglo[i];
11 arreglo[i]=arreglo[i-salto];
12 arreglo[i-salto]=aux;
13 cambios++;
14 }
15 }
Se intercambian:
Algoritmo en c:
1 #include <stdio.h>
2 void ordenar(int *arreglo, int desde, int hasta)
3 {
4 int i, d, aux;
5 if(desde >= hasta)
6 return;
7 for(i=desde+1, d=hasta;;)
8 {
9 for(; i<=hasta&&arreglo[i] <= arreglo[desde]; i++);
10 for(; d>=0 && arreglo[d] >= arreglo[desde]; d--);
11 if(i<d)
12 {
13 aux=arreglo[i];
14 arreglo[i]=arreglo[d];
15 arreglo[d]=aux;
16 }
17 Else
18 break;
19 }
20 if(d ==desde-1)
21 d = desde;
22 aux=arreglo[d];
23 arreglo[d]=arreglo[desde];
24 arreglo[desde]=aux;
25 ordenar(arreglo, desde, d-1);
26 ordenar(arreglo, d+1, hasta);
27 }
28
29 void main() {
30 ordenar(arreglo, 0, N-1);
31 }
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int funcion(const void *a, const void *b)
5 {
6 if(*(int *)a<*(int *)b)
7 return(-1);
8 else if(*(int *)a>*(int *)b)
9 return(1);
10 Else
11 return(0);
12 }
13
14 void main()
15 {
16 qsort(arreglo, N, sizeof(arreglo[0]), funcion);
17 }
Cadenas
Declaración
Por ejemplo:
char str[50] ;
Grá camente se puede observar así:
Ejemplo:
Printf (“introduzca el nombre no mayor de 50 caracteres”):
gets( str);
printf (“ %s ”,str);
fi
fi
fi
fi
Ejemplo:
fi
fi
fi
fi
oSi (x < o) Las cadenas no son iguales la cadena 1 es menor que la cadena2.
oSi (x > o) Las cadenas no son iguales la cadena 1 es mayor que la cadena2.
oSi (x == o) Las cadenas son iguales
Valor Interpretación
X = Menor que 0 cad1 es menor que cad2
X= 0 cad1 es igual a cad2
X = Mayor que 0 cad1 es mayor que cad2
Ejemplo
printf (“%d”, strcmp (uno, uno)); //Comparación de las cadenas
I = strcmp (uno, uno);
La función strlen ( )
Matrices:
fi
Definición de matrices
fi
fi
fi
fi
fi
fi
Introducción a la programación con C
Ejercicios de matrices
Problema No 1.
Problema No 2.
a)
Área Cultivada (10m2. * 13) = 130m2.
Área no cultivada (10m2. * 43) = 430m2.
b)
Perímetro (3.17 m* 24) = 76.08 m
fi
Problema No 3.
Problema No 4.
Problema No 5.
fi
Capítulo 4: Funciones y
estructuras en c
Capítulo
4 En este capítulo se presentará el
concepto de función o subprograma,
u n a h e r r a m i e n t a q u e ay u d a r á a
mantener un trabajo limpio, ordenado y
sencillo de entender.
D e sp ué s d e e sto se ex p l i cará el
concepto de estructuras, un tipo de
dato abstracto creado por el usuario con
el n de hacer la programación más útil
y rápida a la hora de desarrollar un
proyecto.
Funciones
Estructuras o registros
Por de nición la matriz obliga que todos sus datos sean del mismo
tipo, es decir, no se permite la mezcla entre carácter y un entero por
ejemplo.
Una estructura, según el escrito de 1a parte: Metodología de
Programación, es una forma de agrupar un conjunto de datos de
distinto tipo bajo un mismo nombre o identi cador.
Su forma general es mediante la palabra registro o estructura:
fi
fi
fi
fi
fi
Datos de la película
El nombre de la película, el código de la película, género de la
película
struct usuario{
char nombre[31]; // cadena de caracteres
char direccion[21];
long int cedula; // número entero largo
int telefono;
};
Por ejemplo, para dar valor al teléfono del usuario, el valor 903456
se escribirá:
registro.telefono = 903456;
x = registro.telefono
Ejemplo estructura.
1 #include <stdio.h>
2 #include <conio.h> //curses para usuarios linux
3 #include <string.h>
4 #include <stdlib.h>
5
6 struct usuario {
fi
7 char nombre[30];
8 char sexo [9];
9 int cedula[12];
10 char direccion[30];
11 };
12 struct pelicula {
13 char nombre_pelicula[30];
14 char genero [9];
15 int codigo[12];
16 char direccion[30];i
17 };
18
19 struct calendario {
20 char mes[30];
21 char anho [9];
22 int dia[12];
23 char fecha_alquiler[30];
24 char fecha_entrega[30];
25 };
26
27 void main() {
28 clrscr();
29 int i,j,k,p;
30 float dato;
31 char temp;
32
33 struct usuario registro;
34 struct pelicula video;
35 struct calendario tiempo;
36 printf("digite el nombre");
37 gets (registro.nombre);
38 printf("digite el cedula");
39 gets(registro.cedula);
40 printf("digite la fecha");
41
42 scanf("%f",&dato);
43 tiempo.dia=dato;
44 printf("digite el nombre de la pelicula");
45 gets("video.nombre_pelicula");
46
47 printf ("\n Nombre: %s",registro.nombre);
48 printf ("\n cedula: %s ",registro.cedula);
49 printf ("\n Nombre _ pelicula: %s”,video.nombre_pelicula);
50 getch();
51 }
Estructuras anidadas
Ejemplo
1 struct fecha {
2 int dia;
3 int mes;
4 int año;
5 };
6 struct persona {
7 char nombre[20];
8 struct fecha nacimiento;
9 };
10 struct persona p;
Arrays de estructuras
Ejemplo:
struct registro {
char apellido[10];
char nombre [10];
int cedula[10];
};
fami[2].apellido = “pepito”;
fami[1].nombre = “perez”;
fami[4].cedula = 76318649;
El paso por valor se realiza tal como lo realizamos con una variable simple
Se realiza como si fueran variables simples. Por ejemplo, para pasar por
valor el miembro a.código
void funcion f1(int *) //declaración el prototipo de función
f1(&a.codigo); //llamada a la función
void f1 (int *x) // definición de la función
{...... acciones ......}
fi
struct vector {
int x, y, z;};
void main() {
struct vector v1,v2,v3;
...
v3=suma(v1,v2); ...}
1 #include <stdio.h>
2 struct pareja {
3 int a, b;
4 };
5
6 void f1(struct pareja *q) {
fi
PUNTEROS A ESTRUCTURAS
Ejemplo:
struct bal {
float balance;
char nombre[80];
} persona;
struct bal *p;
p -> balance.
fl
Ejemplos:
Con tipos simples:
typedef struct{
int dia;
int mes;
int anio;
} FECHA;
FECHA a;
Enum
Ejercicios Propuestos
Problema 1.
1.Llenar //procedimiento
2.Mostar //procedimiento
3.La media. // función
4.EL máximo. // función
Introducción a la programación con C
Problema 2.
//ciclo do {
Switc (op)
}while( )
int main(){
//la menor cantidad de líneas de código
}
Problema No 3.
fi
fi
fi
Introducción a la programación con C
fi
fi
fi
fi
Capítulo 5: Manejo de
archivos
Manejo de archivos
Archivos
fi
fi
fi
fi
fi
Introducción a la programación con C
#include <stdio.h>
Se estudiarán los distintos modos en que podemos abrir un archivo, así como
las funciones para leer y escribir en él.
Su sintaxis es:
FILE *puntero;
Ejemplo
puntero = fopen("DATOS.DAT","r");
puntero = fopen("C:\\TXT\\SALUDO.TXT","w");
fi
fi
fi
Modo texto
Modo binario
fi
fi
fi
fi
fi
Cierre
fclose();
Un ejemplo:
fi
fi
fi
que deben utilizarse las primeras, salvo que haya una buena causa
para utilizar las segundas.
if (( le = fopen(“c://archivo.txt”,”r”)) == NULL);
fprintf ( “Error de apertura de archivo\n”);
FUNCION
fopen fclose fgets fputs fgetc
fseek ferror eof, feof ftell fputc
while ( feof(fichero)==0 )
ó
while ( !feof(fichero) )
EOF:
if (fclose(fichero)!=0)
printf( "Problemas al cerrar el fichero\n" );
fi
fi
f
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
char
fgets(char *buffer, int longitud_max, FILE *fichero);
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <conio.h>
4
5 int main() {
6 FILE *fichero;
7 char texto[100];
8 Fichero = fopen("origen.txt","r");
9 if (fichero == NULL) {
10 printf( "No se puede abrir el fichero.\n" );
11 exit(1);
12 }
13 printf( "Contenido del fichero: \n");
14 fgets(texto, 100, fichero);
15 while (feof(fichero) == 0) {
16 printf("%s", texto );
17 fgets(texto, 100, fichero);
18 }
19 if (fclose(fichero) != 0)
20 printf("Problemas al cerrar el fichero.\n");
fi
fi
Introducción a la programación con C
21 }
Ahora se analizará un ejemplo que lee un chero de texto y lo
muestra en la pantalla y donde se utilizan todos los elementos que
hasta el momento se han tratado:
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <conio.h>
4
5 int main() {
6 FILE *fichero;
7 char letra;
8 fichero = fopen("origen.txt","r");
9 if (fichero == NULL) {
10 printf("No se puede abrir el fichero.\n");
11 exit(1);
12 }
13 printf("Contenido del fichero: \n");
14 letra = getc(fichero);
15 while (feof(fichero) == 0) {
16 printf("%c", letra );
17 letra=getc(fichero);
18 }
19 if (fclose(fichero)!= 0)
20 printf( "Problemas al cerrar el fichero\n" );
21 }
Escritura de ficheros
fi
fi
Introducción a la programación con C
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <conio.h>
4
5 int main() {
6 FILE *origen, *destino;
7 char letra;
8 origen = fopen("origen.txt", "r");
9 destino = fopen("destino.txt", "w");
10 if (origen==NULL || destino==NULL) {
11 printf( "Problemas con los ficheros.\n" );
12 exit( 1 );
13 }
14 letra=getc(origen);
15 while (feof(origen)==0) {
16 putc(letra, destino);
17 printf( "%c", letra );
18 l etra=getc(origen);
19 }
20 if (fclose(origen)!=0)
21 printf( "Problemas al cerrar el fichero origen.txt\n" );
22 if (fclose(destino)!=0)
23 printf("Problemas al cerrar el fichero destino.txt\n" );
24 }
fi
fi
fi
Ejercicio
Este programa lee un fichero y le suprime todas las vocales.
Es decir que siendo el fichero origen.txt:
l lgr cmpsn
ps pr l cmp
fi
fi
fi
fi
fi
fi
fi
fi
fi
jn q l tr
s crc pr dtrás
Solución
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <conio.h>
4
5 int main() {
6 FILE *origen, *destino;
7 char letra;
8 origen=fopen("origen.txt","r");
9 destino=fopen("destino.txt","w");
10 if (origen==NULL || destino==NULL) {
11 printf( "Problemas con los ficheros.\n" );
12 exit( 1 );
13 }
14 letra=getc(origen);
15 while (feof(origen)==0) {
16 if (!strchr("AEIOUaeiou",letra)) putc( letra, destino );
17 letra=getc(origen);
18 }
19 if (fclose(origen)!=0)
20 printf( "Problemas al cerrar el fichero origen.txt\n" );
21 if (fclose(destino)!=0)
22 printf( "Problemas al cerrar el fichero destino.txt\n" );
23 }
fread y fwrite
Las funciones vistas hasta ahora (getc, putc, fgets, fputs), son
adecuadas para trabajar con caracteres (1 byte) y cadenas, pero ¿qué
sucede cuando se quiere trabajar con otros tipos de datos?
Existe una solución mucho más fácil utilizando las funciones fread
y fwrite. Estas funciones permiten tratar con datos de cualquier tipo,
incluso con estructuras.
fwrite
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <conio.h>
4
5 struct {
6 char nombre[20];
fi
fi
fi
7 char apellido[20];
8 char telefono[15];
9 } registro;
10 int main() {
11 FILE *fichero;
12 fichero = fopen( "nombres.txt", "a" );
13 do {
14 printf( "Nombre: " ); fflush(stdin);
15 gets(registro.nombre);
16 if (strcmp(registro.nombre,"")) {
17 printf( "Apellido: " ); fflush(stdin);
18 gets(registro.apellido);
19 printf( "Teléfono: " ); fflush(stdin);
20 gets(registro.telefono);
21 fwrite( ®istro, sizeof(registro), 1, fichero );
22 }
23 }
24 while (strcmp(registro.nombre," ")!=0);
25 fclose( fichero );
26 }
fi
fi
fi
fi
fi
fi
fread
Siendo buffer la variable donde se van a escribir los datos leídos del
chero p chero.
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <conio.h>
4
5 struct {
6 char nombre[20];
7 char apellido[20];
8 char telefono[15];
9 } registro;
10
11 void main() {
12 FILE *fichero;
13 fichero = fopen( "nombres.txt", "r" );
14 while (!feof(fichero)) {
15 if (fread( Registro, sizeof(registro), 1, fichero )) {
16 printf("Nombre: %s\n", registro.nombre);
fi
fi
fi
fi
Ejemplo
Solución
1 #include <stdio.h>
2
3 struct t_reg {
4 int num;
5 char cad[10];
6 char car;
7 };
8
9 int crear_archivo () {
10 FILE *fich;
11 int i, er_cod = 0;
12 struct t_reg r;
fi
fi
fi
fi
44 fclose (fich);
45 }
46 return er_dev;
47 }
48 int main(void) {
49 int error;
50 error = crear_archivo();
51 if (!error) Ieer_archivo();
52 }
EJEMPLOS: Archivos
1 #include <conio.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <io.h>
5 #include <stdlib.h>
6 #define NPacientes 4
7 void Imprimir(struct Paciente *P1);
8 void Elimina(struct Paciente *P1, int);
9 void Modifica(struct Paciente *P1);
10 int Buscar(struct Paciente *P1, int);
11 void Ingresar(struct Paciente *P1);
12 void Estadisticas(struct Paciente *P1);
13 void Guardar(struct Paciente *P1);
14
15 struct Paciente
16 {
17 int REG;
18 int CEDULA;
19 char Nombre[12];
20 char Sexo[9];
52 if(R==-1)
53 {
54 clrscr();
55 printf("\No sé ha encontrado la persona! :P\n");
56 printf("Se ingresará esta persona/n\n");getch();
57 Ingresar(P1);
58 }
59 Else
60 {
61 Imprimir(P1+R);
62 printf("PersonaEncontradaX:],Desea Modificarla?");
63 TECLA=getche();
64 if(TECLA=='s' || TECLA=='S')
65 Modifica(P1+R);
66 }
67 break;
68 case 50:
69 Estadisticas(P1);
70 break;
71 case 51:
72 clrscr();
73 Ingresar(P1);
74 break;
75 case 52:
76 clrscr();
77 printf("Ingrese la cedula del paciente a borrar: ");
78 scanf("%d",&SEARCH);
79 Elimina(P1,&SEARCH);
80 break;
81 case 53:
82 clrscr();
83 Guardar(P1);
84 break;
85 case 57:
86 TECLA=getche();
87 if (TECLA==57)
88 SALIR=1;
89 break;
90 }}
91 }
92
93 Buscar(struct Paciente *P1,int NUM) {
94 int i;
95 for(i=0;i<NPacientes;i++) {
96 if ((P1+i)->CEDULA == NUM)
97 return(i);break;
98 }
99 return(-1);
100 }
101
102 void Imprimir(struct Paciente *P1) {
103 clrscr();
104 printf("\n\nCedula: ");
105 printf("%d",P1->CEDULA);
106 printf("Expedida en: ");
107 scanf("%s",P1->Ciudad);
108 printf("\n\nNombre");
109 scanf("%s",P1->Nombre);
110 printf("\n\nSexo: ");
111 scanf("%s",P1->Sexo);
112 printf("\n\nTelefono: ");
113 printf("%l",P1->TELEFONO);
114 printf("\n\nDireccion:");
115 printf("\nCalle:");
116 printf("%d",P1->CALLE);
117 printf("\nNumero:");
118 printf("%d",P1->NUMERO);
119 printf("\n\nSeguro:");
120 scanf("%s",P1->Seguro);
121 }
122
123 void Elimina(struct Paciente *P1,int NUM) {
124 int R;
125 R=Buscar(P1,NUM);
126 if (R==-1)
127 printf("Registro No Existente O Ya Borrado");
128 else {
129 (P1+R)->CEDULA=NULL;
130 strcpy((P1+R)->Nombre, NULL);
131 strcpy((P1+R)->Sexo, NULL);
132 strcpy((P1+R)->Ciudad, NULL);
133 strcpy((P1+R)->Seguro, NULL);
134 (P1+R)->TELEFONO=NULL;
135 (P1+R)->CALLE=NULL;
136 (P1+R)->NUMERO=NULL;
137 }
138 }
139 void Modifica(struct Paciente *P1) {
140 clrscr();
141 printf("Ingrese La Cedula: ");
142 scanf("%d",&P1->CEDULA);
143 printf("Ingrese El Nombre: ");
144 scanf("%s",P1->Nombre);
176 break;
177 }
178 }
179 }
180 void Estadisticas(struct Paciente *P1) { }
181 void Guardar(struct Paciente *P1) {
182 FILE *ARCHIVO;
183 if((ARCHIVO=fopen("Data.vWv","wb"))==NULL)
184 exit(0);
185 Else
186 fwrite(P1,sizeof(Paciente),1,ARCHIVO);
187 fclose(ARCHIVO);
188 }
EJEMPLO 2:
1 #include <stdio.h>
2
3 int main(int argc, char **argv)
4 {
5 FILE *fe, *fs;
6 unsigned char buffer[2048]; // Buffer de 2 Kbytes
7 int bytesLeidos;
8 if(argc != 3) {
9 printf("Usar:copia<archivo_origen><archivo_destino>\n");
10 return 1;
11 }
12
13 // Abrir el archivo de entrada en lectura y binario
14 fe = fopen(argv[1], "rb");
15 if(!fe) {
EJEMPLO 3
1 #include <stdio.h>
2 int main()
3 {
4 char nombre[10]="datos.dat", linea[81];
5 FILE *archivo;
6 archivo = fopen( nombre, "r" );
7 printf( "Archivo: %s -> ", nombre )
8 if( archivo )
9 printf( "existe (ABIERTO)\n" );
10 else {
EJEMPLO 4
1 #include <stdio.h>
2 int main()
3 {
4 char nombre[11]="datos2.dat";
5 FILE *archivo;
6 archivo = fopen( nombre, "w" );
7 printf( "Archivo: %s -> ", nombre );
8 if( archivo )
9 printf( "creado (ABIERTO)\n" );
10 else {
11 printf( "Error (NO ABIERTO)\n" );
12 return 1;
13 }
14 fputs( "Esto es un ejemplo usando \'fputs\'\n", archivo );
15 if( !fclose(archivo) )
fseek
#define SEEK_SET0
#define SEEK_CUR 1
fi
fi
fi
fi
fi
fi
fi
Introducción a la programación con C
#define SEEK_END 2
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <conio.h>
4 void main()
5 {
6 FILE *fichero;
7 long posicion;
8 int resultado;
9 fichero = fopen( "origen.txt", "r");
10 printf( "¿Qué posición quieres leer? ");
11 fflush(stdout);
12 scanf( "%d", &posición );
13 resultado = fseek( fichero, posición, SEEK_SET );
14 if (!resultado)
15 printf("%c está en la posición %d\n", fgetc(fichero), posición);
16 Else
17 printf( "Problemas posicionando el cursor.\n" );
18 fclose( fichero );
19 }
ftell
fi
fi
Su formato es el siguiente:
El valor que da ftell puede ser usado por fseek para volver a la posición
actual.
fprintf y fscanf
Ejercicios Propuestos
fi
fi
fi
fi
fl
fl
fi
fi
fi
fi
fl
fi
Introducción a la programación con C
Conclusiones
El abarcar conceptos fundamentales de la programación en un
lenguaje tan robusto en sus aplicaciones, y tan complejo debido a su
cercanía de comunicación con la maquina (computadora), es un
trabajo altamente importante para las épocas actuales en donde la
revolución tecnológica sigue avanzando a ritmos inigualables. Con
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
Introducción a la programación con C
Bibliografía
Los tipos abstractos de datos. Estructuras de datos y algoritmos
03/04.
<http: //webdiis.unizar.es/~elvira/eda/material0304/TADespec/
TAD.pdf>
(25 Feb 2013)
fi
(2009)
Algoritmos
< https://www.buenastareas.com/ensayos/Algoritmos/7801158.html
>
(2013)
fi
fi
fl
fi
fi
Introducción a la programación con C
Proyecto sm1
< proyecto sm1: febrero 2013 (proyectosub1.blogspot.com) >
(9 de febrero, 2013)
(s.f.)
Referencias