/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Ejercicios de Programación
Ir a página 1, 2, 3, 4, 5, 6, 7  Siguiente
 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Sorancio



Registrado: 29 May 2009
Mensajes: 1157
Ubicación: España

MensajePublicado: 23/07/2012 11:36 am
Título: Ejercicios de Programación

Con lo acordado, escribiré una série de ejercicios para esta semana. Los ordenaré por nivel de dificultad en 3 categorías: A, B y C siendo estos los C más complicados. Por supuesto, son realmente simples, pero a complejidad de conocimientos.

PD: El lenguaje utilizado para las soluciones es C.

Ahora explico como funciona cada ejercicio. El ejercicio se mostrará como un enunciado muy simple con un problema. El ejercicio podrá contener una entrada (aquellos datos que hay en el programa) y una salida (qué tiene que salir con esos datos).

A.

1. Se dice que la secuencia de Fibonacci es la secuencia de la vida porque coincide con la cantidad de seres y su crecimiento en una especie. La secuencia se define como que un número cualquiera es la suma de los dos anteriores siendo f(0) = 0 y f(1) = 1. Entonces, f(2) = f(1) + f(0) = 1 + 0 = 1. f(3) = f(2) + f(1) = 1 + 1 = 2. Etc.

Encuentra el primer dígito de la serie fibonacci de 5 cifras.

Mejor si se hace de forma recursiva.

2. Se dice que un año es bisiesto cuando es divisible por 4 pero no es divisible por 100. Sabemos que los extraterrestres llegaron a la Tierra en 1491 en forma de humano con apellido de órgano.

¿Cuantos años bisiestos hay entre 1491 y 2012, el fin del mundo?

3. Una pera pesa alrededor de 150g. Tenemos un fichero en que cada línea tiene una número N entre 0 y 1000.

Para cada cantidad de peras tienes que calcular cuantos kilos (séase 1Kg = 1000g) pesaría la cesta.

Séase la entrada:
Código:
1
5
10


La salida del programa debe ser:
Código:
1) 0.150Kg
2) 0.750Kg
3) 1.5Kg


B.
1. Tenemos una pelota de ping pong de 2.8g. Teniendo K líneas en un fichero en que cada línea es un número entero con la distancia en metros que tiene que recorrer la pelota....

Calcula: teniendo un ángulo de 35 grados la fuerza, en newtons, de cada lanzamiento sin tener en cuenta el rozamiento del viento (sólo la gravedad terrestre de 9.8m/s^2).

Entrada:

Código:

5
28
200
512
2048
9995
1000000
16
0
-5
45
28
12225


2. Tenemos un fichero CSV y usamos de separador de columnas la coma y de filas el salto de línea. Mediante un fichero de entrada que tendrá K líneas y cada línea tendrá una cantidad de números variable.

Encuentra de cada fila el mayor y el menor número, y luego del conjunto global procesando sólo una vez el fichero.


Código:
1,2,3
4,2,3
1,1,1
2,1,1


Salida:

Código:
Max: 3, Min:  1
Min:  2, Max: 4
No existe ni mayor ni menor.
Max: 2, No existe menor.

El mayor global es 4 y el menor global es 1.


C.

1. Tenemos un fichero cuyo contenido son K líneas. Cada línea tiene una ecuación de la forma ax + by = c.

Encuentra todas las soluciones al sistema de K ecuaciones.

Entrada:

Código:

5x + 2y = 4
5x + 3y = 1
4x + 8y = 1x + 2


2.
Ejercicio 2 escribió:

/**
* Ejercicio C.2 de www.aprendeprogramacion.net
**********************************************
* Enunciado:
* Una empresa nos ha contratado para el desarrollo
* de un sistema de seguridad por roles y el sistema
* de testeo de éste.
*
* Estos sistemas trabajan sobre "roles" que son
* agrupaciones de funciones que un usuario puede
* realizar.
*
* Las características de los roles son:
*
* 1) Un rol puede heredar funciones de otros.
* Por ejemplo: el rol ADMINISTRADOR heredará
* todas las funciones del rol USUARIO.
*
* 2) Un rol puede tener múltiples funciones.
*
* El programa a realizar constará de tres entradas:
*
* 1) Un menú de acciones en fichero (menu.dat)
* en que cada línea es un ítem
* del menú, separado por dos puntos de los roles que
* pueden acceder, por ejemplo:
*
* Seguridad: GESTOR DE SEGURIDAD
*
* 2) Definición de roles en otro fichero (roles.dat)
* donde cada línea es un rol. Despues
* del nombre del rol pueden venir dos puntos y seguido
* qué roles hereda. Por ejemplo:
*
* ADMINISTRADOR: GESTOR DE SEGURIDAD; GESTOR DE CONTENIDOS
*
* 3) Definición de los usarios en otro fichero (users.dat)
* en que cada línea tiene el siguiente formato:
*
* usuario/contraseña rol1; rol2; rol3
*
* Por ejemplo:
*
* kevin/mas GESTOR DE SEGURIDAD; GESTOR DE CONTENIDOS
*
* AVISO: Ni el usuario ni la contraseña pueden contener espacios.
*
* El programa deberá cargar en el inicio los tres ficheros
* y pedir los datos de acceso de un usuario cualquiera del
* fichero 3.
*
* En caso de un login correcto, se le mostrará el menú (indexado de 1 a N), e
* intentará acceder a las entradas. El programa deberá mostrar una
* T en caso de que se pueda entrar y una F en caso de que no.
*
* AVISO: El menú nunca se debe perder de vista.
*
* El programa terminará cuando el usuario presione exit (el menú 0).
* Ejemplo de menú por pantalla:
*
* 0. Salir
* 1. Redes
* 2. Usuarios
* 3. Aplicaciones
* 4. Dispositivos
*
* AVISO: Está prohibido utilizar la familia de funciones [f/s/vs/...]canf.
*****************************************************************************

_________________
Mi página web (en inglés):


Ultima edición por Sorancio el 11/09/2012 2:51 am; editado 4 veces
Volver arriba
Sorancio



Registrado: 29 May 2009
Mensajes: 1157
Ubicación: España

MensajePublicado: 23/07/2012 1:32 pm
Título:

Solución A.1
Código:
/* 1. Se dice que la secuencia de Fibonacci es la secuencia de la vida
 * porque coincide con la cantidad de seres y su crecimiento en una especie.
 * La secuencia se define como que un número cualquiera es la suma de los
 * dos anteriores siendo f(0) = 0 y f(1) = 1. Entonces,
 * f(2) = f(1) + f(0) = 1 + 0 = 1.
 * f(3) = f(2) + f(1) = 1 + 1 = 2.
 * Etc.
 *
 * Encuentra el primer dígito de la serie fibonacci de 3 cifras.
 *
 * Copyright(c) Kevin Mas Ruiz <kmr@conscell.net>
 * Puedes usar libremente una copia de este código.
 */

#include <stdio.h>

typedef unsigned int uint;
typedef unsigned long natural;

#define DIGIT_COUNT (5)

/* Calcula la cantidad de dígitos que hay en un número N
 * de forma recursiva.
 */
natural digitCount(const natural number) {
    if (number > 9) {
        return digitCount(number / 10) + 1;
    } else {
        return 1;
    }
}

/* Calcula el elemento F(K) de la serie. Es optimizable
 * usando la técnicia MEMO pero al ser un ejercicio
 * de aprendizaje sólo he implementado el algoritmo.
 */
natural fibonacci(const natural k) {
    if (k < 2) {
        return 1;
    } else {
        return fibonacci(k - 1) + fibonacci(k - 2);
    }
}

