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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Necesito ayuda con arrays
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Necesito ayuda con arrays  (Leído 2,176 veces)
djbraks

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Necesito ayuda con arrays
« en: 29 Enero 2020, 17:58 pm »

Buenas, tengo que hacer un programa que introduciendo 10 números por teclado, me diga cuantas veces se repite cada uno. (C++)
Esa semana no fui a clase y ando perdidisimo, espero que alguien me pueda echar una mano.


#include <stdio.h>
#include <stdlib.h>
 
main()
 
{
 
    int numero[10],size,contador=0,i=0;
    printf("Introduzca la cantidad de numeros(hasta un maximo de 10): ");
    scanf("%i",&size);
    for (i=0;i<size;i++)
    {   
     printf("Numero %i: ",i+1);
     scanf("%i",&numero);
     }
    for (i=0;i<size;i++)
    {
     if (numero==size)
     {
      contador++;
      }
      printf("%i  %i\n",numero,contador);
     }
    system("Pause");
 
 
   return 0;
}


« Última modificación: 29 Enero 2020, 18:30 pm por djbraks » En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Necesito ayuda con arrays
« Respuesta #1 en: 29 Enero 2020, 18:03 pm »

Hola!

Y qué es lo que llevas hecho? Muestra tus avances para que puedan ayudarte.

Debes saber que en este foro no se hacen tareas. Por las dudas, lee las reglas.

Saludos!


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Necesito ayuda con arrays
« Respuesta #2 en: 30 Enero 2020, 07:44 am »

Bueno, lo primero informarte de que lo pides en C++ pero tu programa tiene una pinta de C que no puede con ello... :silbar:
Y lo segundo que para futuras consultas coloca tu código entre etiquetas de Código GeSHi porque sino se dificulta mucha la lectura de éste... Gracias.

Tu código digamos que hace lo siguiente:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. main(){
  5.    int numero[10],size,contador=0,i=0; // Declaras el array de 10 elementos y un par de variables mas... De momento no va mal aunque... La funcion es: int main() ya que devuelve un int
  6.    printf("Introduzca la cantidad de numeros(hasta un maximo de 10): "); // Pides el numero de elementos a guardar
  7.    scanf("%i",&size); // Y lo guardas en size... Bien
  8.    for (i=0;i<size;i++){ // Recorres el array hasta size y pides un valor para cada posicion
  9.        printf("Numero %i: ",i+1);
  10.        scanf("%i",&numero[i]); // AQUI SUPONGO QUE USAS EL INDICE i AUNQUE COMO PUEDES VER EN TU MENSAJE NO SE VE POR NO USAR ETIQUETAS DE CODIGO GESHI
  11.    }
  12.    // A partir de aqui es cuando ya tu programa pierde el sentido...
  13.    for (i=0;i<size;i++){
  14.        if (numero==size){
  15.           contador++;
  16.        }
  17.        printf("%i  %i\n",numero,contador);
  18.    }
  19.    // No te recomiendo usar system("pause")... Es una mala practica.
  20.    // Para C++ (el de verdad...) lo recomendable es usar cin.get() que pertenece al archivo de cabecera <iostream>
  21.    // Para tu C++ (que es practicamente C) lo recomendable es usar getchar() que pertenece a <stdio.h>
  22.    system("Pause");
  23.    return 0;
  24. }

Bueno pues te voy a dar una solución intentando que sea fácil de entender (ya habrá tiempo de hacerla más eficiente una vez entendido el procedimiento). Imagina que tienes un array con valores y te piden saber cuántas veces se repite un número concreto x... Fácil:
Código
  1. int contador = 0;
  2. for(int i = 0; i < size; ++i)
  3.    if(numeros[i] == x)
  4.        ++contador;
Y ya estaría. El problema en tu caso es que no sabes cuántos valores tienes que buscar de antemano por lo que una posible solución es crear un par de arrays auxiliares:
En uno de ellos guardarás cada uno de los valores introducidos pero sólo una vez. Es decir si se introduce {1,2,3,2,3,1,3,2,4,1,2,4,1} tu array auxiliar guardará {1,2,3,4} y así puedes saber qué valores tienes que buscar.
El otro guardará cuántas veces está cada uno. Para el ejemplo anterior quedaría {4,4,3,2}, es decir, 4 veces el 1, 4 veces el 2, 3 veces el 3 y 2 veces el 4.

Creo que una buena forma de hacerlo (simple pero sin tener que recorrer todos los arrays 50 veces sería):
Código:
numeros : array de longitud 10
valoresUnicos : array de longitud 10 // ya que en el peor de los casos habra 10 elementos diferentes
sizeValoresUnicos := 0 // Numero de elementos introducidos en valoresUnicos
indiceValoresUnicos := 0 // indice para recorrer el array de valoresUnicos y a veces utilizado para el array contadores. Lo puedes ver mas abajo
contadores : array de longitud 10 // igual que antes para el peor de los casos en el cual quedaria {1,1,1,1,1,1,1,1,1,1}. IMPORTANTE: debe estar inicializado a 0

PEDIR size
PARA i := 0 HASTA size-1 HACER
    PEDIR numeros[i]
    // Buscamos si ese valor ya esta en valoresUnicos y sino lo metemos
    indiceValoresUnicos := 0
    MIENTRAS indiceValoresUnicos < sizeValoresUnicos && valoresUnicos[indiceValoresUnicos] != numeros[i] HACER // IMPORTANTE: las condiciones en ese orden o te dara problemas
        indiceValoresUnicos := indiceValoresUnicos + 1
    FIN MIENTRAS
    // Cuando salimos de ese bucle tenemos que comprobar cual ha sido la condicion que ha hecho salir
    SI indiceValoresUnicos == sizeValoresUnicos ENTONCES // Si hemos llegado hasta el final significa que no lo hemos encontrado
        valoresUnicos[indiceValoresUnicos] := numeros[i] // Entonces lo metemos
        contadores[indiceValoresUnicos] = 1; // y guardamos que ya tenemos una vez ese valor
        sizeValoresUnicos := sizeValoresUnicos + 1 // y este array ya tiene 1 elemento mas
    SINO // En cambio si no hemos llegado hasta el final significa que si lo hemos encontrado. Entonces incrementamos en 1 el numero de veces que ha salido ese valor
        contadores[indiceValoresUnicos] := contadores[indiceValoresUnicos] + 1
    FIN SI
FIN PARA

Ahora tienes que entender el algoritmo y una vez lo hayas entendido tienes que pasarlo a C/C++ ya que como puedes ver no he usado la sintaxis de estos lenguajes. Si entiendes cómo funciona, traducirlo resulta muy sencillo.
Si tienes alguna duda o algo no te funciona, siempre puedes preguntar pero recuerda utilizar las etiquetas para facilitarnos la lectura de tu código.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Necesito apuntes subprogramas arrays
Programación General
XV8 0 2,055 Último mensaje 23 Noviembre 2010, 11:22 am
por XV8
Duda con arrays dentro de arrays « 1 2 »
PHP
Servia 11 6,831 Último mensaje 10 Marzo 2011, 09:04 am
por Servia
URGENTE!! NECESITO AYUDA!! VECTORES Y ARRAYS (RAND) C++
Programación C/C++
ricky_10 1 2,774 Último mensaje 15 Diciembre 2011, 04:40 am
por Unbr0ken
Funcion RecomendarButacas Ayuda!! (Recorrer arrays de arrays)
Java
elenfatico 2 2,697 Último mensaje 7 Abril 2016, 00:44 am
por 50ShadesOfKenyi
Necesito ayuda para resolver este problema de arrays C++
Programación C/C++
felippone 1 1,523 Último mensaje 5 Marzo 2019, 18:52 pm
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines