Autor
|
Tema: Es posible hacer esto sin arreglos? (Leído 7,055 veces)
|
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(); }
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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
|
|
|
|
Puntoinfinito
Desconectado
Mensajes: 919
#! /win/archlinux
|
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 #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
|
|
« Última modificación: 16 Marzo 2013, 12:48 pm por Puntoinfinito »
|
En línea
|
|
|
|
naderST
|
Usando un conjunto de bits lo podrías hacer, pero no puedes usar un número mayor que 64
|
|
|
En línea
|
|
|
|
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.
|
|
|
En línea
|
|
|
|
Puntoinfinito
Desconectado
Mensajes: 919
#! /win/archlinux
|
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
|
|
|
|
naderST
|
Usa arreglos y argumenta tu solución (sobran argumentos)
|
|
|
En línea
|
|
|
|
fary
|
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() { int numero; int i = 0; int a; numero = 0; printf("Ingrese 10 numeros: "); while (i<10) { a = 0; numero += 0x30; Buffer[i] = numero; while(a<i) { if (Buffer[a] == Buffer[i]) { return 1; } a++; } i++; } return 0; }
|
|
« Última modificación: 13 Marzo 2013, 20:18 pm por mDrinky »
|
En línea
|
Un byte a la izquierda.
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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) { int numero; int i; printf("Ingrese 10 numeros: "); for (i = 0; i < 10; i++){ if (Buffer[numero]++){ puts("Numero repetido!"); break; } } return EXIT_SUCCESS; }
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
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿ Es posible hacer esto???
« 1 2 3 »
Desafíos - Wargames
|
Golfo1974
|
23
|
23,678
|
18 Abril 2011, 03:24 am
por Gambinoh
|
|
|
Es posible hacer esto con el bluetooth?
Hacking Mobile
|
Za3LoT
|
1
|
4,024
|
12 Diciembre 2006, 23:35 pm
por DeViL_DeMoN
|
|
|
es posible hacer esto ...
PHP
|
pana88
|
5
|
3,437
|
23 Julio 2008, 14:11 pm
por pana88
|
|
|
es posible hacer esto??
Hacking
|
-r3-
|
7
|
4,673
|
16 Octubre 2011, 23:17 pm
por er_wanchu
|
|
|
Es posible hacer esto?
Programación C/C++
|
Erres
|
3
|
2,758
|
30 Septiembre 2012, 03:53 am
por lindosekai
|
|