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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 ... 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [43] 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 ... 83
421  Programación / Programación C/C++ / Re: Saber numeros primeros en una cadena desordenada pero a voluntad del usuario ? en: 5 Enero 2013, 14:25 pm
Si pero habría que parar de introducir de alguna manera , como pedirle al usuario que el último número sea un 0, o cuantos números piensa introducir que no es lo más común, en este programa que acabo de hacer he utilizado el algoritmo de ordenación Quicksort , y las funciones las he sacado de aquí:

http://blog.e-urrea.com/noticias/2011/03/23/metodo-de-ordenacion-burbuja-y-quicksort-en-c/

Tu código es complicado de entender porque no utilizas nombres de variables descriptivos :S .El código que tienes ahí abajo va introduciendo numeros a la variable arrayDeNumeros hasta que se introduce un 0, después ordena el array y mira si cada numero es primo. Es sencillo. Te dejo el que he hecho así rápido para que te hagas una idea:
Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6.  
  7. bool esPrimo(unsigned int num);
  8. void Quicksort(int *unarray, int izq, int der);
  9. int pivot(int *unarray, int izq, int der);
  10.  
  11. int main(int argc, char *argv[])
  12. {
  13.    int *arrayDeNumeros= (int*) calloc(1000,sizeof(int*));
  14.    int lenArray = 0;
  15.    cout << "Ingrese una cadena de numeros terminada en 0:" << endl;
  16.    cin>>arrayDeNumeros[0];
  17.    for(register int i = 1; arrayDeNumeros[i-1]!=0 ; ++i)
  18.    {
  19.        cin>>arrayDeNumeros[i];
  20.        lenArray = i;
  21.    }
  22.    /** El algoritmo que viene a continuación lo que hace
  23.      *  es ordenar  el array  arrayDeNumeros de  menor  a
  24.      *  mayor,sinceramente,no sé como funciona solo que he
  25.      *  leído que era rápido y lo he buscado.
  26.      */
  27.  
  28.    Quicksort(arrayDeNumeros,0,lenArray);
  29.    /**
  30.      *  El siguiente bucle mira si los enteros que ya están
  31.      *  ordenados son primos o no.
  32.      */
  33.    for(register int i = 1; arrayDeNumeros[i]!=0; ++i)
  34.    {
  35.        if(esPrimo(arrayDeNumeros[i]))
  36.            cout<<"El numero "<<arrayDeNumeros[i]<<" es primo."<<endl;
  37.        else
  38.            cout<<"El numero "<<arrayDeNumeros[i]<<" no es primo."<<endl;
  39.    }
  40.    return 0;
  41. }
  42.  
  43. void Quicksort(int *unarray, int izq, int der)
  44. {
  45.    int pivote;
  46.    if(izq < der)
  47.    {
  48.        pivote=pivot(unarray, izq, der);
  49.        Quicksort(unarray, izq, pivote-1);
  50.        Quicksort(unarray, pivote+1, der);
  51.    }
  52. }
  53. int pivot(int *unarray, int izq, int der)
  54. {
  55.    int i;
  56.    int pivote, valor_pivote;
  57.    int aux;
  58.  
  59.    pivote = izq;
  60.    valor_pivote = unarray[pivote];
  61.    for (i=izq+1; i<=der; i++)
  62.    {
  63.        if (unarray[i] < valor_pivote)
  64.        {
  65.            pivote++;
  66.            aux=unarray[i];
  67.            unarray[i]=unarray[pivote];
  68.            unarray[pivote]=aux;
  69.  
  70.        }
  71.    }
  72.    aux=unarray[izq];
  73.    unarray[izq]=unarray[pivote];
  74.    unarray[pivote]=aux;
  75.    return pivote;
  76. }
  77. bool esPrimo(unsigned int num)
  78. {
  79.    if(num>2 && (num%2==0))/* Si el número es mayor que 2 y es divisible por el entonces no es primo*/
  80.        return false;
  81.    /**
  82.      * Para comprobar si un número es primo se suele
  83.      * utilizar el siguiente algoritmo, que consiste
  84.      * en llegar hasta la raiz cuadrada del número de
  85.      * dos en dos y empezando en 3, ya que un número
  86.      * que no es par en la vida puede ser dividido por
  87.      * un par.
  88.      */
  89.    unsigned int numSquare = (unsigned int)sqrt(num);
  90.    for(register unsigned int i =3; i<=numSquare ; i+=2)
  91.    {
  92.        if(num%i==0)
  93.        {
  94.            return false;
  95.        }
  96.    }
  97.    return true;
  98. }
422  Programación / Programación C/C++ / Re: ayuda con manejo de cadenas y apuntadores en: 4 Enero 2013, 20:43 pm
Cierto durasno, un descuido  :-\ . Si que es mas fácil pero si el usuario no sabe que para comparar cadenas hay que utilizar strcmp , no me atrevo a poner eso 0xDani .
423  Programación / Programación C/C++ / Re: ayuda con manejo de cadenas y apuntadores en: 4 Enero 2013, 17:54 pm
Para comparar cadenas en C se utiliza la función:
Código
  1. int strcmp ( const char * str1, const char * str2 );
Valor de retorno:
  • 0 si son iguales
  • Un valor mayor que 0 si el primer caracter de str1 ,que no coincide con el de str2, es mayor que el primer carácter de str2. Un valor menor que 0 indica lo contrario.

Fuente --> http://www.cplusplus.com/reference/cstring/strcmp/

Así que si la cadena que viene del buffer tiene final de cadena puedes hacer esto:

Código
  1. if(strcmp(linea,"fin")== 0)
  2. {
  3.  printf("\nLlegoo");
  4. }
424  Programación / Programación C/C++ / Re: Segmentation Fault al realizar funcion sobre Matriz en: 4 Enero 2013, 17:38 pm
Pues es un despiste, date cuenta que si le pasas a la función esto:
Código
  1. for(i=0;i<fil;i++)
  2.    {
  3.        printf("Introdueix els valors de la fila %d\n", i);
  4.        for(j=0;j<col;j++)
  5.            scanf("%d", &mat[i][j]);
  6.    }
  7.  
  8.  
  9.    Trasposada(fil,col,mat[MAX][MAX]);//<------------------------- Me refiero a eso
Es lo mismo que hacer esto:
Código
  1. Trasposada(fil,col,mat[10][10]);
Y tu le tienes que pasar la dirección inicial de la matriz es decir la 0,0 para que la vaya recorriendo:
Código
  1. Trasposada(fil,col,mat[0][0]);
O si lo prefieres así:
Código
  1. Trasposada(fil,col,&mat);
El código no mantenía los valores porque estaba accediendo a una memoria que estaba inicializada pero con valores aleatorios  :silbar:
Así que el código quedaría así:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX 10
  4.  
  5. void Trasposada(int fil,int col,int mat[MAX][MAX])
  6. {
  7.    int i, j;
  8.    int tras[MAX][MAX];
  9.  
  10.    for(i=0; i<fil; i++)
  11.        for(j=0; j<col; j++)
  12.            tras[i][j]=mat[i][j];
  13.  
  14.    for(j=0; j<fil; j++)
  15.    {
  16.        for(i=0; i<col; i++)
  17.            printf("%d",mat[i][j]);
  18.        printf("\n");
  19.    }
  20.  
  21. }
  22.  
  23. int main()
  24. {
  25.    int  i, j, fil=0, col=0, maxm, maxf;
  26.    int mat[MAX][MAX];
  27.    for(i=0; i!= MAX; ++i)
  28.    {
  29.        for(j=0; j!= MAX; ++j)
  30.            mat[i][j]=0;
  31.    }
  32.    //leer nº de filas y columnas
  33.  
  34.    printf("Indica les FILES que tindra la matriu(max 10):\n");
  35.    scanf("%d", &fil);
  36.    while(fil>MAX)
  37.    {
  38.        printf("Error. Has d'introduir un valor menor de 10\n");
  39.        scanf("%d", &fil);
  40.    }
  41.  
  42.    printf("Indica les COLUMNES que tindra la matriu(max 10):\n");
  43.    scanf("%d", &col);
  44.    while(col>MAX)
  45.    {
  46.        printf("Error. Has d'introduir un valor menor de 10\n");
  47.        scanf("%d", &col);
  48.    }
  49.  
  50.   //meter valores
  51.  
  52.    for(i=0; i<fil; i++)
  53.    {
  54.        printf("Introdueix els valors de la fila %d\n", i);
  55.        for(j=0; j<col; j++)
  56.            scanf("%d", &mat[i][j]);
  57.    }
  58.  
  59.    Trasposada(fil,col,&mat);
  60.  
  61.    return 0;
  62. }
425  Programación / Programación C/C++ / Re: Segmentation Fault al realizar funcion sobre Matriz en: 4 Enero 2013, 17:15 pm
Es que así solo con la función no se que hace, esta función que es ¿para mostrar la matriz? , que valores debo pasarle a fil y a col, ¿el valor de MAX? Es que si no no puedo probar xD. Si pudieses poner el código entero lo miramos mejor porque igual el problema no es la función si no los valores que se pasan.

¡Un saludo!
426  Programación / Programación C/C++ / Re: traduccion pascal/c++ en: 4 Enero 2013, 16:31 pm
Sí aunque es mejor dejarlo así(sin precision porque es un lío en C++ ponerle precisión a los enteros):
Código
  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7.    float i;
  8.    cout<< "Escriu quants diners tens amb euros i sabras si ets milionari"<< endl;
  9.    cin>>i;
  10.    cout<< "Tens " << fixed << i << " d euros"<<endl;// Esto te va a poner 0's al final al poner fixed
  11.    if(i < 1000000)
  12.        cout<< "Ho sento, no ets milionari..."<<endl;
  13.    else if(i >= 1000000)
  14.        cout<< "Ets milionari!!!"<<endl;
  15.    cin.sync();
  16.    cin.get();
  17.    return 0;
  18. }
Te dejo el programa compilado para que le eches un vistazo:
http://www.mediafire.com/?bhhpgdzgwm2sono
427  Programación / Programación C/C++ / Re: traduccion pascal/c++ en: 4 Enero 2013, 16:05 pm
Hola bigbonsai una traducción podría ser esta:
Código
  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7.    float i;
  8.    cout<< "Escriu quants diners tens amb euros i sabras si ets milionari"<< endl;
  9.    cin>>i;
  10.    cout<< "Tens " << setprecision(10) << i << " d euros"<<endl;
  11.    if(i < 1000000)
  12.        cout<< "Ho sento, no ets milionari..."<<endl;
  13.    else if(i >= 1000000)
  14.        cout<< "Ets milionari!!!"<<endl;
  15.    cin.sync();
  16.    cin.get();
  17.    return 0;
  18. }
428  Programación / Programación C/C++ / Re: [C] Problema con bucle en: 3 Enero 2013, 20:18 pm
Hola alvr , tu tienes que introducir un texto no letra a letra por lo tanto el:
Código
  1. scanf("%c",&letra);
No puede ser , ya que estás leyendo una sola letra.Además tienes que declarar un array de carácteres para albergar un texto no una sola letra, así que así no es:
Código
  1. char letra;
Debería de ser así:
Código
  1. char frase[20];/** El 20 lo puedes cambiar por la cantidad de carácteres que quieras **/
Entonces ahora para leer la frase que vas a introducir terminada en un punto debes usar el especificador de formato '%s'(sin las comillas) así:
Código
  1. scanf("%s",&frase);
Pero esta función solo lee palabras. Así que tendrás que lidiar con esta(mejor dicho con la segura):
Código
  1. gets(frase);
Aunque esta función no es muy segura ( echale un vistazo a |Lo que no hay que hacer en C/C++. Nivel basico| ) Esta función se sustituye por fgets:
Código
  1. fgets(frase,20,stdin);
Una vez tienes la frase leída e introducida en el array de carácteres trabajas con punteros o con el índice dentro de los corchetes y vas comprobando. En tu programa el problema principal es que solo lees letras no una frase.La función de comprobar si es mayúscula está bien. Si necesitas más ayuda aquí estamos.
429  Programación / Programación C/C++ / Re: Poner icono en ejecutable y fondo a consola pero con codigo ? en: 3 Enero 2013, 17:36 pm
Pero es que ¿donde has puesto el IDI ICON "uno.ico"? ¿Lo has puesto en el .cpp? Tienes que hacer un archivo .rc que contenga esto:
Código:
IDI ICON "uno.ico"
Y compilarlo con un main.cpp que contenga algo:
Código
  1. #include <iostream>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.  std::cout<<"Hello world!";
  6.  return 0;
  7. }
Todo en el mismo proyecto.
430  Programación / ASM / Re: Shellcode direcciones en: 2 Enero 2013, 21:43 pm
Por lo que he estado leyendo no se puede hacer push con registros de 32 bits tiene que ser con el de 64 entero si se está programando en 64 bits ya que la pila se maneja así.. Yo no tengo mucha idea aviso eh  :laugh: pero no se ¿se podría hacer esto?:
Código
  1.    .section .text
  2. .globl _start
  3. _start:
  4.  
  5. pushq %rax
  6. pushq $0x6c746366
  7. pushq $0x702f6e69
  8. pushq $0x62732f2f
  9. movq %rsp, %rdi
  10. pushq %rax
  11. pushq $0x642d
  12. pushq %rdi
  13. movq %rsp, %rsi
  14. xorq %rax, %rax
  15. movb $0x3b, %al
  16. int $0x80
  17.  
  18. xorq %rax, %rax
  19. movb $0x01, %al
  20. int $0x80

¿O la he liado demasiado?
He sacado esto de la documentación de AMD:
Citar
In 64-bit mode, the operand size of all PUSH instructions defaults to 64 bits, and there is no prefix available to encode a 32-bit operand size. Using the PUSH CS, PUSH DS, PUSH ES, or PUSH SS instructions in 64-bit mode generates an invalid-opcode exception.
Pushing an odd number of 16-bit operands when the stack address-size attribute is 32 results in a misaligned stack pointer.
Fuente: http://support.amd.com/us/Processor_TechDocs/24594_APM_v3.pdf
Páginas: 1 ... 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [43] 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 ... 83
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines