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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: [1]
1  Programación / Java / [ayuda]Llenar un vector apartir de 2 que cree en: 27 Julio 2015, 03:04 am
Hola amigos estoy estudiando vectores para tratar de entenderles mejor pero me he atorado mi problema es (Imprimir la serie 1,5,3,7,5,9,7,11 ) ya se que este problema se puede hacer sin vectores pero quiero hacerlo con vectores =). ya tengo practicamente todo tengo tengo 3 vectores 1 donde se guardara la serie, 1 donde me imprime los numeros (1,3,5,..,n) y 1 vector donde imprime los num (5,7,9,..,n) y aqui viene mi problema quiero juntar esos 2 vectores para que los imprima en 1 solo pero que imprima en este orden
EJEMPLO
VEC1 = 1 3 5 7
VEC2 = 5 7 9 11
SERIE = 1 5 3 7 5 9 7 11  // ocea que me imprima primero la pos 0 del vec1 y luego la pos 0 del vec2 y asi sucesivamente, he intentado varias cosas pero ninguna me funciona. me pueden ayudar porfavor.
Mi codigo es este:

public class Serie {
    public static void main(String[] args) {
     Scanner en = new Scanner(System.in);
     System.out.print("Ingresa el valor de la serie: ");
     int n = en.nextInt();
    
    int veco[] = new int[n];
    int conPar =0,conImp=0;

 //FUNCION QUE ME DICE SI ES PAR O NO
       public static boolean pi(int n ){
        if(n %2 == 0){
            return true;
        }else {
            return false;
        }
    }
  
//SE IMPRIME EL PRIMER ARREGLO SIN LA SERIE

    System.out.println("Arreglo primario");
    for (int i=0; i<n ; i++){
        veco [ i ]=i;
         System.out.print("\t"+veco [ i ]);
//SI ES PAR EL SE INCREMENTA UN CONTADOR PARA LOS PARES
        if(pi(i)){
            conPar++;
        }else {
//SI ES IMPAR EL SE INCREMENTA UN CONTADOR PARA LOS IMPARES
            conImp++;
        }
    }
// ARREGLOS VEC1, VEC2
     int par[] = new int[conPar];
     int imp[] = new int[conImp];
     //llenado arreglos auxiliares
    System.out.println("\ntArreglo pares");
   int aux1=1;
    for(int i = 0; i< conPar;i++){
         par [ i ] = aux1;
         aux1 +=2;
           System.out.println(par [ i ]);
//este arreglo contiene los valores 1,3,5,7,..,n
     }
    System.out.println("Arreglo imp");
    int aux=5;
    for(int i = 0; i< conImp;i++){
        
        imp [ i ] = aux;
        aux+=2;
        
          System.out.println(imp [ i ]);

//este arreglo contiene los valores 5,7,9,11,..,n
     }

//aqui es donde mi programa truena :S que es donde trato de juntar los 2 arreglos //y que me imprima la pos0 del arreglo 1 y despues la pos0 del arreglo 2   y asi //susesivamente
  
  //llenado del arreglo final
 
    for (int i =0 ; i< veco.length;i++){
                if(pi(veco [ i ])){
                veco [ i ] = par [ i ];
               } else{
                veco [ i ] = imp [ i ];
               }
       //lo que intento hacer es mientras la posicion del vector veco sea par  me //imprima lo que esta en el arreglo de par[] y si la pos del vector veco es impar //que me imprima lo que esta en el arreglo de imp[]  a si lo pense ya que la pos 0 //es par entonces imp el valor 1 del vector par, despues es impar ahora imprimira //el valor 5 del vector impar, y asi se seguia la pos2 es par entonces imprimira 3, //la pos3 es impar entonces imprimira 7 :S pero me da error    
     }
// aqui ya se imprime la serie :S pero no imprimira nada por que estoy mal en el llenado del arreglo final :C  
          
       //Mostrando el arreglo final
     for (int i = 0; i < n; i++){
            System.out.println("vector("+i +")="+veco[ i ]);
        }
    }
        
}

Porfavor, porfavor :S no entiendo como llenar ese arreglo y solo me falta eso :S de antemano muchisismas gracias cualquier comentario , critica constructiva es aceptada contal de mejorar =)
2  Programación / Programación C/C++ / Re: ayuda! Problema con conversion int to int* apuntadores en: 4 Marzo 2015, 06:27 am
Lo que pasa es que tienes un puntero normal que es  int *cadena y lo estas intentando pasar a una función "genera_cad(&cadena)" que espera un puntero doble, pero que en su cuerpo lo tratas como puntero normal. En definición estas haciendo una confusión.
Si quieres pasar un puntero a una funcion haz que la funcion espere un puntero de igual tipo. un ejemplo es:
int main(){
int *n
funcion(n);
}
void funcion(int *n){
}

