Algoritmos
Enviado por jose_art_87 • 5 de Marzo de 2013 • 33.054 Palabras (133 Páginas) • 473 Visitas
Ejercicios y prácticas resuletas sobre
PROGRAMACIÓN AVANZADA EN C
Copyright (c) 2008 Víctor Sánchez Sánchez.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
---
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
La documentación y los programas quedan licenciados bajo las licencias GFDL y GPL.
Versión 1.0 (301108)
Autor: Víctor Sánchez2
Web: www.victorsanchez2.com
Correo: victorsanchez2@gmail.com
Jabber: victorsanchez2@jabberes.org
Se recomienda utilizar el compilador gcc y el sistema operativo GNU/Linux. En la carrera vais a tener que utilizarlo infinidad de veces, así que mejor comenzar ahora. Es el mejor compilador que existe y está arropado por la infinidad de programas de gran calidad del mundo GNU/Linux. Para la carrera podéis utilizar Anjuta para editar los programas y el DDD para corregir vuestros bugs.
PRÁCTICA 1:
El objetivo de esta práctica es afianzar ciertos conceptos básicos de la programación en lenguaje C:
• Bucles y tablas.
• Entrada y salida de datos.
• Paso de argumentos a un programa.
• Manejo de archivos.
• Funciones.
• Uso de memoria dinámica.
EJERCICIOS
1.
Escribir un programa (es decir una función main) que pida por teclado una serie de números enteros, los almacene en una tabla estática y posteriormente escriba por pantalla todos los números introducidos indicando además cual es el mayor y el menor. Lo primero que debe hacer el programa es preguntar al usuario cuantos números se van a introducir y comprobar que dicha cantidad es menor que la dimensión de la tabla. Para dicha dimensión debe definirse una constante (por ejemplo MAX_DIMENSION) a la cual se puede asignar un valor razonable (por ejemplo, 100).
Funciones C a utilizar:
• scanf: para leer números introducidos por el teclado.
• printf: para imprimir por pantalla.
Ejemplo de ejecución: lo que se vería por pantalla debe ser algo así como
Introduce la cantidad de números:
3
Introduce los números:
5
7
2
Los números introducidos son:
5
7
2
El mayor es el 7.
El menor es el 2.
/*********************************************************
* Autor: Victor Sanchez2
* Web: http://www.victorsanchez2.com
* Correo: victorsanchez2@gmail.com
*
**********************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK 1
#define ERR -10001
#define MAX_DIM 100
int enteros[MAX_DIM]; /* Array para guardar los enteros */
int num_total;
int lectura(void);
int sacarpantalla(int max, int min, int num_total);
int calcular(int *max, int *min, int total);
int es_digito(char caracter[]);
int main()
{
int menor; /* Numero menor */
int mayor; /* Numero mayor */
if (lectura() == ERR)
{
printf("Error al leer el numero de terminos.\n");
return ERR;
}
if (calcular(&mayor, &menor, num_total) == ERR)
{
printf("Error al intentar calcular el mayor y el menor");
return ERR;
}
if (sacarpantalla(mayor, menor, num_total) == ERR)
{
printf("Error al mostrar por pantalla.\n");
return ERR;
}
return OK;
}
/*********************************************************
* Funcion: int lectura(int *total)
*
* IN: Toma una variable tipo int.
* OUT: Devuelve OK si se ha leido correctamente, ERR si hay algun fallo.
* MAKE: Obtiene los numeros que introduce el usuario y los guarda
* en un array de enteros
**********************************************************/
int lectura(void)
{
int continuar = OK;
int n;
char numeros[MAX_DIM];
for (n = 0; n < (int) strlen(numeros); n++)
numeros[n] = '0';
printf("\nCuantos numeros va a introducir? --> ");
do {
gets(numeros);
continuar = OK;
if ((num_total = es_digito(numeros)) == ERR)
continuar = ERR;
if (num_total <= 0)
{
printf("Debe introducir un numero positivo.\n");
continuar = ERR;
}
} while (continuar != OK);
printf("\nIntroduzca los numeros: \n");
for (n = 0; n < num_total; n++)
{
gets(numeros);
if ((enteros[n] = es_digito(numeros)) == ERR)
{
printf("Error al leer el numero, por favor repita introduccion.\n");
n--;
}
}
return OK;
}
/*********************************************************
* Funcion: int calcular(int *max, int *min, int num_total)
*
* IN: *max y *min que acumulan el numero mayor y menor. num_total
* acumula la cantidad de numeros que se van a introducir.
* OUT: OK si se ha realizado correctamente o ERR si hay fallos.
* MAKE: Encuentra el minimo y el maximo de los numeros introducidos
...