int main(void) {
    uint i = 2;
    uint isDone = 0;
    uint hasResult = 1;
    natural result = 0;

    while (!isDone) {
        const natural F_i = fibonacci(i);
        const uint dgCount = digitCount(F_i);
        if (dgCount == DIGIT_COUNT) {
            isDone = 1;
            result = F_i;
        } else if (dgCount > DIGIT_COUNT) { /* Y sí no existe un número que cumpla la condición?! */
            isDone = 1;
            hasResult = 0;
        }
        i++;
    }
    if (hasResult) {
        printf("El primer numero de fibonacci de %d cifras es: %lu\n", DIGIT_COUNT, result);
    } else {
        printf("No hay ningun numero de fibonacci de %d cifras.\n", DIGIT_COUNT);
    }
    return 0;
}


El número es 10946.
_________________
Mi página web (en inglés):
Volver arriba
Masakre



Registrado: 06 Jun 2012
Mensajes: 245

MensajePublicado: 23/07/2012 5:07 pm
Título:

* No sé lo que es "forma recursiva", pero me parece que hace referencia a la cualidad que tiene un código de ser flexible (leves modificaciones para grandes cambios en los resultados). O en todo caso, quizás se refiera a dar doble sentido a las funciones, de modo que, con una sola se obtengan resultados provenientes de distintas instrucciones.

* El siguiente código acabo de hacerlo en Visual Studio (perdón por eso):
Código:

#include "stdafx.h"
#include <iostream>
#define CIFRAS 5
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
   long int r=0, s=1, fibo=0, limit=1; /* Valores con que inicia la serie (incrementan radicalmente). */
   for(int i=1; i<CIFRAS; i++) limit*=10;
   cout<<"Calculando el primer nro Fibonacci de "<<CIFRAS<<" cifras.\n\n\t";
   while(fibo < limit){
      fibo = r+s;
      r=s; s=fibo; /* El 2do sumando pasa a ser el 1ro; y, el nro recién calculado, el 2do. */
   }system("pause"); system("color 0a");
   cout<<"\n\nEl primer nro Fibonacci de "<<CIFRAS<<" cifras:\t"<<fibo<<"\n\n\t"; system("pause");
   return 0;
}


** Me gustaría saber si es conveniente usar FOR para calcular potencias. Lo hice para no integrar "math.h".

** Mi programa muestra 10946 como resultado.
________________________

Es imposible que el código que usted ha posteado esté mal (y no lo está, porque acabo de ejecutar el código), de todos modos, voy a preguntarle acerca de esta pequeña duda que me ha surgido:

Código:
natural fibonacci(const natural k) {
    if (k < 2) {
        return 1;
    } else {
        return fibonacci(k - 1) + fibonacci(k - 2);
    }
}

Haciendo un leve seguimiento de novato puedo ver que para calcular el Fibonacci de un número, esta función lo va descomponiendo en los números anteriores (que vienen a ser otros Fibonaccis), excepto para cuando k<2.
En esos casos se tiene:
fibonacci(1) = 1
fibonacci(0) = 1
¿Pero no es que f(0) debería ser 0? (Según el enunciado).
Pareciera que no interfiere porque empieza calculando desde i=2 (es decir, desde fibonacci(2)); sin embargo, el i aumenta y los siguientes números considerarán a f(0) como 1 Rolling Eyes .
Volver arriba
Masakre



Registrado: 06 Jun 2012
Mensajes: 245

MensajePublicado: 23/07/2012 5:28 pm
Título:

Bueno, éste es mi desarrollo para el A2:

