Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/10/2012, 17:03
ecfisa
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 12 años, 7 meses
Puntos: 22
Respuesta: Problema de arrays

Cita:
Tengo un array de 0's y 1's, yo sé cuantos 1's hay pero me gustaría poder sacar las posiciones donde se encuentran esos 1's, cómo podría hacerlo¿?
Hola.

No especificas si estas trabajando en C o C++, te pongo un ejemplo en ambos de como obtener las posiciones (índice) donde se encuentran los "unos"

Código C:
Ver original
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4.  
  5. #define MAX 20
  6.  
  7. int main(int argc, char* argv[]) {
  8.   char ceros_y_unos[MAX];
  9.   int *unos_inx;
  10.   int i, u=0;
  11.  
  12.   /* carga */
  13.   srand((unsigned) time(NULL));
  14.   for(i=0;i<MAX;i++) ceros_y_unos[i] = 48 + rand() % 2;
  15.   /* mostrar arreglo de ceros y unos */
  16.   printf("Arreglo\n");
  17.   for(i=0;i<MAX;i++) printf("%2c",ceros_y_unos[i]);
  18.  
  19.   /* guardar indices de unos */
  20.   unos_inx  = (int*)malloc(sizeof(int));
  21.   for(i=0;i<MAX;i++) {
  22.     if(ceros_y_unos[i]== '1') {
  23.       unos_inx[u++] = i;
  24.       unos_inx = (int*)realloc(unos_inx, sizeof(int)*(u+1));
  25.     }
  26.   }
  27.   /* mostrar posiciones */
  28.   printf("\n\nPosiciones en las que hay un uno\n");
  29.   for(i=0;i<u;i++) printf("%3d",unos_inx[i]);
  30.  
  31.   getchar();
  32.   free(unos_inx);
  33.   return 0;
  34. }

Código C++:
Ver original
  1. #include <iostream>
  2. #include <time>
  3. #include <vector>
  4.  
  5. #define MAX 20
  6.  
  7. using namespace std;
  8.  
  9. int main(int argc, char* argv[]) {
  10.   vector<char>ceros_y_unos;
  11.   vector<int>unos_inx;
  12.   srand(time(NULL));
  13.   /* carga */
  14.   for(int i=0;i<MAX;i++) ceros_y_unos.push_back(48+rand()%2);
  15.   cout << "Arreglo" << endl;
  16.   for(int i=0;i<MAX;i++) cout <<" "<< ceros_y_unos[i];
  17.  
  18.   /* guardar indices de unos */
  19.   for(int i=0;i<MAX;i++)
  20.     if(ceros_y_unos[i]=='1')
  21.       unos_inx.push_back(i);
  22.  
  23.   /* mostrar posiciones */
  24.   cout << endl << endl << "Posiciones en las que hay un uno" << endl;
  25.   for(int i=0;i<unos_inx.size();i++)
  26.     cout << " " << unos_inx[i];
  27.  
  28.   cin.get();
  29.   ceros_y_unos.clear();
  30.   unos_inx.clear();
  31.   return 0;
  32. }

Saludos.