Como ves no hace falta poner el operador & delante porque n es un tipo de variable especial que guarda la dirección del primer elemento de la cadena. A efectos n es lo mismo que &n[0] y por eso no necesitas poner & delante, ya que seria como hacer algo parecido a &&int[0] lo que esta fatal y carece de sentido.

Si necesitas saber el tamaño de la cadena mejor le pasas a 'tamanho' desde main y así te evitas tener que tener otra función para eso.

Otro punto a destacar es que en el caso de los int no hay NULL al final del array por lo que debes saber siempre su tamaño con anterioridad. Solo las cadenas de caracteres tienen el carácter NULL que indica que la cadena termina en un determinado lugar y que no hemos utilizado todo el espacio reservado.

Si reservamos 1000 chars y solo ponemos "Hola mundo" le sobraría 990 espacios de los cuales printf los imprimiría todos sin saber donde parar, incluso seguiría imprimiendo hasta después de que terminara los mil caracteres ya que nunca va a saber hasta donde debe imprimir.

Entonces en el caso de las cadenas de caracteres si reservo 1000 espacios y lo leo con la función que sea(scanf, gets...), esa función se va encargar de poner el null ahí justo al fin de lo que escribimos, si escribimos "Hola mundo" ten por seguro que en memoria esta "Hola mundo\0" ese \0 indica que ahí esta el fin de la cadena que introducimos y que no utilizamos los 1000 espacios reservados, como podemos imprimir como string con un printf ("%s", cadena); que es lo mismo que decir "imprime desde el primer carácter hasta encontrar el nulo \0" y no hasta el infinito y más allá. XD

Si te das cuanta que no puedes imprimir enteros como chars ya sabrás por que no existe ese NULL en los arreglos de enteros, porque eres tú quien se encarga de mostrarlos uno a uno con un bucle ya que no se puede imprimir como cadena.


Me tome la libertad de arreglar un poco su código haciéndolo algo más funcional.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int* genera_cad (int tam);
  6.  
  7. int main() {
  8.    srand ( time ( NULL ) ); // llame la funcion srand una sola vez al inicio de main
  9.    int tam = rand() % 361;
  10.    int *cadena = genera_cad ( tam );
  11.  
  12.    printf ( "\n la long de la cadena es %d\n", tam );
  13.    printf ( "%d\n", cadena[0]);
  14.  
  15.    free(cadena);
  16.    getchar();
  17.    return 0;
  18. }
  19.  
  20. int* genera_cad (int tam) {
  21.    int *cadena;
  22.    cadena = ( int * ) malloc ( sizeof ( int ) * tam );
  23.    int i;
  24.    for ( i = 0; i < tam; i++ ) {
  25.        * ( cadena + i ) = rand() % 2;
  26.    }
  27.    return cadena;
  28. }
  29.  

WOW :D En verdad muchas gracias amigo apenas ando empesando con apuntadores y vectores dinamicos y se me estan dificultando mucho jejeje  tomare en cuenta varios puntos que me mencionaste  ;-) ;-) ;-) ;-) Reitero muchas gracias por tu tiempo y ayuda amigo =D
PD: perdon por citarte jejeje

3  Programación / Programación C/C++ / Ayuda!! numeros aleatorios con apuntadores en: 4 Marzo 2015, 03:46 am
Hola amigos otra ves yo molestando y pidiendo su ayuda ya que no entiendo por que me muestra 0 (ya genere los numeros aleatorios con srand,y en la funcion longitud los leo pero en todas las ejecuciones de mi programa sale 0 ):S es un programa que te genera una cadena de num aleatorios y de ahi te cuenta cuantos numeros se generaron. Disculpen las faltas de ortografia espero me puedan orientar por que no entiendo  muy bien este tema :S gracias de antemano
Código
  1. void generacad(int **cadena)
  2. {
  3. int tam,i;
  4. srand(time(NULL));
  5. tam=rand()%361;
  6. *cadena=(int *)malloc(sizeof(int)*tam);
  7.  
  8. for(i=0;i<tam;i++)
  9. {
  10. *(*cadena+i)=rand()%2;
  11. }
  12. }
  13. int Longitud(int *cadena)
  14. {
  15. int i;
  16. for(i=0;*(cadena+i)!='\0';i++)
  17. {
  18. return(i);
  19. }
  20. }
  21. int main()
  22. {
  23. int *cadena;
  24. generacad(&cadena);
  25. printf("La longitud de la cadena es: %d", Longitud(cadena));
  26. getch();
  27. }
  28.  
