Es posible hacer esto sin arreglos?

Iniciado por Dacan, 13 Marzo 2013, 16:03 PM

0 Miembros y 1 Visitante están viendo este tema.

pacoperico

Si la cuestion es que no puedes usar arreglos una posible alternativa podria ser usar una estructura. Seria una estructura de diez miembros de tipo int y cada uno almacenaria cada valor que has introducido por teclado, una vez hecho esto solo tendrias que comprobar cada miembro de la estructura para ver si alguno se repite.

DaniekL

Si puedes usar punteros lo que puedes hacer es "fingir" el array con las direcciones de memoria.

#include <stdio.h>
#include <stdlib.h>

int main(void) {

int *p, i, j, c=0;

p = malloc(sizeof(int)*10);
for(i=0;i<10;i++) {
printf("Introduzca un numero: ");
scanf("%d", p+(sizeof(int)*i));
for(j = 0; j < i; j++) {
if(*(p+(sizeof(int)*i)) == *(p+(sizeof(int)*j))) {
c++;
}
}
}
printf("Han ocurrido %d coincidencias\n", c);
return 0;
}

mr.blood

#12
Si he entendido bien el problema no es que no pueda hacerlo con arrays, es que aun no los han dado.




Como que no es posible sin arrays? No es eficiente ni limpio, pero posible es.

#include <stdio.h>

int main()
{
   int num;
   char num0=0, num1=0, num2=0, num3=0, num4=0, num5=0, num6=0, num7=0, num8=0, num9=0, i;
   puts("Introduce 10 numeros\n");
   for(i=0;i<10;i++)
   {
       scanf("%i",&num);
       fflush(stdin);
       switch(num)
       {
           case 0:
               num0++;
               break;
           case 1:
               num1++;
               break;
           case 2:
               num2++;
               break;
           case 3:
               num3++;
               break;
           case 4:
               num4++;
               break;
           case 5:
               num5++;
               break;
           case 6:
               num6++;
               break;
           case 7:
               num7++;
               break;
           case 8:
               num8++;
               break;
           case 9:
               num9++;
               break;
       }
   }
   if(num0>0)
   {
       printf("El 0 se repite %i veces\n", num0);
   }
   if(num1>0)
   {
       printf("El 1 se repite %i veces\n", num1);
   }
   if(num2>0)
   {
       printf("El 2 se repite %i veces\n", num2);
   }
   if(num3>0)
   {
       printf("El 3 se repite %i veces\n", num3);
   }
   if(num4>0)
   {
       printf("El 4 se repite %i veces\n", num4);
   }
   if(num5>0)
   {
       printf("El 5 se repite %i veces\n", num5);
   }
   if(num6>0)
   {
       printf("El 6 se repite %i veces\n", num6);
   }
   if(num7>0)
   {
       printf("El 7 se repite %i veces\n", num7);
   }
   if(num8>0)
   {
       printf("El 8 se repite %i veces\n", num8);
   }
   if(num9>0)
   {
       printf("El 9 se repite %i veces\n", num9);
   }
   getchar();
   return 0;
}


Otro modo mas eficiente seria algo como:

#include <stdio.h>
#include <string.h>

int main()
{
   int num, i;
   char repes[10];
   memset(repes, 0, 10);
   puts("Introduce 10 numeros\n");
   for(i=0;i<10;i++)
   {
       scanf("%i",&num);
       fflush(stdin);
       repes[num]++;
   }
   for(i=0;i<10;i++)
   {
       if(repes[i]>0)
       {
           printf("Numero %i repetido %i veces\n", i, repes[i]);
       }
   }
   getchar();
   return 0;
}


Aunque pueda mejorarse ;).

Sa1uDoS

85

Es raro que le hayan dicho que no puede usar arrays, structs, asignación dinámica, punteros, etc
le queda usar 10 variables enteras, o eso que hiciste mr.blood que para listar ya tiene el número dentro del string. Si fuera que son números del 0 al 9.
Ese profesor debe ser cualquiera para requerir estas cosas.. o se trata de un curso de ingreso o algo
Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/