Código:
/* Ramos Suyón en FirstWeek[SorancioClass] (A2).
Se dice que un año es bisiesto cuando es divisible por 4 pero no es divisible por 100.
Sabemos que los extraterrestres llegaron a la Tierra en 1491 en forma de humano con apellido de órgano.
¿Cuantos años bisiestos hay entre 1491 y 2012, el fin del mundo?
*/
#include "stdafx.h"
#include <iostream>
using namespace std;
#define MIN 1491 // Anios bisiestos entre este anio,
#define MAX 2012 // y este otro.
int _tmain(int argc, _TCHAR* argv[]){int BisCont=0, firstMult=MIN;
   while(firstMult%4!=0)firstMult++; // Primer anio divisible por 4 (>= MIN).
   for(int anio=firstMult;anio<MAX;anio+=4)
      if(anio%100 != 0) BisCont++;
   cout<<"Entre los anios "<<MIN<<" y "<<MAX<<" se encontraron "<<BisCont<<" anios bisiestos.\n\n\t";
   system("pause"); return 0;
}


** ¿Está bien así? Creo que si publico juntas mis soluciones (contando con mis pequeñas preguntas) en un único post, éste quedaría un tanto extenso.
Volver arriba
Sorancio



Registrado: 29 May 2009
Mensajes: 1157
Ubicación: España

MensajePublicado: 23/07/2012 10:48 pm
Título:

Masakre escribió:
* No sé lo que es "forma recursiva", pero me parece que hace referencia a la cualidad que tiene un código de ser flexible (leves modificaciones para grandes cambios en los resultados). O en todo caso, quizás se refiera a dar doble sentido a las funciones, de modo que, con una sola se obtengan resultados provenientes de distintas instrucciones.


La recursividad es una definición matemática que dice que algo está definido por ese algo. Un ejemplo claro es el idioma que podemos analizarlo con el mismo idioma.

Si te fijas, tanto digitCount como fibonacci son únicamente llamadas a la misma función y algun que otro if. Eso es recursividad.

* Código *

El código está bien, pero deberías limpiarlo un poquito para que otros podamos compiarlo xD. En vez de _tmain utiliza la main que es el nombre estándar.

Intenta rehacerlo con recursividad sin mirar el mio.

Masakre escribió:
Es imposible que el código que usted ha posteado esté mal (y no lo está, porque acabo de ejecutar el código), de todos modos, voy a preguntarle acerca de esta pequeña duda que me ha surgido:

Código:
natural fibonacci(const natural k) {
    if (k < 2) {
        return 1;
    } else {
        return fibonacci(k - 1) + fibonacci(k - 2);
    }
}

Haciendo un leve seguimiento de novato puedo ver que para calcular el Fibonacci de un número, esta función lo va descomponiendo en los números anteriores (que vienen a ser otros Fibonaccis), excepto para cuando k<2.
En esos casos se tiene:
fibonacci(1) = 1
fibonacci(0) = 1
¿Pero no es que f(0) debería ser 0? (Según el enunciado).
Pareciera que no interfiere porque empieza calculando desde i=2 (es decir, desde fibonacci(2)); sin embargo, el i aumenta y los siguientes números considerarán a f(0) como 1 :roll: .

Sí, f(0) = 0 en la serie de fibonacci. Pero para simplificar he hecho "trampa". He movido mi secuencia a la derecha para que MI_SECUENCIA(0) = F(1) ya que el 0 no se considera un número natural para mucha gente. Entonces sí, mi "fibonacci" empieza desde 1 :). Es un buen detalle, muy bien por haberlo visto.

Más tarde (bastante más tarde) corregiré el A2 y publicaré yo una solución.
_________________
Mi página web (en inglés):
Volver arriba
leosan



Registrado: 19 Abr 2012
Mensajes: 730
Ubicación: GRAN CANARIA

MensajePublicado: 24/07/2012 4:42 am
Título:

Otra Solución A.1
Como ya has puesto una solución con recursividad,pongo otra sin ella ...eso sí, yo considero el "0" como parte de los naturales.En vez de un while uso un for:
Código:

#include<stdio.h>
main()
{
int i, anterior, posterior ;
anterior = 0;
posterior = 1;
printf("\n");
for ( ; ; )
{
   
    {
        anterior = anterior + posterior;
        posterior = anterior - posterior;
        if (anterior>10000)
            {
                printf("%d \t", anterior);
                break;
            }
    }
}
return (0);
}

Y para "enriquecer" el ejercicio dejo el código para calcular "n" números de las sucesión:
Código:


#include<stdio.h>
main()
{
    int i, anterior, posterior, lim ;
    system("color 17");

    while (lim!=0)
        {
            printf(" Introdusca cuantos numeros  desea calcular de la secuencia (0 para salir): \n\n");
            scanf("%d", &lim);
            anterior = 0;
            posterior = 1;
            printf("\n");
            for (i = 0 ; i < lim ; i++)
                {
                    printf("%d \t", anterior);
                {
                anterior = anterior + posterior;
            posterior = anterior - posterior;
        }
    }puts("\n");
   
 }

    return (0);
}

Por cierto Sorancio tu codigo es una "pasada" .... EN EL BUEN SENTIDO,EHHHH....APRENDO EN CADA LETRA QUE PONES....Wink Wink Wink
Volver arriba
leosan



Registrado: 19 Abr 2012
Mensajes: 730
Ubicación: GRAN CANARIA

MensajePublicado: 24/07/2012 6:27 am
Título:

Otra Solución A.1
Me he animado con la función recursividad; para que no sea el mismo código he cambiado el procedimiento para determinar si es de cinco cifras, o sea mayor de 10000 ....¿Cuál seria la diferencia en la eficiencia entre ambos códigos?
Código:


#include <stdio.h>
long int fibonacci(long int  k);
int main(void)
{
    register int i;
    for ( i=0; ;i++ )
    {
        if (fibonacci(i)>10000)
            {
                break;
            }
    }
        printf ("%ld",fibonacci(i));
    return 0;
}

 long int fibonacci(long int  k)
{
    if (k < 2)
        {
            return 1;
        }
    else
        {
    return fibonacci(k - 1) + fibonacci(k - 2);
        }
}

...Nuevamente, gracias por molestarte en los que empezamos a programar.....
Volver arriba
leosan



Registrado: 19 Abr 2012
Mensajes: 730
Ubicación: GRAN CANARIA

MensajePublicado: 24/07/2012 6:48 am
Título:

Este es mi código en C para el A2:
Código:

#include <stdio.h>
 main()
{
int i,bisiestos=0;
for ( i=1492;i<=2012 ;i+=4 )
if  (i%4 ==0 && i%100!=0 ||  (i%400==0))
    bisiestos++;
printf ("%d",bisiestos);
return 0;
}

Me salen 127.¿Es así?.....Creo que sería bueno poner siempre las respuestas, por si fallamos corregir errores, sobre todo si los hacemos unos en C y otros en C++.
Aprovecho para poner el código que dice si un año es o no bisiesto:
Código:

#include <stdio.h>
int main()
{
int a;
puts ("Introduzca el a\xA4o: " );
scanf ("%d",&a);
if  (a%4 ==0 && a%100!=0 ||  (a%400==0))
puts ("\nEl a\xA4o es bisiesto");
else
if (a%400!=0)
puts ("\nEl a\xA4o No es bisiesto");
return 0;
}

Por cierto, el significado de "\xA4" es la "ñ" en ascii hexadecimal.
Volver arriba
Masakre



Registrado: 06 Jun 2012
Mensajes: 245

MensajePublicado: 24/07/2012 10:46 am
Título:

Sorancio escribió:
La recursividad es una definición matemática que dice que algo está definido por ese algo. Un ejemplo claro es el idioma que podemos analizarlo con el mismo idioma.

Estaba creyendo que algo "recursivo" era algo que ahorraba recursos del ordenador. Gracias por la aclaración.
En Wikipedia dice que más correcto sería usar recurrencia, pero que en el campo de la informática se ha extendido demasiado como para poder cambiarlo Laughing .

Sorancio escribió:
Si te fijas, tanto digitCount como fibonacci son únicamente llamadas a la misma función y algun que otro if. Eso es recursividad.

No entiendo muy bien esa manera de "conteo de dígitos". Es decir, me parece un poco extraño contar dígitos mediante la función fibonacci (como que no es muy natural).

Sorancio escribió:
El código está bien, pero deberías limpiarlo un poquito para que otros podamos compiarlo xD. En vez de _tmain utiliza la main que es el nombre estándar.

¿Podría decirme los otros detalles? Además de cambiar esa partecita, tampoco es necesario el stdafx.h me parece.
Y también tengo una duda sobre el "using namespace std;"
. . . ¿Será que todo lo necesario para el Visual es innecesario realmente?

Una vez me parece haber visto que rir no llamaba a toda una librería, sino que específicamente sólo a cin y cout.
(Algo como std::cin>>)

Sorancio escribió:
Más tarde (bastante más tarde) corregiré el A2 y publicaré yo una solución.

¿Es usted Kevin Mas Ruiz?
Ha de ser tan bueno que estaba creyendo que el código lo había sacado de algún libro jeje.

Cita:
typedef unsigned int uint;
typedef unsigned long natural;

Con esto, usted define un nuevo tipo (o class) en base a otros tipos de datos predefinidos, ¿verdad? ¿A fin de usar términos del problema en vez de términos que más relación tengan con los procesos internos del ordenador? ¿Y qué vendrían a ser los objetos en este caso?

Gracias nuevamente y quería comentarle también que, no tengo ni la más mínima idea de cómo leer datos de un archivo externo al código (en el enunciado se habla de un fichero de N líneas), lo que me ha impedido continuar con los otros ejercicios.
Volver arriba
Masakre



Registrado: 06 Jun 2012
Mensajes: 245

MensajePublicado: 24/07/2012 10:53 am
Título:

leosan escribió:
Este es mi código en C para el A2:
Código:
[...]
if  (i%4 ==0 && i%100!=0 ||  (i%400==0))
[...]


Yo hice mi código basado únicamente en lo que dice el enunciado, pero me parece que usted tiene razón. Es decir, respecto a la determinación de si un año es bisiesto o no. Creo entonces que, un año puede ser bisiesto al ser divisible por 4 y no por 100; o al ser divisible por 400.

leosan escribió:
Por cierto, el significado de "\xA4" es la "ñ" en ascii hexadecimal.

Grandioso. Ya pronto lo estaré probando (en C++ debería dar también jeje).
Y, ¿sabe cómo es para lo de las tildes?

Gracias.
Volver arriba
leosan



Registrado: 19 Abr 2012
Mensajes: 730
Ubicación: GRAN CANARIA

MensajePublicado: 24/07/2012 11:22 am
Título:

Masakre escribió:

Y, ¿sabe cómo es para lo de las tildes?

Cita:

é.....\82
á....\A0
í....\A1
ó....\A2
ú....\A3
¡....\AD
¿....\A8
ejemplo:numero con acento es n\A3mero.¡ ¡ ¡ ¡ ...Aunque al escribir el código queda "raro" es un gustazo verlo correr con acentos,ñ ,etc.

Y todos en, por ejemplo:

Si usas el modo hexadecimal van precedidos por "\". Saludos.
PVery Happy: Tengo el mismo problema que tú en el tema de archivos, justo estoy empezando con ese tema.Y encima me estaba viendo antes los archivos en XML....me desparramo intentando abarcar tanto...¡ ¡ ¡ ¡ ¡...Es que "nuestros" maestros son muy exigentes... Laughing Laughing Laughing Laughing Laughing Laughing Laughing
Volver arriba
Sorancio



Registrado: 29 May 2009
Mensajes: 1157
Ubicación: España

MensajePublicado: 24/07/2012 12:34 pm
Título:

A ver, contestaré poco a poco.

leosan escribió:
no sea el mismo código he cambiado el procedimiento para determinar si es de cinco cifras, o sea mayor de 10000 ....¿Cuál seria la diferencia en la eficiencia entre ambos códigos?


