Hack x Crack - Comunidad de Seguridad informática

Programación => C / C++ => Mensaje iniciado por: r1ghtz0 en Junio 09, 2013, 04:10:22 am

Título: [Solucionado] contar apariciones de 3 números usando arrays
Publicado por: r1ghtz0 en Junio 09, 2013, 04:10:22 am
Buenas, quisieran que me ayudaran con este ejercicio por favor, que no entiendo por qué solo cuenta las apariciones del cero (0) pero las apariciones del 1 y 2 me dan un resultado extraño.

El ejercicio en sí dice que: Escribas un programa que cuente las veces que aparece los número 0, 1 y 2.

Esta es la versión del manual que estoy leyendo:

Código: [Seleccionar]
#include <stdio.h>
#include <math.h>
#include <string.h>
#define MAX 3

int main(){

int num, cont[MAX], i;

for(i= 0 ; i<MAX ; i++){
cont[i]= 0;

scanf("%d", &num);

while(num != -1){
if((num >= 0) && (num <= MAX)){
cont[num]++;
scanf("%d", &num);
}

}

for(i= 0 ; i<3 ; i++){
printf("nContador[%d]= %dn", i, cont);
}

}

return 0;
}

En este código de arriba no entiendo que es lo que hace el primer for, si a mi parecer basta tan solo con un while y más abajo un for. Así como está aquí en mi versión

Mi versión:
Código: [Seleccionar]
#include <stdio.h>
#include <math.h>
#include <string.h>
#define MAX 3

int main(){

int num, cont[MAX], i;

scanf("%d", &num);

while(num >= 0 && num <= 2){
if((num >= 0) && (num <= 2)){
cont[num]++;
scanf("%d", &num);
}

}

for(i= 0 ; i<2 ; i++){
printf("nContador[%d]= %dn", i, cont);
}

return 0;
}

Título: Re:ayuda, contar apariciones de 3 números usando arrays
Publicado por: SirValkennor_ en Junio 09, 2013, 07:27:26 am
Código: [Seleccionar]
Hola chicos como estan?
bueno ya que esta semana practique el uso basico de las estructuras For y While, se me ocurrio postear un ejercicio sencillo realizado con las mismas. Abajo puse las diferencias que hay entre el uso de una u otra estructura.

El ejercicio es el siguiente:

- Se pide ingresar 5 numeros y calcular su media.


Usando For                                       

#include<stdio.h>                             
#include<conio.h>
void main (void)                                   
{                                                     
float contar, suma=0,num, prom;                   
clrscr();                                           
for (contar=0;contar<5;contar++)
{                                                     
printf ("Ingrese un Nº %f =", contar+1);   
scanf ("%f", &num);                               
suma=suma+num;                               
}                                                     
prom=suma/5;                                     
printf("\n\n El promedio es: %f", prom);   
printf ("\n Presione una tecla para salir:");
getche();                                           
}                                                                                                               


Usando While

#include<stdio.h>
#include<conio.h>
  void main (void)
  {
     float contar=0, suma=0,num, prom;
       clrscr ();
         while (contar<5)
    {
      printf ("Ingrese un N§ %f = ",contar+1);
      scanf ("%f",&num);
      suma=suma+num;
            contar=contar+1;
    }
     prom=suma/5;
     printf ("\n\nEl promedio es = %f", prom);
     printf ("\nPresione una tecla para salir:");
     getche();
  }

Nota:

- Resalte en negrita las diferencias entre ambas estructuras.

Diferencias:

1) Cuando se declaran las variables, la estructura For no necesita que inicializemos la variable contador que en nuestro ejercicio se llama contar, ya que:

For (valor inicial; condicion;incremento o decremento)
    { sentencias
    }

Valor inicial: es donde justamente inicializamos el contador. Por ej:b=0.
Condicion: aqui ponemos el limite del contador. Por ej: b<10.
Incremeto o decremento: es incremento o decremento del contador.
Por ej: b++ (o b=b+1).

2) En el While el  incremento o decremento del contador se debe escribir en donde se escriben las sentencias
     
  While (condicion)
       {sentencia1
         sentencia2   
         sentencian
         incremento o decremento del contador (p.e u=u+1)     
        }
     

Condicion: aca se pone el limite del contador ej: h<10

no entiendo que quieres hacer :S
Título: Re:ayuda, contar apariciones de 3 números usando arrays
Publicado por: Ediuman007 en Junio 09, 2013, 07:48:44 am
Espero haberte ayudado .... hay dejo explicado en el codigo algunas cosas y nada mas se tubo que corregir algunos errores de llaves que suele pasar cuando pragramamos  :-\
Código: [Seleccionar]
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <conio.h>  // para uso del getch()
#define MAX 3

int main(){

int num, cont[MAX], i;
// Inicializar el array
for(i= 0 ; i<MAX ; i++){
cont[i]= 0; }
printf("Para salir ingrese numero: -1\n"); // el "\n" sirve como salto de linea
printf("nUMERO: ");
scanf("%d", &num);

while(num != -1){
if((num >= 0) && (num < MAX)){ //Condicion que incrementara en uno
cont[num]++; }    // a la posicion del array si se culmple la condicion
printf("nUMERO: ");
scanf("%d", &num);}

for(i= 0 ; i<3 ; i++){
printf("Contador[%d]= %d \n", i, cont[i]);
}
getch(); // Pausa hasta presionar alguna tecla
return 0;
}
Título: Re:ayuda, contar apariciones de 3 números usando arrays
Publicado por: samuellopz en Junio 09, 2013, 08:28:49 pm
buenas lo primero te dejo aquí mi trozo de código por si te sirve de ayuda y puedes hacer un código propio tuyo y no versionar el del manual
Código: [Seleccionar]
#include <iostream>
using namespace std;

int contar(int t[], int n){
    int cont[]={0,0,0};
    for(int i=0;i<n;i++) if((t[i]<=3)&&(t[i]>=1)) cont[(t[i]-1)]++;
    for(int i=0;i<3;i++) cout<<i+1<<"\t"<<cont[i]<<endl;
    }
           
void generar(int n){
     system("cls");
     int t[n];
     for(int i=0;i<n;i++) cin>>t[i]; //t[i]=rand()%3 + 1; si quieres que se genere aleatorio, el %3 + 1 es para que genere un numero entre 1 y 3 si cambias el 3 por 8 lo genera entre 1 y 8
     contar(t,n);
     }
           
int main(){
    int n;
    cout<<"tamano del vector a crear: "<<endl;
    cin>>n;
    generar(n);
    system("pause");
    return 0;
}


y contestando a tu pregunta puede ser que te salgan cosas extrañas porque declaras cont[MAX] pero como no inicializas con un valor, cada posición del array tiene un valor basura (que a saber cuál es, lo mismo es 1999986 que 789) si observas en el caso mio te he puesto cont[]={0,0,0} (si inicializas no hace falta poner el tamaño)

espero haberte sido de ayuda
Título: Re:ayuda, contar apariciones de 3 números usando arrays
Publicado por: r1ghtz0 en Junio 10, 2013, 08:57:06 pm
Aaah ok, ya lo e comprendido... La idea de el primer for es poner a cero (0) todas las posiciones de la rrays, por eso es que solo me contaba las apariciones de los ceros y los otros dos número me daban resultados extraños. El error mío era que estaba metiendo el while y el segundo for todo dentro del primer for, en el manual que tengo aparecen los for sin llaves por eso era que no entendía el primero.