Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rir3760

#1361
Programación C/C++ / Re: Serie Fibonacci C++
16 Enero 2012, 15:13 PM
Para empezar falta realizar la validación del numero introducido por el usuario.

El programa no funciona correctamente ya que en cada iteracion del bucle calculas el siguiente numero de la serie fibonacci, ello solo debes hacerlo cuando alcances ese numero (al imprimir los números entre este y el anterior).

El programa corregido:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   long num;
   long i;
   long a;
   long b;
   long aux;
   
   scanf("%ld", &num);
   
   a = 3;
   b = 5;
   for (i = 4; i < num; i++)
      if (i != b)
         printf(" %ld", i);
      else {
         aux = a + b;
         a = b;
         b = aux;
      }
   putchar('\n');
   
   return EXIT_SUCCESS;
}


Un saludo
#1362
Todo bien salvo un detalle: ya que se trata de una frase se deben ignorar ciertos caracteres y por ello primero debemos verificar si se trata de un carácter alfabético. Si es así seguimos con la comparación para saber si es una vocal o no. Mas o menos así:
Por cada caracter hasta encontrar el '.'
   Si el carácter es alfabético
      Si el carácter es una vocal
         Incrementamos el contador de vocales
      Caso contrario
         Incrementamos el contador de consonantes

Imprimir numero de caracteres
Imprimir numero de vocales
Imprimir numero de consonantes


Par conocer si un carácter es alfabético podemos utilizar la función "isalpha" (prototipo en <ctype.h>) y para conocer si es una vocal una sentencia de selección "switch".

Un saludo
#1363
La primera recomendación es elegir un lenguaje (C o C++) y enfocarte solo en el, el otro mejor piensa que no existe.

Ello porque así solo tienes que lidiar con un lenguaje, el otro escenario es aprender ambos junto con sus diferencias y si apenas estas empezando lo mejor es lo sencillo.

El programa no funciona correctamente porque (entre otras cosas) comparas el operador con las variables s, r, p y d. Ellas son variables y su valor inicial es "no definido" o "basura" (difícil que haya una coincidencia).

La declaración de la estructura "c" debes colocarla fuera del cuerpo de los condicionales.

Y para comparar el operador debes hacerlo con los caracteres literales 's', 'r', 'p' y 'd'.

Por ejemplo en el primer caso:
Código (cpp) [Seleccionar]
struct fraccion c;

if (operacion == 's'){
   c.numerador = (a.numerador*b.denominador) +  (b.numerador*a.denominador);
   c.denominador=a.denominador*b.denominador;
}


Por ultimo trata de utilizar nombres descriptivos pero cortos.

Un saludo
#1364
Si no tienes un curso o libro de calidad deberías conseguir uno, utiliza el motor de búsqueda para consultar los temas relacionados.

Cita de: IR.M en 15 Enero 2012, 16:22 PMY algo así?

srand(time(NULL));   
    palabra[i] =1 rand() % 6;
Eso tampoco funcionara ya que estas confundiendo el uso (con "palabra[ i ]") con la asignacion (que ya esta dada cuando declaras el array).

Si quieres imprimir una sola palabra al azar basta con algo mas o menos asi:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
   char palabra[6][10] = {
      "perro",
      "gato",
      "ordenador",
      "pizarra",
      "lapiz",
      "carpeta"
   };
   
   srand((unsigned) time(NULL));
   printf("Una palabra es %s\n", palabra[rand() % 6]);
   
   return EXIT_SUCCESS;
}


Un saludo
#1365
Antes de utilizar una función debes tener acceso a su prototipo y eso se realiza incluyendo el encabezado que corresponda. En el caso de atoi y atof es <stdlib.h>.

Ello porque cuando se llama a una función sin tener acceso al prototipo de esta se asume lo siguiente:

1) El numero de argumentos que recibe esta dado en la llamada.
2) El valor de retorno es int.

Un saludo
#1366
No lo se pero supongo que no, para estar seguros hay que revisar el código fuente (completo) del programa.

Basado en los fragmentos que pones no funcionara. Debes almacenar las cadenas en un objeto (el array "palabra") y generar el indice almacenándolo en otro (cualquier variable de tipo int como el mencionado "i").

Para procesar la palabra los utilizas juntos con "palabra[ i ]".

Un saludo
#1367
El problema se debe a que estas utilizando la función "atoi" para la conversión y ella es quien descarta (mas bien se detiene al encontrar) la parte decimal.

Sustituye el uso de esa función por "atof", su uso es similar pero retorna un numero de punto flotante (tipo double).

Un saludo
#1368
Utilizando la función "rand" (prototipo en <stdlib.h>), esta resulta en un valor de tipo int entre 0 y RAND_MAX (macro definida en el mismo encabezado).

Ese valor lo reduces mediante la sentencia:
i = rand() % 6;
De esa forma el valor de "i" estara en el rango valido. Lo siguiente es utilizar la palabra con "palabra[ i ]".

Una nota: para evitar obtener los mismos resultados con la función "rand" debes indicar la semilla para los números aleatorios mediante otra funcion ("srand" en el mismo encabezado) para ello es común utilizar la hora del sistema en esta forma:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define NUM_ELEM 16

int main(void)
{
   int i;
   
   /* Definimos la semilla utilizando la hora actual */
   srand((unsigned) time(NULL));
   
   /* Impresion de valores en el rango 0 .. NUM_ELEM - 1 */
   for (i = 0; i < NUM_ELEM; i++)
      printf(" %d", rand() % NUM_ELEM);
   putchar('\n');
   
   return EXIT_SUCCESS;
}


Un saludo
#1369
Solo un comentario (en buen plan): la variable "b" solo "pasa la cubeta". En otras palabras no es necesaria ya que se puede utilizar la comparación directamente y al contador como bandera de estado.

Eliminando esa variable nos queda:
int cmp(int *p, int *q, int N)
{
   int i;
   
   for (i = 0; i < N && p[i] == q[i]; i++)
      ;
   
   return i == N;
}


Un saludo
#1370
Correcto.

La expresión:
strcmp(Ohelipuerto,"helicoptero") || strcmp(Ahelipuerto,"entrar")
Resulta en 1 (verdadero) si cualquiera de las cadenas no coincide con la literal, solo resulta en 0 (falso) si ambas cadenas son iguales.

Al negarla mediante el operador '!' el bucle "while" se ejecutara solo mientras ambas cadenas coincidan.

Un saludo