/
Inicio :: Foros

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

La cosa más extraña que me ha pasado.

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Pantalàimon_



Registrado: 17 Jul 2007
Mensajes: 90

MensajePublicado: 03/10/2007 12:19 pm
Título: La cosa más extraña que me ha pasado.

Confused Hola.

Tengo un código escrito en c y compilado. Total que cuando llamo al ejecutable por MS-DOS o directamente clicando en este me salen cosas distintas.

¿Esto puede ser?
Volver arriba
gonzalo_s



Registrado: 07 Jun 2005
Mensajes: 40
Ubicación: Santiago

MensajePublicado: 03/10/2007 1:05 pm
Título:

sera posible que estes abriendo dos archivos distintos??, o versiones distintas del archivo?, a mi me ha pasado.
Volver arriba
Pantalàimon_



Registrado: 17 Jul 2007
Mensajes: 90

MensajePublicado: 03/10/2007 1:39 pm
Título:

No es eso, ya me he asegurado. Hasta he eliminado el archivo ejecutable y lo he vuelto a compilar. y nada...

He pegado el mismo código en otro archivo de prueba, lo he compilado y me pasa lo mismo con el ejecutable que sale del archivo de prueba.

Por cierto, una cosa que seguramente pueda servir de informacion, uso dev-c++.
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3588
Ubicación: Mexico

MensajePublicado: 03/10/2007 4:12 pm
Título:

Por lo visto es un problema comun, yo tengo este programa:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define NUM_ELEM 16

int main(void)
{
   int i;
   
   srand((unsigned) time(NULL));
   
   for (i = 0; i < NUM_ELEM; i++)
      printf(" %d", rand() % NUM_ELEM);
   putchar('\n');
   
   return EXIT_SUCCESS;
}

Y como tu cada ves que lo corro me salen cosas distintas. Shocked

Ya en serio puede deberse a un monton de cosas desde errores en el programa hasta que ese sea el comportamiento esperado. Lo mas sencillo es que publiques el codigo fuente.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
Pantalàimon_



Registrado: 17 Jul 2007
Mensajes: 90

MensajePublicado: 03/10/2007 9:37 pm
Título:

rir3760 escribió:
Por lo visto es un problema comun, yo tengo este programa:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define NUM_ELEM 16

int main(void)
{
   int i;
   
   srand((unsigned) time(NULL));
   
   for (i = 0; i < NUM_ELEM; i++)
      printf(" %d", rand() % NUM_ELEM);
   putchar('\n');
   
   return EXIT_SUCCESS;
}

Y como tu cada ves que lo corro me salen cosas distintas. Shocked

Ya en serio puede deberse a un monton de cosas desde errores en el programa hasta que ese sea el comportamiento esperado. Lo mas sencillo es que publiques el codigo fuente.

Un saludo


jjajaja, también podría ser una función rand() pero me parece que no Razz .

Pongo el código:

Código:
#include<stdio.h>

#define CIFRAS 6

int Num_digitos(int numero)
{
  int indice=0;
  for(indice=0;numero!=0;indice++) numero/=10;
  return indice;
}


char digito(int numero, int posicion)
{
  int indice;
  for(indice=0 ; indice<posicion ; indice++) numero/=10;
  return numero%=10;
}
 
int criba(int numero,int factor1,int factor2,int ndig)
{
  int indice,indice1,indice2;
  char comprovacion[CIFRAS];
  for(indice=0;indice<ndig;indice++) comprovacion[indice]=0;
  for(indice1=0; indice1<ndig/2; indice1++)
  {
    for(indice=0; indice<ndig; indice++)
    {
      if(digito(numero,indice)==digito(factor1,indice1)&&comprovacion[indice]==0)
      {
        comprovacion[indice]=1;
        break;
      }
    }
  }
  for(indice2=0; indice2<ndig/2; indice2++)
  {
    for(indice=0; indice<ndig; indice++)
    {
      if(digito(numero,indice)==digito(factor2,indice2)&&comprovacion[indice]==0)
      {
        comprovacion[indice]=1;
        break;
      }
    }
  }
  for(indice=0; indice<ndig ; indice++)
  if(comprovacion[indice]==0) return 0;
  return 1;
}
   

int main(void)
{
  int i,j,k,factor,numero=1,exp,contador=0;
  for(exp=1; exp<3 ; exp++)
  {
    factor*=10;
    numero=10*factor*factor;
    for(j=numero ; j<10*numero ; j++)
    {
      //printf("%d %d\n",j,contador);
      for(k=j/(10*factor)+1; k*k<=j ; k++)
      {
          if(j%k==0)
          {
            if(criba(j,k,j/k,2*(exp+1))>0)
            {
              contador++;
              printf("%d=%d*%d   %d\n",j,k,j/k,contador);
            }
          }
      }
    } 
  }
  return 0;
}


A ver que te sale cuando lo compilas. Espero que sea una de las dos cosas que me sale a mí.

PD.:podrían poner el encuadrador de código un poco más ancho o algo para que no quedé tan feo y descolocado el código fuente.

Saludos!
Volver arriba
daltomi



Registrado: 28 Abr 2007
Mensajes: 107
Ubicación: Argentina

MensajePublicado: 03/10/2007 9:56 pm
Título: Nota

Utilizando un breakpoint y recorriendo paso por paso, en ésta línea dentro del main:
Código:
if(j%k==0)

k = -7 hasta 0.

Te pregunto:¿sigue siendo válido, el código en general, si se arregla éste problema? asi:
Código:

if(k>0 && j%k==0)
Volver arriba
Pantalàimon_



Registrado: 17 Jul 2007
Mensajes: 90

MensajePublicado: 03/10/2007 10:04 pm
Título:

Vale, gracias, esto venía por no haber inicializado la variable factor en 1.

Lo raro es que si lo inicializaba por windows el programa salía bien, es decir factor se incializaba con 1 y si lo hacía por ms-dos se incializaba con cualquier valor basura.

Lo extraño es que por windows me funcionara bien.

Muchas gracias.
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3588
Ubicación: Mexico

MensajePublicado: 04/10/2007 7:26 am
Título:

En la funcion "Num_digitos" no es necesario inicializar la variable "indice" con el valor cero ya que lo primero que haces con esa variable es asignarle un valor en el bucle for.

Esa misma funcion no reporta correctamente el numero de digitos de numeros como 0, 10, etc. su unico bucle se debe modificar a:
Código:
for (indice = 1; numero >= 10; indice++)
   numero /= 10;

/* O tambien */

for (indice = 1; (numero /= 10) > 0; indice++)
   ;


En cuanto al "word-wrap" en las secciones de codigo habra que comentarselo a Gorka Urrutia (el administrador del sitio), por el momento la unica solucion consiste en agregar una linea de texto sin espacios fuera de la seccion de codigo, un ejemplo de esto en el tema word-wrap en el codigo fuente.

Si bien con eso se resuelve el problema con el codigo fuente mete otro problema: los parrafos normales son demasiado largos y uno debe realizar el corte de linea de estos manualmente.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
Pantalàimon_



Registrado: 17 Jul 2007
Mensajes: 90

MensajePublicado: 04/10/2007 9:06 am
Título:

Pues he probado con mi función y me sigue dando igual bien... no sé. Pero no te preocupes, esta función era una cosa residual que ya he quitado, pues no la utilizo en el programa.

Gracias!
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
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