Organización de Computadoras
Código fuente de explicaciones
Código fuente online
Organización de código fuente.
* * *
Organización de código fuente
Ejemplo Calculadora
A continuación se puede observar el código fuente utilizado para ejemplificar el esquema de archivos utilizados para organizar los fuentes de un proyecto en C.
-
Proyecto Calculadora
#ifndef CALCULADORA_H_INCLUDED #define CALCULADORA_H_INCLUDED #define DIVISON_POR_CERO -1 extern float suma(float a, float b); extern float resta(float a, float b); extern float multiplicacion(float a, float b); extern float division(float a, float b); #endif // CALCULADORA_H_INCLUDED
#include <stdlib.h>
#include "calculadora.h"
float suma(float a, float b){
return a + b;
}
float resta(float a, float b){
return a - b;
}
float multiplicacion(float a, float b){
return a * b;
}
float division(float a, float b){
if (b == 0){
exit(DIVISON_POR_CERO);
}
return a / b;
}
#include <stdio.h>
#include <stdlib.h>
#include "calculadora.h"
int main(){
int operacion, salir = 0;
float operando_1, operando_2, resultado;
while (!salir){
printf("\nBienvenido a la calculadora\n");
printf("Ingrese la operacion a realizar \n");
printf("1: suma, 2: resta, 3: multiplicacion, 4: division, 5: salir) >>");
scanf("%d", &operacion);
fflush(stdin);
if (operacion >= 1 && operacion <=4){
printf("Ingrese dos operandos >>");
scanf("%f %f", &operando_1, &operando_2);
fflush(stdin);
}
switch(operacion){
case 1: {
resultado = suma(operando_1, operando_2);
printf("Resultado de la suma: %f\n", resultado);
break;
}
case 2:{
resultado = resta(operando_1, operando_2);
printf("Resultado de la resta: %f\n", resultado);
break;
}
case 3:{
resultado = multiplicacion(operando_1, operando_2);
printf("Resultado de la multiplicacion: %f\n", resultado);
break;
}
case 4:{
resultado = division(operando_1, operando_2);
printf("Resultado de la division: %f\n", resultado);
break;
}
case 5:{
salir = 1;
printf("Gracias por utilizar los servicios de calculadora \n");
break;
}
default:{
printf("La operacion ingresada no es correcta \n");
}
}
}
return 0;
}
Código fuente online
Variables y E/S
* * *
Variables y E/S
Sizeof. Rangos.
A continuación se puede observar el código fuente utilizado para ejemplificar rangos y tamaños en memoria de diferentes tipos de datos.
-
Proyecto Variables y E/S
#ifndef ENCABEZADOS_H_INCLUDED #define ENCABEZADOS_H_INCLUDED // Prototipos de procemientos de prueba extern void size_tipos_de_datos(); extern void rango_de_enteros(); extern void pruebas_con_boolean(); extern void pruebas_punteros(); extern void pruebas_string(); extern void pruebas_es(); #endif // ENCABEZADOS_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void size_tipos_de_datos(){
printf("char: %d bytes\n", sizeof(char));
printf("unsigned char: %d bytes\n\n", sizeof(unsigned char));
printf("int: %d bytes\n", sizeof(int));
printf("unsigned int: %d bytes\n", sizeof(unsigned int));
printf("long int: %d bytes\n", sizeof(long int));
printf("unsigned long int: %d bytes\n", sizeof(unsigned long int));
printf("unsigned long long int: %d bytes\n\n", sizeof(unsigned long long int));
printf("void *: %d bytes \n", sizeof(void *));
printf("char *: %d bytes \n", sizeof(char *));
printf("int *: %d bytes \n\n", sizeof(int *));
printf("float: %d bytes\n", sizeof(float));
printf("double: %d bytes\n\n", sizeof(double));
}
void rango_de_enteros(){
int cant_bits = sizeof(int) * 8;
int max_entero_positivo = pow(2, cant_bits - 1) - 1;
int max_entero_negativo = -1 * pow(2, cant_bits - 1);
unsigned int max_entero_no_signado = pow (2, cant_bits) - 1;
printf("Maximo positivo de un SIGNED int: %d\n", max_entero_positivo);
printf("Maximo negativo de un SIGNED int: %d\n", max_entero_negativo);
printf("Maximo valor representable de un UNSIGNED int: %u\n\n", max_entero_no_signado);
printf("Observar como se desbordan las variables... \n");
printf("Maximo positivo de un SIGNED int incrementado en 1: %d\n", max_entero_positivo+1);
printf("Maximo negativo de un SIGNED int decrementado en 1: %d\n", max_entero_negativo-1);
printf("Maximo valor representable de un UNSIGNED int incrementado en 1: %u\n", max_entero_no_signado+1);
printf("La respuesta al por que sucede esto podra obtenerla prontamente durante la materia... \n\n");
}
#include <stdio.h>
#include <stdlib.h>
#include "encabezados.h"
int main(){
size_tipos_de_datos();
rango_de_enteros();
pruebas_con_boolean();
pruebas_punteros();
pruebas_string();
pruebas_es();
return 0;
}
Variables y E/S
Boolean.
A continuación se puede observar el código fuente utilizado para ejemplificar la representación de valores tipo boolean.
-
Proyecto Variables y E/S
#ifndef ENCABEZADOS_H_INCLUDED #define ENCABEZADOS_H_INCLUDED // Prototipos de procemientos de prueba extern void size_tipos_de_datos(); extern void rango_de_enteros(); extern void pruebas_con_boolean(); extern void pruebas_punteros(); extern void pruebas_string(); extern void pruebas_es(); #endif // ENCABEZADOS_H_INCLUDED
#include <stdio.h>
void pruebas_con_boolean(){
int a = (3 < 2);
int b = !a;
int c = a || b;
int d = 10;
int es_par = (d % 2 == 0);
printf("a vale: %d, b vale: %d y c vale: %d\n", a,b,c);
if (1){
printf("Entra aqui\n");
}else{
printf("Aqui no\n");
}
if (!es_par){
printf("%d no es par, y es_par vale %d\n", d, es_par);
}else{
printf("%d es par, y es_par vale: %d\n", d, es_par);
}
}
#include <stdio.h>
#include <stdlib.h>
#include "encabezados.h"
int main(){
size_tipos_de_datos();
rango_de_enteros();
pruebas_con_boolean();
pruebas_punteros();
pruebas_string();
pruebas_es();
return 0;
}
Variables y E/S
Punteros.
A continuación se puede observar el código fuente utilizado para ejemplificar el uso y manipulación de punteros.
-
Proyecto Variables y E/S
#ifndef ENCABEZADOS_H_INCLUDED #define ENCABEZADOS_H_INCLUDED // Prototipos de procemientos de prueba extern void size_tipos_de_datos(); extern void rango_de_enteros(); extern void pruebas_con_boolean(); extern void pruebas_punteros(); extern void pruebas_string(); extern void pruebas_es(); #endif // ENCABEZADOS_H_INCLUDED
#include <stdio.h>
// Este procedimiento arrojara warnings en compilacion.
// Esto se realiza asi para lograr observar el contenido de variables del tipo puntero sin inicializar.
void pruebas_punteros(){
int * pi;
char * pc;
float * pf;
int i = 10;
float f = 7.5f;
printf("El valor inicial del puntero pi es: %p\n", pi);
printf("El valor inicial del puntero pc es: %p\n", pc);
printf("El valor inicial del puntero pf es: %p\n", pf);
printf("Se opera sobre el puntero pi y la variable f...\n");
pi = &i;
f = *pi;
printf("El valor actual del puntero pi es: %p; en dicha direccion se halla el valor %d\n", pi, *pi);
printf("El valor actual de la variable f es: %f\n", f);
printf("Se opera con ++ sobre el puntero pi...\n");
pi++;
printf("El valor actual del puntero pi es: %p\n\n", pi);
}
// Este procedimiento arrojara warnings en compilacion.
// Esto se realiza asi para lograr observar el contenido de variables del tipo puntero sin inicializar.
void pruebas_string(){
char cadena [] = "Hola";
char * pcadena;
printf("Cadena[0]: %c \n", cadena[0]);
printf("Cadena[1]: %c \n", cadena[1]);
printf("Cadena: %s \n", cadena);
printf("El valor inicial del puntero pcadena es: %p\n", pcadena);
printf("Se opera sobre el puntero pcadena...\n");
pcadena = cadena;
printf("El valor actual del puntero pcadena es: %p\n", pcadena);
printf("El valor actual de cadena es: %p\n", cadena);
printf("Primer char de pcadena: %c \n", *pcadena);
printf("Segundo char de pcadena: %c \n", *(pcadena+1));
printf("Todos los chars a partir de pcadena: %s \n\n", pcadena);
}
#include <stdio.h>
#include <stdlib.h>
#include "encabezados.h"
int main(){
size_tipos_de_datos();
rango_de_enteros();
pruebas_con_boolean();
pruebas_punteros();
pruebas_string();
pruebas_es();
return 0;
}
Variables y E/S
E/S Estándar.
A continuación se puede observar el código fuente utilizado para ejemplificar el uso de las funciones más utilizadas para la E/S Estándar.
-
Proyecto Variables y E/S
#ifndef ENCABEZADOS_H_INCLUDED #define ENCABEZADOS_H_INCLUDED // Prototipos de procemientos de prueba extern void size_tipos_de_datos(); extern void rango_de_enteros(); extern void pruebas_con_boolean(); extern void pruebas_punteros(); extern void pruebas_string(); extern void pruebas_es(); #endif // ENCABEZADOS_H_INCLUDED
#include <stdio.h>
void pruebas_es(){
char buffer [20];
char cadena [] = "Hola OC-UNS!";
float f = 10.123456f;
int d, m, a, cant_leido;
printf("Imprimiendo el float formateado...\n");
printf("%f:\n", f);
printf("%.2f:\n", f);
printf("%.5f:\n", f);
printf("%10f:\n", f);
printf("%-10f:\n", f);
printf("%10.5f:\n", f);
printf("%-10.5f:\n", f);
printf("%e:\n", f);
printf("%.2e:\n\n", f);
printf("Imprimiendo la cadena \"%s\" formateada...\n", cadena);
printf("%s:\n", cadena);
printf("%10s:\n", cadena);
printf("%.10s:\n", cadena);
printf("%.*s:\n", 10, cadena);
printf("%-10s:\n", cadena);
printf("%.15s:\n", cadena);
printf("%-15s:\n", cadena);
printf("%15s:\n", cadena);
printf("%15.10s:\n", cadena);
printf("%-15.10s:\n\n", cadena);
printf("Ingrese una cadena sin separadores >>");
scanf("%15s", buffer);
fflush(stdin);
printf("La cadena leida es %s\n", buffer);
printf("Ingrese otra cadena con sepadores>>");
scanf("%[^\n]", buffer);
fflush(stdin);
printf("La cadena leida es %s\n", buffer);
printf("Ingrese una fecha separadas por / >>");
cant_leido = scanf("%d/%d/%d", &d, &m, &a);
if (cant_leido == 3){
printf("La fecha es: %d/%d/%d\n\n", d, m, a);
}else{
printf("La fecha ingresada es invalida\n\n");
}
}
#include <stdio.h>
#include <stdlib.h>
#include "encabezados.h"
int main(){
size_tipos_de_datos();
rango_de_enteros();
pruebas_con_boolean();
pruebas_punteros();
pruebas_string();
pruebas_es();
return 0;
}
Fin de la presentación
Slides generadas mediante la herramienta Open Source @webslides.
-
Copyright © 2019-2025 Federico Joaquín
-
Actualizado al: 22-09-2020 - 13:10:35