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.

Dacan

Escriba un programa que reciba como entrada 10 números introducidos por teclado, y nos indique si es que se repitió algún número, y si es así, cuantas veces se repitió.

Mi idea:

#include <stdio.h>
main(){
int i,n,contador,numero;
contador = 0;
numero = 0;

for (i=1;i<=10;i++){
   
printf("Introduzca un numero (%d): \n",i);
scanf("%d",&n);

// COMO COMPROBAR ESO?????
numero = n;
if(n == numero){
contador++;     


}

printf("Un numero se repitio %d ves/veces",contador);
getch();       
}


amchacon

Tienes que guardar todos los números obligatoriamente, hay una posibilidad de hacerlo sin arreglos (encadenar los numeros por punteros) pero es muy complicado y menos eficiente que un arreglo.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Puntoinfinito

#2
Cita de: Dacan en 13 Marzo 2013, 16:03 PM
Escriba un programa que reciba como entrada 10 números introducidos por teclado, y nos indique si es que se repitió algún número, y si es así, cuantas veces se repitió.

Mi idea:

#include <stdio.h>
main(){
int i,n,contador,numero;
contador = 0;
numero = 0;

for (i=1;i<=10;i++){
   
printf("Introduzca un numero (%d): \n",i);
scanf("%d",&n);

// COMO COMPROBAR ESO?????
numero = n;
if(n == numero){
contador++;    
}  

}

printf("Un numero se repitio %d ves/veces",contador);
getch();      
}



Los arreglos pueden ser muy útiles aquí, no entiendo porque no hacerlos servir xD

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{

int com;

int numero[10];

for (int i = 0; i < 10; i++) {

cout << endl << "Pon un numero >> ";

cin >> numero[i];

}

for (int i = 0; i < 10; i++) {

com = numero[i];

for (int u = 0; i < 10; u++) {

if (com == numero[u]) {
cout << "nNumero repetido";
return 0;
}

}

}
cout << "Ningun valor repetido";
return 0;

Lo acabo de escribir muy rápido, tal vez algo haya salido mal, pero de todos modos es para que te hagas una idea de el uso que pueden dar en ejercicios como estos

Saludos
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

naderST

Usando un conjunto de bits lo podrías hacer, pero no puedes usar un número mayor que 64

Dacan

Es que me pusieron eso de tarea y aun no han dado arreglos, por lo cual tendria que almacenar todos los numeros en variables y hacer un monton de if...

Gracias de todas formas.

Puntoinfinito

Cita de: Dacan en 13 Marzo 2013, 17:17 PM
Es que me pusieron eso de tarea y aun no han dado arreglos, por lo cual tendria que almacenar todos los numeros en variables y hacer un monton de if...

Gracias de todas formas.

Como tu dices, esto solo lo puedes hacer con muchos ifs, es la manera, sino, sorprende el profesor con unas buenas matrices XD
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

naderST

Usa arreglos y argumenta tu solución (sobran argumentos)

fary

#7
Haber, poder se puede pero es como si intentases crear un array en ASM.

Suponiendo que cada numero ocupa un tamaño de 4bytes solo tienes que crear un buffer de longitud 40 (10 numeros por 4 bytes) donde en la posicion 1 pones el primer numero en la posicion 4 el segundo numero en la posicion 8 el tercer numero y así consecutivamente.... En realidad así es como trabajan los arrays a nivel ensamblador solo que no lo vemos debido a que se programa en niveles superiores.

un saludo!




Mira edito el tema para dejarte como seria que avisara si se repite un numero, solo tienes que añadir que se cuenten las veces que se repita:

// mDrinky

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

int main()
{
    char * Buffer = malloc(10);
    int numero;
    int i = 0;
    int a;

    numero = 0;
    memset(Buffer,0,10);

    printf("Ingrese 10 numeros: ");

    while (i<10)
    {
        a = 0;
        scanf("%i",&numero);

        numero += 0x30;
        Buffer[i] = numero;

        while(a<i)
        {
            if (Buffer[a] == Buffer[i])
            {
                printf("Numero repetido!");
                return 1;
            }
            a++;
        }
        i++;
    }

    return 0;
}


Un byte a la izquierda.

rir3760

Como ya se comento no es posible sin el uso de un array o, como en el programa de mDrinky, mediante la reserva de memoria en tiempo de ejecución.

En cuanto a este ultimo considerando que se trabaja con enteros se pueden sustituir las llamadas a malloc y memset (su prototipo se encuentra en <string.h>) por una llamada a calloc. Y si la intención es leer números de un solo dígito mejor indicarlo así en la llamada a scanf con "%1d".

Por ultimo ya que en este caso el rango de números es pequeño (0 a 9) se puede utilizar el array como uno de banderas indicando si el numero ya fue introducido:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   char *Buffer = calloc(10, 1);
   int numero;
   int i;

   printf("Ingrese 10 numeros: ");
   for (i = 0; i < 10; i++){
      scanf("%1d", &numero);
     
      if (Buffer[numero]++){
         puts("Numero repetido!");
         break;
      }
   }
   
   return EXIT_SUCCESS;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

85

Lo que necesitás es almacenamiento para 10 enteros, por lo tanto por una cuestión de lógica , necesitás un espacio para 10 enteros.

Digo que son enteros al ver tu código.

tus posibilidades son usar un arreglo de 10 , o un buffer de asignación dinámica, o declarar 10 variables de enteros.
No creo que tu profesor te permita usar tantas variables, a menos que estás en un curso de ingreso XD
Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/