Foros del Web » Programación para mayores de 30 ;) » Programación General »

Ejercicios para C (principiante)

Estas en el tema de Ejercicios para C (principiante) en el foro de Programación General en Foros del Web. :séveR led onieR le edsed sodulaS ... pués llevo poco programando en C... y creo la mejor forma de aprender es con la práctica asi ...
  #1 (permalink)  
Antiguo 20/03/2005, 04:59
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 4 meses
Puntos: 102
Ejercicios para C (principiante)

:séveR led onieR le edsed sodulaS

... pués llevo poco programando en C... y creo la mejor forma de aprender es con la práctica asi que me dispuse a hacer algunos programillas... pensaba crearme un problema yo mismo y solucionarlo... tengo poca imaginación ó pocos problemas... .

Alguien podrá plantearme algunos ejercicios???... lo que se les ocurra!... supongo en sus inicios habrán hecho algo... por favor... pero tranquilos que soy nuevo!!!... algo termino medio.

Espero me ayuden... Gracias de antemano.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #2 (permalink)  
Antiguo 20/03/2005, 10:14
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Podes hacer un programa que lea una oración que escriba el usuario y la muestre en pantalla en el orden inverso.

Ej. Input: hola mundo del revez
Ej. Output: revez del mundo hola
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 22/03/2005, 23:40
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 4 meses
Puntos: 102
Gracias por el ejercicio... extrañamente a mi usualmente se me ocurren cosas que tienen que ver con números . He aquí el código que hice:
Código:
#include <stdio.h>
#include <string.h>
main() {
	char *cadena;
	int i=0, j, k;
	gets(cadena);
	i= strlen(cadena);
	cadena[i]=' ';
	while(i > 0) {
		k= i;
		do {
			i--;
		} while(cadena[i]!=' ' && i>=0);
		for (j=i+1; j<=k; j++) {
			printf("%c", cadena[j]);
		}
	}
return 0;
}
Para que vean que tan principiante soy... ni sabia que scanf no me leia los espacios . Pero ya sabia de gets()...

Veamos... tengo tres variables i, j y k ... i será como un auxiliar; j y ka las utlizo para imprimir... busco en la cadena un espacio e imprimo desde el carácter posterior al el espacio hasta el espacio siguiente cuya posición es k. ... No hay mayor ciencia... Agrego un espacio a el final para que no me imprima dos palabras seguidas... para que no me haga esto -> [Esta es la cadena] => [cadenala es Esta ] ... ahora bien: preguntas que para eso estamos:

1) Utilize bucles por mi desconocimiento de funciones... pero apostaria que hay algo que me busque una carácter en una cadena y me regrese su posición ¿cierto??... ó algo como 'explode()' ó 'split()'???... Creo con una función se podria simplificar esto.

2) Se que hay ... cadenas reservadas para referirse a ciertos "carácteres especiales" ... como por ejemplo '\r' para un [return], '\n' para un salto de línea... y creia que '\x0' era para un espacio en blanco... pero no me funcionó... Bueno pués, concretamente ¿cuál es para el espacio en blanco?... y en general ¿cuáles son todos estos tipos de cadenas reservadas?

... Por el momento es eso... claro, comentarios, sugerencias y otros problemas son bien resibidos.

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #4 (permalink)  
Antiguo 23/03/2005, 03:37
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Bueno, no esta nada mal, solo una puntualizacion, char *cadena no la podes usar asi como esta. En mi pc da un error de violacion de memoria y es el comportamiento logico porque cadena se inicializa a cualquier valor aleatorio y deberia ser o un array inicializado estaticamente (char cadena[1024];) o dinamicamente (char *cadena = (char*)malloc(1024);).

Para el punto 1: strstr() busca una cadena dentro de otra y strchr() busca un caracter dentro de una cadena.

Para el punto 2: no se si existe un \algo para eso pero el espacio es el 32 en ASCII.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 25/03/2005, 11:52
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 4 meses
Puntos: 102
No soy capaz...