El tuyo es más eficiente aunque la comparación debería ser mayor o igual porque 10000 tiene también 5 cifras. El resultado será idéntico, pero tampoco estoy intentando hacer un código óptimo, sino fácil de entender.

La gracia con estos ejercicios y mis soluciones (que son lejos de ser perfectas a propósito) es que vosotros mismos podáis coger ese código y mejorarlo, aprendiendo cosas nuevas.

Ahora, entre el código que has publicado en ese mensaje y el mio, el mio es más eficiente porque calculo menos veces fibonacci, que es un cálculo mucho más complejo que el cálculo de dígitos de un número :).

Solución A2
Código:
#include <stdio.h>

#define START   (1492)
#define END     (2012)

int main(void) {
    unsigned int i = START;
    unsigned int count = 0;
    while (i <= END) {
        if (((i % 4) == 0 && (i % 100) != 0) || (i % 400 == 0)) {
            count++;
        }
        i += 4;
    }
    printf("Hay %d años bisiestos entre %d y %d", count, START, END);
    return 0;
}


Propongo un reto: a ver quien lo hace de forma recursiva :).

Masakre escribió:
No entiendo muy bien esa manera de "conteo de dígitos". Es decir, me parece un poco extraño contar dígitos mediante la función fibonacci (como que no es muy natural).


El conteo no se hace sobre fibonacci. Tengamos una función F(x) que da la cantidad de dígitos de un número x que pertenece a N.

Sabemos que F(x) sea x < 10 = 1 siempre. Todos los números naturales menores a 10 tienen un dígito. También sabemos que F(x) = F(x * 10) - 1. Eso significa que un número X tiene un dígito menos que X * 10. Teniendo esa relación tenemos que:

Código:
F(x) = F(x / 10) + 1;


Que es lo que hace el código de digitCount :).

Masakre escribió:
¿Podría decirme los otros detalles? Además de cambiar esa partecita, tampoco es necesario el stdafx.h me parece.
Y también tengo una duda sobre el "using namespace std;"
. . . ¿Será que todo lo necesario para el Visual es innecesario realmente?


Uy uy. Muchas cosas que hagas en cualquier IDE privativo son innecesarias. De forma estándar la función principal se llama main (no t_main o como sea) y la cabecera stdfuck tampoco hace falta.

Sobre lo del using, es una construcción de C++. Los namespace son secciones de código que tienen un prefijo (como por ejemplo std). Por eso a veces verás std::cin y no cin a secas. El using lo que hace es coger un elemento del namespace (o todo completo añadiendo la palabra namespace como haces tú) en el namespace actual del programa y así te ahorras escribir el prefijo.

Masakre escribió:

¿Es usted Kevin Mas Ruiz?
Ha de ser tan bueno que estaba creyendo que el código lo había sacado de algún libro jeje.


Sí, soy yo. Y el código no es tan bueno :) ya veréis código bueno a medida que avancéis. Y lo mejor es que será vuestro.

Masakre escribió:

Con esto, usted define un nuevo tipo (o class) en base a otros tipos de datos predefinidos, ¿verdad? ¿A fin de usar términos del problema en vez de términos que más relación tengan con los procesos internos del ordenador? ¿Y qué vendrían a ser los objetos en este caso?


Esto es C, es más rudimentario, aquí no hay clases :). Básicamente typedef define un alias para un tipo que ya existe. En este caso utilizo uint y natural porque así el código es más legible matemáticamente.

Masakre escribió:

Gracias nuevamente y quería comentarle también que, no tengo ni la más mínima idea de cómo leer datos de un archivo externo al código (en el enunciado se habla de un fichero de N líneas), lo que me ha impedido continuar con los otros ejercicios.


Te recomiendo buscar información sobre la clase istream :).



Uy, ha salido de la nada. Esa página es tu nueva amiga. Ahí viene toda la referencia de C++ decentemente explicada, tiene un tutorial y ejemplos. En inglés, eso sí.

