Posts etiquetados ‘C’
Despues de ver cómo generar números aleatorios en javascript, veremos ahora como generar números aleatorios en c y números aleatorios entre dos números. Para ello contamos con dos funciones en C para su correcto funcionamiento:
void srand(unsigned int semilla);
int rand(void);
void srand48(long int semilla);
double drand48(void);
En realidad son cuatro funciones, son análogas, srand y rand son para el manejo de enteros y srand48 y drand48 para el manejo de números reales.
La función rand genera un número aleatorio, pero si hacemos un programa que genere por ejemplo diez números aleatorios, cada vez que ejecutemos el programa vamos a obtener
En el post anterior vimos como convertir una cadena a entero, ahora veremos lo contrario.
Igual que atoi nos convierte una cadena en un entero, la función itoa nos convierte un entero en una cadena. El problema de esta función es que no es estándar, y por lo tanto no estará disponible en todos los compiladores o sistemas, por lo tanto vamos a hacer una pequeña “trampa” para emular dicha función.
Para la “trampa” emplearemos la función sprintf:
int sprintf(char *cadena, const char *formato, ...);
Esta función es parecida a printf, pero en vez de mandar a la salida estándar el resultado, lo almacena en la variable ‘cadena’. A continuación vamos a ver un sencillo ejemplo:
Es muy común convertir en número entero a una cadena en c, por ejemplo desde datos leidos en ficheros de texto o la conversión de los argumentos pasados al programa. Por suerte, c nos proporciona dos funciones para este propósito, atoi y strtol:
int atoi (const char *cadena)
long int strtol(const char *cadena, char *basura, int base)
Tanto atoi como strtol dada una cadena la convierten a un entero, devolviendo el número y en caso de error devuelven el número 0. A strtol hay que indicarle la base a la que queremos convertir el número, en la mayoría de los casos la base será 10.
Pero bien, tenemos que saber qué es una cadena errónea para esas funciones:
A veces nos encontramos resolviendo un problema en C, Pascal u otro lenguaje y necesitamos almacenar datos que cambian dinámicamente en cada ejecución, como un programa que se encargue de realizar operaciones con matrices, o cargar una foto en memoria para rotarla.
Si no queremos “perder” nuestro tiempo más de uno lo que hace es declarar un array bidimensional estático lo suficientemente grande para que “funcione”, pero no es la solución. Lo adecuado es declarar un array dinámico en tiempo de ejecución, veámoslos.
En el siguiente programa se trabaja con un array de números enteros que es enviado como argumento a dos funciones, una que le introduce valores y otra que los presente en pantalla.
#include <stdio.h>
#include <stdlib.h>
#define TAM 10
void valores(int numeros[]);
void visualizar(int numeros[]);
int main()
{
int numeros[TAM];
printf("Ejemplo de paso de arrays entre funciones\n");
valores(numeros);
printf("Los valores introducidos fueron: \n");
visualizar(numeros);
getch();
}
void valores(int *numeros)
{
int i;
for(i=0;i<TAM;i++)
{
printf("Elemento[%d]: ", i+1);
scanf("%d", &numeros[i]);
}
}
void visualizar(int numeros[])
{
int i;
for(i=0;i<TAM;i++)
printf("Numero[%d]= %d\n", i+1, numeros[i]);
}
Juego en C que consiste en intentar adivinar un número que ha sido generado aleatoriamente.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define muyalejado 20
#define alejado 10
#define cerca 5
#define limite 100
main()
{
int numero, n, veces, gana, intentos, dis;
srand((unsigned)time(0));
numero = ((rand()%limite)+1); //generar número
printf("Introduce el numero de intentos: ");
scanf("%d", &intentos);
fflush(stdin);
gana = 0;
veces = 0;
do {
printf("Introduce el numero: ");
scanf("%d", &n);
fflush(stdin);
veces++;
if(n==numero) gana = 1;
else dis = abs(numero-n);
{
if(dis > muyalejado) printf("Muy alejado\n");
else {
if(dis>=alejado) printf("Alejado\n");
else {
if(dis>cerca) printf("Cerca\n");
else printf("Muy cerca\n");
}
}
}
} while((veces <= intentos) && (gana==0));
if(gana==1) printf("Has acertado\n");
else printf("Has perdido, el numero era: %d\n", numero);
getch();
}
Código de cálculo de polinomios a través de una lista enlazada. Pones las bases y los exponentes a calcular y luego te muestra una tabla obteniendo el resultado de X*base y elevandolo por su exponente teniendo x la siguiente secuencia: x=0, x=0.5, x=1 … x = 5.
http://www.megaupload.com/es/?d=YRABHD7R
Hola amigos. Ya se que en los tiempos que corren existen muchos programas en los que se pueden gestionar numeros de teléfono, nombres de sus propietarios… incluso los propios móviles ya pueden gestionar todo eso.
Aún así, nunca está de más tener una copia de seguridad de los teléfonos de la agenda del móvil por si un día se pierde y tienes que recuperar los números.
Esta sencilla aplicación permite realizar las tareas de inserción, búsqueda, actualización, borrado… Se pueden insertar hasta 3 números en la agenda por persona. Aquí os dejo un link para los que le interese.
http://www.megaupload.com/es/?d=3E2ZKEM4
Hola amigos. Siguiendo la tradición, la mejor forma de aprender a programar en cualquier lenguaje es editar, compilar, corregir y ejecutar pequeños programas descriptivos. Analicemos por lo tanto el primer ejemplo:
#include <stdio.h>
main()
{
printf("Bienvenido a la Programación en languaje C\n");
return 0;
}
Dejemos de lado por el momento el análisis de la primera línea del programa, y pasemos a la segunda.
FUNCION main()
La función main() indica donde empieza el programa, cuyo cuerpo principal es un conjunto de sentencias delimitadas por dos llaves, una inmediatamente después de la declaración main() ” { “, y otra que finaliza el listado ” } “. Todos los programas C arrancan del mismo punto: la primer sentencia dentro de dicha función, en este caso printf (“……”).
En el EJEMPLO 1 el programa principal está compuesto por sólo dos sentencias: la primera es un llamado a una función denominada printf(), y la segunda, return, que finaliza el programa retornando al Sistema Operativo.
Recuérdese que el lenguaje C no tiene operadores de entrada-salida por lo que para escribir en video es necesario llamar a una función externa. En este caso se invoca a la función printf(argumento) existente en la Librería y a la cual se le envía como argumento aquellos caracteres que se desean escribir en la pantalla. Los mismos deben estar delimitados por comillas. La secuencia \n que aparece al final del mensaje es la notación que emplea C para el caracter “nueva línea” que hace avanzar al cursor a la posición extrema izquierda de la línea siguiente. Más adelante analizaremos otras secuencias de escape habituales.
La segunda sentencia (return 0) termina el programa y devuelve un valor al Sistema operativo, por lo general cero si la ejecución fué correcta y valores distintos de cero para indicar diversos errores que pudieron ocurrir. Si bien no es obligatorio terminar el programa con un return, es conveniente indicarle a quien lo haya invocado, sea el Sistema Operativo o algún otro programa, si la finalización ha sido exitosa, o no. De cualquier manera en este caso, si sacamos esa sentencia el programa correrá exactamente igual, pero al ser compilado, el compilador nos advertirá de la falta de retorno.
Cada sentencia de programa queda finalizada por el terminador “; “, el que indica al compilador el fin de la misma. Esto es necesario ya que, sentencias complejas pueden llegar a tener más de un renglón, y habrá que avisarle al compilador donde terminan.
Es perfectamente lícito escribir cualquier sentencia abarcando los renglones que la misma necesite, por ejemplo podría ser:
printf("Bienvenido a la Programacion"
"en lenguaje C \n");
Hola amigos. Como había prometido, esta semana comienza el curso de este gran lenguaje. Quiero añadir que durante estas tres primeras semanas iré posteando poco a poco porque llega ese mes tan fatídico para los estudiantes como es septiembre… A partir del 15 de septiembre espero postear con más regularidad y con mayor calidad. Espero que este curso sea de ayuda para mucha gente.
Ahora comenzamos con la introducción al lenguaje C.
El lenguaje de programación C está caracterizado por ser de uso general, con una sintaxis sumamente compacta y de alta portabilidad.
Es común leer que se lo caracteriza como un lenguaje de “bajo nivel”. No debe confundirse el término “bajo” con “poco”, ya que el significado del mismo es en realidad “profundo”, en el sentido que C maneja los elementos básicos presentes en todas las computadoras: caracteres, números y direcciones. Esta particularidad, junto con el hecho de no poseer operaciones de entrada-salida, manejo de arreglo de caracteres, de asignación de memoria, etc , puede al principio parecer un grave defecto; sin embargo el hecho de que estas operaciones se realicen por medio de llamadas a Funciones contenidas en Librerías externas al lenguaje en sí, es el que confiere al mismo su alto grado de portabilidad, independizándolo del “Hardware” sobre el cual corren los programas.
La descripción del lenguaje se realiza siguiendo las normas del ANSI C, por lo tanto, todo lo expresado será utilizable con cualquier compilador que se adopte; sin embargo en algunos casos particulares se utilizaron funciones Compilador ó Sistema Operativo-dependientes, explicitándose en estos casos la singularidad de las mismas.
El próximo día os pondré unos ejemplos de código y empezaré a explicaros la anatomía del lenguaje (encabezado, cuerpo del código…).