Cita:
Iniciado por Eternal Idol
(...) violacion de memoria y es el comportamiento logico porque cadena se inicializa a cualquier valor aleatorio y deberia ser o un array inicializado estaticamente (char cadena[1024];) o dinamicamente (char *cadena = (char*)malloc(1024);)
... momento que voy lento... me hablas en chino . En principio por ahí me dijeron que al inicializar un arreglo de la forma *arreglo éste se expandia conforme lo vaya requiriendo... lo cuál se escucha muy bonito ... pero.. me mintieron?? Odio que me mientan!!!

Cita:
Iniciado por Eternal Idol
(...) strstr() busca una cadena dentro de otra y strchr() busca un caracter dentro de una cadena. (...)
... perfecto... pero fuí incapaz de aplicar estas funciones para este ejercicio .. y mira que le dedique tiempo...

En las lecturas que consulte encontré acciones que no comprendo... como por ejemplo... inicializan una arreglo de la forma char *ptr;... luego... hacen algunas asignaciones... según yo entendí, estas asignaciones eran del tipo carácter... por ejemplo.. creo esto es válido ¿no?
Código:
ptr=strchr("Esto es una cadena", 'c');
y si imprimo a ptr con formato de cadena %s ... me imprime desde donde se encontró el carácter en adelante... ¿pero cómo puedo, en base a esto, sacar la posición donde encontró el carácter?? ... en un ejemplo ví que mandaba a imprimir la posición haciendo algo como
Código:
printf("%d", ptr-string);
e intente hacer esto asignandoselo a otra variable tipo entero.. pero nada.. algun error me daba que no era posible cambiar de char a int...

También ví esto y no estendí:
Código:
*ptr = 0;
ptr++;
pero si ptr es un arreglo tipo char!!! ¿cómo hacen funciones matematicas con eso???... que alguien me explique!!!

... (sus).. prueba fallida... y ya aprobechando el viaje... 2 preguntas más:
1. Con estas dos funciones podré hacer este ejercicio??? .. no necesito otra donde.. ya sea me corte una cadena ó me copie parte de esta a otra... Ah!, me tope con strtok... logré dividir la cadena por espacios... creo me podrá servir ¿no?...
2. qué debo entender cuando en lecturas me dicen "devuelve un puntero..." y "devuelve el índice..." ... vaya.. puntero? índice???...

... Bueno... todo por el momento, Gracias por la atención y pasciencia... .. Más ejercicios??

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #6 (permalink)  
Antiguo 25/03/2005, 12:46
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Cita:
Iniciado por jam1138
... momento que voy lento... me hablas en chino . En principio por ahí me dijeron que al inicializar un arreglo de la forma *arreglo éste se expandia conforme lo vaya requiriendo... lo cuál se escucha muy bonito ... pero.. me mintieron?? Odio que me mientan!!!
No es para nada cierto, cuando declaras una variable con * lo que haces es crear un puntero a ese tipo de variable (osea, en realidad un puntero son 4 bytes que contienen una direccion de memoria a la que apuntan). Tal vez te hablaban de la clase vector o algun contenedor de la Standard Template Library (STL) de C++.

char *caca = (char*)55; es valido sintacticamente pero estas apuntando a una direccion de memoria a la cual no tenes acceso, lo mismo pasa si declaras una variable char *ptr; no le das ningun valor y la pasas como parametro a una funcion, ¿Que hay en ptr? Un valor indefinido que no deberia utilizar jamas.

Cita:
Iniciado por jam1138
... perfecto... pero fuí incapaz de aplicar estas funciones para este ejercicio .. y mira que le dedique tiempo...
No tenes porque usarlas, no hace falta, las podes usar en otros problemas.

Cita:
Iniciado por jam1138
En las lecturas que consulte encontré acciones que no comprendo... como por ejemplo... inicializan una arreglo de la forma char *ptr;... luego... hacen algunas asignaciones... según yo entendí, estas asignaciones eran del tipo carácter... por ejemplo.. creo esto es válido ¿no?
Código:
ptr=strchr("Esto es una cadena", 'c');
y si imprimo a ptr con formato de cadena %s ... me imprime desde donde se encontró el carácter en adelante... ¿pero cómo puedo, en base a esto, sacar la posición donde encontró el carácter?? ... en un ejemplo ví que mandaba a imprimir la posición haciendo algo como
Código:
printf("%d", ptr-string);
e intente hacer esto asignandoselo a otra variable tipo entero.. pero nada.. algun error me daba que no era posible cambiar de char a int...
Eso es perfectamente valido claro, si te referis a la posicion decimal (13 en este caso) lo podes hacer restandole al resultado el puntero al primer caracter de la variable que se le pasa a strchr(), en ese caso es dificil de ver asi que doy otro ejemplo:

Código:
  char cadena[] = "hola a todos";
  char *ptr = cadena;
  char *buscar_t = strchr(ptr, 't');
  printf("Encontrado en posicion: %d", buscar_t - ptr);
Cita:
Iniciado por jam1138
También ví esto y no estendí:
Código:
*ptr = 0;
ptr++;
pero si ptr es un arreglo tipo char!!! ¿cómo hacen funciones matematicas con eso???... que alguien me explique!!!
A ver si tenemos el ejemplo anterior que te di, *ptr es igual a 'h' que es 104 en ASCII, entonces si hicieramos *ptr = 0; lo que conseguimos es escribir el numero 0 (terminador de cadena) en la primer byte (la variable es tipo char) del puntero. El ++ no se utiliza como funcion matematica sino como incrementador, se le incrementa en uno el valor del puntero que en esta caso deja de apuntar a la 'h' o 0 despues del *ptr = 0; y apunta a la 'o' que es el byte siguiente. Probalo con el sig. codigo:

Código:
  char cadena[] = "hola a todos";
  char *ptr = cadena;
  *ptr = 0;
  ptr++;
  printf("cadena modificada : %s", ptr);
Cita:
Iniciado por jam1138
1. Con estas dos funciones podré hacer este ejercicio??? .. no necesito otra donde.. ya sea me corte una cadena ó me copie parte de esta a otra... Ah!, me tope con strtok... logré dividir la cadena por espacios... creo me podrá servir ¿no?...[/code]
Lo mismo que en cuanto al strstr y strchr, el ejercicio ya la habias resuelto, si queres seguir probando seguro que encontraras cientos de formas diferentes de hacerlo. Tene en cuenta que strtok te modifica la cadena original.

Cita:
Iniciado por jam1138
2. qué debo entender cuando en lecturas me dicen "devuelve un puntero..." y "devuelve el índice..." ... vaya.. puntero? índice???... [/code]
El indice es el valor que se le pasa a un array (que en realidad es un puntero camuflado) para acceder a determinado elemento del mismo como por ejemplo ptr[2] accede al tercer elemento que vendria a ser en nuestros ejemplos 'a'.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Última edición por Eternal Idol; 25/03/2005 a las 12:50
  #7 (permalink)  
Antiguo 28/03/2005, 03:40
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 4 meses
Puntos: 102
Mil gracias por las molestias y tu tiempo Eternal_Idol... te cuento que sigo en un bloqueo mental.

Ya he hecho los clásicos (creo ) ejercicios de conversión de numeros de decimal a binario, octal, hexadecimal... también hice un programa para resolver algunos problemas de cálculo (el también problema de máximos y mínimos)... e intente hacer algo como el juego de la viborita que vaz controlando y comiendo cosillas sin chocar en las paredes.. solo pude conseguir controlar la viborilla esa... pero me dí cuenta que para que vaya caminando sola debo de hacer uso de funciones que manejan tiempo... y ... por ahora no...

Entonces... alguna idea???... cosillas sencillas que se les hayan presentado por ahí?. Gracias de antemano.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #8 (permalink)  
Antiguo 28/03/2005, 07:45
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
De nadas y no hay problema

Podrías hacer algunas programas con archivos (leer y escribir) de texto y binarios, algo con listas enlazadas ... ¿Estas con C++ o solo con C?
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 28/03/2005, 18:07
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 4 meses
Puntos: 102
solo C (que no se nada? )... soy básico... y, así "de lejitos" se oye complicado... pero si crees que puedo hacer... venga!!!.. namás aclarame más el problema .

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #10 (permalink)  
Antiguo 29/03/2005, 17:48
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Hola. Ese eternal idol, siempre ayudando...que bien, pero ya regrese.......
Lo que te plantea eternal idol es que empieces a leer desde archivos(archivo.txt, .dat, .x).
Es algo que al principio si parece algo extraño, pero con practica y practica las vas a dominar.......
Las funciones principales para manejar archivos son:
fopen fread, fwrite, fscanf, fprintf, fgetc, fgets.....
De hecho en las faqs de programancion esta un pequeño tutorial para leer y escribir en un archivo....
Intentalo, eso te dara mas entendimiento del lenguaje...


Saludos
  #11 (permalink)  
Antiguo 30/03/2005, 00:36
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Como bien dice Instru uno de los problemas que planteaba en el post anterior era sobre manejo de archivos.

La pregunta sobre si estas con C++ o solo C es para saber si estas viendo el paradigma de orientacion a objetos, ya que es un enfoque totalmente diferente y se pueden hacer otros ejercicios.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #12 (permalink)  
Antiguo 30/03/2005, 15:21
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 4 meses
Puntos: 102
... pués no... solo estoy viendo C. Ya heché un vistazo a las FAQ... y ok, no hay que temerle a manejar archivos.... pero repito que solo estoy aprendiendo y esta cuestión es para prácticar... vaya, necesito ejercicios prácticos... algún tipo de problema aplicativo... pero no se me ocurre nada (me excuso en la misma inexperiencia ).

Entonces... algúna situación/problema???... Gracias!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #13 (permalink)  
Antiguo 31/03/2005, 08:35
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
mmmm.
Tengo un libro con muchos ejercicios, pero mira, para aprender bien bien un lenguaje, tienes que realizar un proyecto considerable.
Mientras programas van ir saliendo dudas y pues ahgi preguntas o buscas informacion....

Para tu nivel te recomendaria lo siguiente.
Si ya sabes algo de punteros, investiga lo que es una lista enlazada y construye una simple. Las listas enlazadas o vinculadas son muy utiles y realmente aprendes mucho sobre punteros, loops, condiciones y potenciales del lenguaje.

Podrias intentar hacer una calculadora en DOS, eso es mas sencillo.

O los famosos ejercicios donde escribes cosas al revez........

En las faqs hay algunas paginas de tutoriales y codigos en los que te puedes hacer referencia.

Saludos
  #14 (permalink)  
Antiguo 25/10/2010, 20:32
 
Fecha de Ingreso: octubre-2010
Mensajes: 1
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Ejercicios para C (principiante)

quisiera que me ayudaran con estos ejercicios pues no los entiendo y tiene que ser en lenguaje c necesito tenerlos listo para hoy

1) Elabore un programa en Lenguaje C, que calcule el aumento de sueldo de un trabajador, conociendo del mismo, su nombre, tipo de trabajador, su sueldo y la cantidad de hijos que tiene. El porcentaje de aumento del sueldo viene dado por el tipo de trabajador que es:
Tipo de trabajador
‘V’ 10%
‘G’ 15%
‘E’ 20%
‘O’ 30%
Adicionalmente se le paga una prima por cada hijo la cual es conocida y la misma para todos.
2) El colegio “Mi angelito” desea calcular el monto a pagar por inscripción del nuevo año escolar, para las familias con hijos en el colegio. Para ello se conoce el número de hijos que tiene la familia en el colegio, el monto de matricula por niño, el monto de la mensualidad del mes de septiembre por niño y el monto de la sociedad de padres. Elabore un programa en Lenguaje C que calcule el total a pagar por la familia, si la sociedad de padres se cobra una vez por familiar y si se otorga un descuento por la cantidad de hijos en el colegio que viene dado por la siguiente tabla.

Cantidad de hijos Descuento

2 niños 10%
3 niños 15%
> 3 niños 20%

3) El Banco para el Pueblo está próximo a abrir sus puertas, por esta razón necesita con suma urgencia la elaboración y mantenimiento de un programa que le permita mantener los saldos y movimientos de las cuentas que manejará el banco.
El banco conoce para cada cuenta a aperturar, el número de cuenta, la cédula del cliente, el nombre del cliente, el tipo de cuenta (1- Ahorro, 2- Corriente, 3 – Fal y 4 – Préstamo) y por último, el saldo en cuenta.
Se desea elaborar un programa en Lenguaje C, el cual permita leer los datos del cliente, calcular el interés y mostrar la siguiente información:
Para cada cliente:
1. Cedula, nombre y tipo de cuenta
2. Monto a pagar de interés, dado por la siguiente tabla
a. Para cuentas tipo 1 (ahorro) el 10%
b. Para cuentas tipo 2 (corriente) el 8%
c. Para cuentas tipo 3 (fal) el 12%
d. Para cuentas tipo 4 (prestamos) 0%
3. Saldo actual
4. Saldo nuevo con los intereses

Para el banco:
1. Total clientes por cada tipo de cuenta
2. Total monto interés pagado
3. Total saldos nuevos en el banco
4. Cliente con mayor saldo nuevo
5. Cliente con menor saldo nuevo


4) El Seniat ha establecido un nuevo impuesto a las compras de productos, el cual está determinado por el tipo de artículo a facturar, según la siguiente tabla:

Tipo de producto Tasa impuesto
Exclusivo 30%
Lujo 20%
Económico 10%
Accesible 5%

Para cada compra se conoce, monto de la compra y el tipo de producto.
Se desea elaborar un programa en Lenguaje C que nos permita para cada compra realizada, calcular el impuesto que deberá cancelar el cliente y el monto total de la factura, a la cual se le realiza un descuento, cuyo porcentaje es conocido.

5) Censo

Se tiene la información del censo realizado por el gobierno en el año 2001. El censo fue realizado por municipios y para los municipios censados se conoce la siguiente información: nombre del municipio, cantidad de ancianos hombres, cantidad de ancianos mujeres, cantidad de hombres adultos, cantidad de mujeres adultos, cantidad de niños y cantidad de niñas. Se desea generar un programa en Lenguaje C que permita procesar la información del censo y adicionalmente, calcular el monto por educación para todos los niños en el municipio y en Venezuela, sabiendo que cada niño cuesta un monto de prima definida por la siguiente tabla:

Si la cantidad de niños y niñas es
1. Cantidad > 0 y cantidad < 100000 prima por niño 30 bs
2. Cantidad >=100000 y cantidad < 200000 prima por niño 25 bs
3. Cantidad >=200000 y cantidad < 500000 prima por niño 20 bs
4. Cantidad >= 500000 prima por niño 10 bs

Se desea elaborar un programa en Lenguaje C, el cual permita leer los datos del municipio, y mostrar la siguiente información:

Para cada municipio:
1. nombre del municipio, cantidad de ancianos hombres, cantidad de ancianos mujeres, cantidad de hombres adultos, cantidad de mujeres adultos, cantidad de niños y cantidad de niñas.
2. Cantidad de adultos en el municipio, cantidad de ancianos y cantidad de niños.
3. Monto de prima por mantenimiento de los niños.

Para el país:
1. Total adultos, ancianos y niños en el país.
2. Total de personas que viven en el país.
3. Total monto de prima por niños en el país.
4. Municipio con mayor personas
5. Municipio con menor personas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:09.