elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Es posible hacer esto sin arreglos?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Es posible hacer esto sin arreglos?  (Leído 6,965 veces)
Dacan

Desconectado Desconectado

Mensajes: 237



Ver Perfil WWW
Es posible hacer esto sin arreglos?
« 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:

Código:
#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();       
}


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Es posible hacer esto sin arreglos?
« Respuesta #1 en: 13 Marzo 2013, 16:36 pm »

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.


En línea

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


Desconectado Desconectado

Mensajes: 919


#! /win/archlinux


Ver Perfil WWW
Re: Es posible hacer esto sin arreglos?
« Respuesta #2 en: 13 Marzo 2013, 16:49 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:

Código:
#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
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.  
  8. int com;
  9.  
  10. int numero[10];
  11.  
  12. for (int i = 0; i < 10; i++) {
  13.  
  14. cout << endl << "Pon un numero >> ";
  15.  
  16. cin >> numero[i];
  17.  
  18. }
  19.  
  20. for (int i = 0; i < 10; i++) {
  21.  
  22. com = numero[i];
  23.  
  24. for (int u = 0; i < 10; u++) {
  25.  
  26. if (com == numero[u]) {
  27. cout << "nNumero repetido";
  28. return 0;
  29. }
  30.  
  31. }
  32.  
  33. }
  34. cout << "Ningun valor repetido";
  35. return 0;
  36.  
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
« Última modificación: 16 Marzo 2013, 12:48 pm por Puntoinfinito » En línea

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



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


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Es posible hacer esto sin arreglos?
« Respuesta #3 en: 13 Marzo 2013, 16:51 pm »

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

Dacan

Desconectado Desconectado

Mensajes: 237



Ver Perfil WWW
Re: Es posible hacer esto sin arreglos?
« Respuesta #4 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.
En línea

Puntoinfinito


Desconectado Desconectado

Mensajes: 919


#! /win/archlinux


Ver Perfil WWW
Re: Es posible hacer esto sin arreglos?
« Respuesta #5 en: 13 Marzo 2013, 18:11 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
En línea

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



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


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Es posible hacer esto sin arreglos?
« Respuesta #6 en: 13 Marzo 2013, 18:25 pm »

Usa arreglos y argumenta tu solución (sobran argumentos)
En línea

fary


Desconectado Desconectado

Mensajes: 1.075



Ver Perfil WWW
Re: Es posible hacer esto sin arreglos?
« Respuesta #7 en: 13 Marzo 2013, 20:01 pm »

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:

Código
  1. // mDrinky
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. int main()
  7. {
  8.    char * Buffer = malloc(10);
  9.    int numero;
  10.    int i = 0;
  11.    int a;
  12.  
  13.    numero = 0;
  14.    memset(Buffer,0,10);
  15.  
  16.    printf("Ingrese 10 numeros: ");
  17.  
  18.    while (i<10)
  19.    {
  20.        a = 0;
  21.        scanf("%i",&numero);
  22.  
  23.        numero += 0x30;
  24.        Buffer[i] = numero;
  25.  
  26.        while(a<i)
  27.        {
  28.            if (Buffer[a] == Buffer[i])
  29.            {
  30.                printf("Numero repetido!");
  31.                return 1;
  32.            }
  33.            a++;
  34.        }
  35.        i++;
  36.    }
  37.  
  38.    return 0;
  39. }
  40.  

« Última modificación: 13 Marzo 2013, 20:18 pm por mDrinky » En línea

Un byte a la izquierda.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Es posible hacer esto sin arreglos?
« Respuesta #8 en: 14 Marzo 2013, 03:51 am »

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:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   char *Buffer = calloc(10, 1);
  7.   int numero;
  8.   int i;
  9.  
  10.   printf("Ingrese 10 numeros: ");
  11.   for (i = 0; i < 10; i++){
  12.      scanf("%1d", &numero);
  13.  
  14.      if (Buffer[numero]++){
  15.         puts("Numero repetido!");
  16.         break;
  17.      }
  18.   }
  19.  
  20.   return EXIT_SUCCESS;
  21. }

Un saludo
En línea

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

Desconectado Desconectado

Mensajes: 206



Ver Perfil WWW
Re: Es posible hacer esto sin arreglos?
« Respuesta #9 en: 15 Marzo 2013, 02:40 am »

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
En línea

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿ Es posible hacer esto??? « 1 2 3 »
Desafíos - Wargames
Golfo1974 23 23,569 Último mensaje 18 Abril 2011, 03:24 am
por Gambinoh
Es posible hacer esto con el bluetooth?
Hacking Mobile
Za3LoT 1 4,003 Último mensaje 12 Diciembre 2006, 23:35 pm
por DeViL_DeMoN
es posible hacer esto ...
PHP
pana88 5 3,333 Último mensaje 23 Julio 2008, 14:11 pm
por pana88
es posible hacer esto??
Hacking
-r3- 7 4,614 Último mensaje 16 Octubre 2011, 23:17 pm
por er_wanchu
Es posible hacer esto?
Programación C/C++
Erres 3 2,724 Último mensaje 30 Septiembre 2012, 03:53 am
por lindosekai
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines