Ejemplos Prácticos de Código C: Vectores, Conversiones y Lógica de Programación
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 11,36 KB
Operaciones con Vectores en C: Búsqueda y Ordenación
Este primer bloque de código ilustra funciones básicas para manipular vectores (arrays) en C, incluyendo la búsqueda de elementos y la ordenación.
#include <stdio.h>
#include <time.h>
Función buscar
Esta función busca un número específico dentro de un rango de un vector.
int buscar(int vector[], int numero, int inicio, int fin)
{
int i;
// Recorremos el vector
for (i = inicio; i < fin; ++i)
{
if (numero == vector[i]) // Lo hemos encontrado
return 1; // Indica que el número fue encontrado
}
return 0; // Indica que el número no fue encontrado
}
Función ordenar
El objetivo es diseñar una función, ordenar
, que ordene de menor a mayor los valores de un vector entre las posiciones inicial y final que se le pasan por parámetros.
Descripción de la Función ordenar
:
- Recibe:
- Un vector de enteros que se va a ordenar.
- Las posiciones
inicio
yfin
que delimitan la sección del vector a ordenar.
- Devuelve:
Esta función es de tipo
void
, por lo que no devuelve un valor explícito. Modifica directamente el vector pasado como argumento.
void ordenar(int vector[], int inicio, int fin)
{
int i, j, temp;
// Bucle externo para recorrer el vector
for (i = inicio; i < fin; i++)
{
// Bucle interno para comparaciones y swaps
for (j = i + 1; j <= fin; j++) // Corrección: j debería ser < fin si fin es el límite superior no inclusivo, o <= fin-1. Asumiendo que 'fin' es el índice del último elemento a considerar o uno más allá.
{
// Si el elemento actual es mayor que el siguiente, intercambiarlos
if (vector[i] > vector[j])
{
temp = vector[i];
vector[i] = vector[j];
vector[j] = temp;
}
}
}
}
Funciones de Prueba (Originalmente Comentadas)
Nota: Las siguientes funciones estaban comentadas en el código original y se presentan aquí para mantener la integridad del documento. Su funcionalidad se describe brevemente.
/*
// Función para generar una apuesta ganadora (números aleatorios sin repetir)
void apuestaGanadora(int vector[], int ini, int fin)
{
srand(time(NULL)); // Inicializar semilla para números aleatorios
int numaleatorio;
int i; // Declaración de i que faltaba en el original
for (i = 0; i < 7; i++) // Asumiendo que el vector tiene al menos 7 posiciones para los números principales
{
numaleatorio = (rand() % 49) + 1; // Genera número entre 1 y 49
int busca = buscar(vector, numaleatorio, 0, i); // Busca si ya existe hasta la posición actual 'i'
// Mientras que el número aleatorio generado esté en el vector ==> Generamos otro número
while (busca == 1)
{
numaleatorio = (rand() % 49) + 1;
busca = buscar(vector, numaleatorio, 0, i);
}
vector[i] = numaleatorio; // Metemos el número aleatorio no repetido en la posición en la que estamos
}
// Generamos el reintegro (asumiendo que la posición 7 es para el reintegro)
numaleatorio = (rand() % 9) + 1; // Genera número entre 1 y 9 para el reintegro
vector[7] = numaleatorio;
}
// Función para imprimir un vector
void imprimirVector(int vector[], int inicio, int fin) {
int i;
printf("[");
for (i = inicio; i < fin; i++) {
printf("%d", vector[i]);
if (i < fin - 1) { // Corregido para no imprimir coma después del último elemento
printf(", ");
}
}
printf("]\n");
}
// Función principal de prueba
int main()
{
int vector[8] = {0,0,0,0,0,0,0,0}; // Vector para 7 números + reintegro
apuestaGanadora(vector, 0, 7); // Generar apuesta para las primeras 7 posiciones (0-6) y reintegro en la 7
imprimirVector(vector, 0, 8); // Imprimir los 8 elementos
return 0;
}
*/
Conversión de Unidades de Temperatura en C
Este segundo bloque de código se enfoca en la conversión de temperaturas entre Celsius, Fahrenheit y Kelvin.
#include <stdio.h>
#include <time.h> // time.h podría no ser necesario aquí si no se usa para srand o similar
#include <stdlib.h> // Necesario para system("pause")
Apartado 1: Solicitar Datos de Temperatura
La función solicitarDatos
pide al usuario que ingrese una temperatura y su unidad.
// Prototipo de la función para solicitar datos al usuario
void solicitarDatos(float *gr, char *unidad) // Uso de punteros para modificar variables originales
{
printf("Ingrese la unidad de temperatura (C, F, K): ");
scanf(" %c", unidad); // Espacio antes de %c para consumir newlines pendientes
printf("Ingrese la magnitud de la temperatura: ");
scanf("%f", gr);
}
Apartado 2: Funciones de Conversión de Temperatura
Convertir Celsius a Fahrenheit
float pasargrC_A_grF(float gr)
{
float resultado; // Declarar la variable para almacenar el resultado
resultado = gr * 9.0/5.0 + 32.0;
return resultado;
}
Convertir Fahrenheit a Kelvin
float pasargrF_A_grK(float gr)
{
float resultado; // Declarar la variable para almacenar el resultado
resultado = (gr - 32.0) * 5.0/9.0 + 273.15;
return resultado;
}
Convertir Kelvin a Celsius
float pasargrK_A_grC(float gr)
{
float resultado; // Declarar la variable para almacenar el resultado
resultado = gr - 273.15; // Fórmula corregida para K a C
return resultado;
}
Función Principal (main
) para Conversiones
int main()
{
// Nota importante: Cuando se llama a una función que espera punteros para modificar variables,
// se pasan las direcciones de memoria de dichas variables (usando &).
float gr;
char unidad;
solicitarDatos(&gr, &unidad); // Se pasan las direcciones para que la función modifique 'gr' y 'unidad'.
float resultadoKelvin, resultadoCent, resultadoFar;
// Lógica de conversión basada en la unidad ingresada
if (unidad == 'F' || unidad == 'f') // Si la unidad es 'F'. Recordar: '==' es comparación, '=' es asignación.
{
resultadoFar = gr;
resultadoKelvin = pasargrF_A_grK(gr);
resultadoCent = pasargrK_A_grC(resultadoKelvin); // También es correcto: pasargrK_A_grC(pasargrF_A_grK(gr));
}
else if (unidad == 'C' || unidad == 'c')
{
resultadoCent = gr;
resultadoFar = pasargrC_A_grF(gr);
resultadoKelvin = pasargrF_A_grK(resultadoFar);
}
else if (unidad == 'K' || unidad == 'k')
{
resultadoKelvin = gr;
resultadoCent = pasargrK_A_grC(gr);
resultadoFar = pasargrC_A_grF(resultadoCent);
}
else
{
printf("Unidad no reconocida.\n");
return 1; // Terminar con error si la unidad no es válida
}
printf("\nLos valores convertidos son:\n");
printf("En Celsius: %.2f °C\n", resultadoCent);
printf("En Fahrenheit: %.2f °F\n", resultadoFar);
printf("En Kelvin: %.2f K\n", resultadoKelvin);
system("pause"); // Pausa la ejecución en sistemas Windows para ver la salida
return 0;
}
Cálculo de Multas por Exceso de Velocidad en C
Este tercer bloque de código presenta un programa para calcular la cuantía total de las multas de tráfico basadas en las velocidades registradas de varios vehículos.
#include <stdio.h>
#define N 1000 // Suponemos que como máximo habrá 1000 coches
Se almacenan las velocidades en un vector. Por ejemplo: v = {90, 114, 180, ...}
. El número de vehículos que introducirá el usuario fijará el tamaño efectivo del vector (hasta un máximo de N
).
Función cuantiaMultas
Objetivo: Calcular la cuantía total de las multas.
Recibe: Un vector de enteros v[]
con las velocidades y el número de coches numcoches
.
Devuelve: La cuantía total de las multas (entero).
int cuantiaMultas(int v[], int numcoches)
{
int i;
int cuantiaTotal = 0;
for (i = 0; i < numcoches; i++)
{
if (v[i] > 90 && v[i] <= 110) // Multa de 100€: velocidad entre 91 y 110 km/h (inclusive)
cuantiaTotal = cuantiaTotal + 100;
else if (v[i] > 110 && v[i] <= 120) // Multa de 300€: velocidad entre 111 y 120 km/h
cuantiaTotal = cuantiaTotal + 300;
else if (v[i] > 120 && v[i] <= 140) // Multa de 400€: velocidad entre 121 y 140 km/h
cuantiaTotal = cuantiaTotal + 400;
else if (v[i] > 140 && v[i] <= 160) // Multa de 500€: velocidad entre 141 y 160 km/h
cuantiaTotal = cuantiaTotal + 500;
else if (v[i] > 160) // Multa de 600€: velocidad superior a 160 km/h
cuantiaTotal = cuantiaTotal + 600;
}
return cuantiaTotal;
}
Función leerDatos
Objetivo: Leer el número de coches y sus respectivas velocidades.
Recibe: Un vector de enteros v[]
donde se almacenarán las velocidades.
Devuelve: El número de coches introducido por el usuario (entero).
int leerDatos(int v[])
{
int numcoches;
printf("Introduce el número de coches (máximo %d): ", N);
scanf("%i", &numcoches);
// Validar que numcoches no exceda N
if (numcoches > N) {
printf("El número de coches excede el máximo permitido (%d). Se limitará a %d.\n", N, N);
numcoches = N;
} else if (numcoches < 0) {
printf("El número de coches no puede ser negativo. Se establecerá a 0.\n");
numcoches = 0;
}
int i;
for (i = 0; i < numcoches; i++)
{
printf("Introduce la velocidad del coche %i (km/h): ", i + 1); // i+1 para numeración amigable
scanf("%i", &v[i]);
}
return numcoches;
}
Función Principal (main
) para Cálculo de Multas
// Ejemplo de vector después de la entrada: v = {velocidad1, velocidad2, ...}
int main()
{
int v[N]; // Declaración del vector de velocidades.
// Llamamos a leerDatos para que rellene el vector v y nos devuelva el número de coches.
int numcoches = leerDatos(v); // Ahora numcoches contiene el valor devuelto por leerDatos, y el vector v está relleno.
int cuantiamulta;
if (numcoches > 0) {
cuantiamulta = cuantiaMultas(v, numcoches);
printf("Cuantía Total de Multas: %i €\n", cuantiamulta);
} else {
printf("No se introdujeron datos de coches para calcular multas.\n");
}
return 0;
}