Sobre el problema de las tildes que sepáis que sólo os pasa a los que programáis en Windows. Yo en mi Fedora puedo poner en el propio código C cualquier carácter Unicode y se me muestra bien en consola (me siento poderoso). Ya os haré una imagen para mañana jajajaja.

leosan escribió:

Tengo el mismo problema que tú en el tema de archivos, justo estoy empezando con ese tema.Y encima me estaba viendo antes los archivos en XML....me desparramo intentando abarcar tanto...¡ ¡ ¡ ¡ ¡...Es que "nuestros" maestros son muy exigentes...


¿Has intentado procesar un archivo XML desde 0? Jajaja eso es una locura. XML es demasiado complejo porque tiene que ser agnóstico a la codificación de carácteres. Hay librerías como libxml que ya hacen eso por tí :).

Tú usando C, sobre el tema de ficheros deberías mirar las funciones fgets y fopen :).

Mucha suerte!

PD: No me habléis de usted, por favor, jajajaja.
_________________
Mi página web (en inglés):
Volver arriba
leosan



Registrado: 19 Abr 2012
Mensajes: 730
Ubicación: GRAN CANARIA

MensajePublicado: 24/07/2012 1:41 pm
Título:

Masakre escribió:

Y, ¿sabe cómo es para lo de las tildes?


Cita:

Corrijo lo anterior:
é.....\x82
á....\xA0
í....\xA1
ó....\xA2
ú....\xA3
¡....\xAD
¿....\xA8
ejemplo:numero con acento es n\xA3mero.¡ ¡ ¡ ¡ ...Aunque al escribir el código queda "raro" es un gustazo verlo correr con acentos,ñ ,etc.

Y todos en, por ejemplo:

Si usas el modo hexadecimal van precedidos por "\x". Saludos.

Me pondré desde que encuentre tiempo como una moto con el tema de ficheros. Muchas gracias Sorancio, por tu tiempo y paciencia.[/b]
Volver arriba
leosan



Registrado: 19 Abr 2012
Mensajes: 730
Ubicación: GRAN CANARIA

MensajePublicado: 25/07/2012 4:01 am
Título:

Cita:

Cree un fichero de texto "texto1" con los valores 1 ,5 y 10 y ya luego a leer:

Código:

#include <stdio.h>
main()
{
    float numero;
    FILE* fichero;
    char nombre[80] ="C:\\CONOCI\\PROGRAMACION\\CodeBlocks\\texto1.txt";
char linea[81];
    fichero = fopen(nombre, "rt");
    if (fichero == NULL)
        {
        printf("No existe el fichero!\n");
        exit(1);
        }
    while (! feof(fichero)) {
        fgets(linea, 80, fichero);
        numero = atoi (linea);
       printf ("%1.3f Kg\n",numero*150/1000);
    }
    fclose(fichero);
}

Siendo la salida la esperada: 0.150 Kg , 0.750 Kg y 1.500 Kg .
Ahora me queda trabajar la creación y grabación del fichero con "W" y "r" en lugar de hacerlo directamente.
Tampoco me gusta la creacion del fichero con char nombre[80] y char nombre[81], así que seguiré con ello.
Volver arriba
leosan



Registrado: 19 Abr 2012
Mensajes: 730
Ubicación: GRAN CANARIA

MensajePublicado: 25/07/2012 5:08 am
Título: Re: Ejercicios de Programación

B.
Calcula: teniendo un ángulo de 35 grados la fuerza, en newtons, de cada lanzamiento sin tener en cuenta el rozamiento del viento (sólo la gravedad terrestre de 9.8m/s^2).
Cita:

DUDA.
¿Calcular la fuerza inicial o la velocidad inicial del tiro?
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 7Todas las horas están en GMT - 8 Horas
Ir a página 1, 2, 3, 4, 5, 6, 7  Siguiente

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com