4  Programación / Programación C/C++ / Re: [Ayuda]Serie [(1/1)/(1/2)*(1/3)/(1/4)*...*/(1/n)] en: 21 Febrero 2015, 09:38 am
jajajajaja perdona es que soy nuevo y no se que onda pero ya encontre para responder nomal xD
5  Programación / Programación C/C++ / Re: [Ayuda]Serie [(1/1)/(1/2)*(1/3)/(1/4)*...*/(1/n)] en: 21 Febrero 2015, 09:16 am
xDD es que no se como explicar jajaja toy muy menso xD pero mira amm como puedo hacer que me muestre
//printf("(1/%d) / (1/%d) * \t"  ,i);Es que si lo pongo a si con ese for no me muestra mi serie como quiero si no me muestra eso ejemplo le doy que quiere la serie del 3 y me muestra

(1/1)/ (1/-2) *  (1/2)/ (1/-2) * (1/3)/(1/-2)  cuando solo quiero que me muestre
(1/1)/(1/2)* (1/3) U.u
en caso de que sea 4
(1/1)/(1/2)* (1/3) (1/4)
y si es 5
(1/1)/(1/2)* (1/3) (1/4) *(1/5)
:D Estoy mal en el for o ocupo otra cosa :S ?
6  Programación / Programación C/C++ / Re: [Ayuda]Serie [(1/1)/(1/2)*(1/3)/(1/4)*...*/(1/n)] en: 21 Febrero 2015, 08:57 am
Hola amigo gracias por contestar si eso si lo entiendo bien ejeje pero solo una pregunta mira si pongo que recorra todos solo me los agarrara corridos no ? Lo que la serie me pide es agarrar los primeros 2 y esos hacer sus respectivas operaciones y despues irme con la otra pareja y hacer sus operaciones y de ahi multiplicarlas pero no se como hacer eso
si solo uso 1 for solo me agarra asi [(1/1)+ (1/2)+(1/3)+(1/4)+---+(1/n)]
Esa serie me mostraria lo que yo intento saber es como agarro los primeros 2 a si [((1/1)/ (1/2))  *  ((1/3)/(1/4))*...*/(1/n)] No se si me explico :S
7  Programación / Programación C/C++ / [Ayuda]Serie [(1/1)/(1/2)*(1/3)/(1/4)*...*/(1/n)] en: 21 Febrero 2015, 08:34 am
Hola amigos me presento soy nuevo en el foro estudio bachillerato y me empeso a gustar esto no soy muy bueno ya que no entiendo muy muy bien :s y estoy estudiando con un libro Piensa en c Mi duda viene siendo la siguiente empese a hacer los problemas todo bien hasta que llegue con esta serie :S Un programa antes me hice la serie de [(1/1)+(1/2)+(1/3) +...+1/n] y esa todo bien pero con esta me atore ya que no entiendo muy muy bien a un los ciclos anidados queria si ver si me pueden orientar como le hago Mi unico codigo que tengo es este

Código
  1. #include <stdio.h>
  2. int main()
  3. {
  4. float n=0,mul=0,div=0,resultado=0;
  5. printf("Ingrese el numero que quieres calcular de la serie: ");
  6. scanf("%f",&n);
  7. if (n == 0){
  8. printf("Error no existe la divicion entre 0");
  9. }
  10. else
  11. {
  12. for (int i=1;i<=n;i+=2)
  13. {
  14. printf("(1/%d) / \t",i);
  15. //AQUI ES DONDE SOLO QUIERO QUE ME ORIENTEN PARA QUE ME MUESTRE
  16. //printf("(1/%d /1/%d) * ",i);
  17. //Y A SI ME //MUESTRE MI SERIE CON SUS PAREJAS =)
  18.  
  19. }
  20.  
  21.   }
  22. printf("\nEl resultado de tu serie es: %d",resultado);
  23. return 0;
  24.  
  25. }
  26.  

Solo obtengo (1/1 ,1/3,1/5,1/7) No se como obtener  los numeros pares que son (1/2, 1/4,1/6,1/8) y a si hasta que termine y despues juntarlos  para que pueda imprimir la serie [(1/1)/(1/2)*(1/3)/(1/4)*...*/(1/n)] Me pueden orientar si ocupo un contador mas o otro ciclo se los agradeceria bastante Muchas gracias
PD: Solo ocupo que me ayuden a mostrarlos en ese orden :S y ya de ahi  yo me guio para calcular la serie.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines