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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ... 40
111  Programación / Programación C/C++ / Re: modos de direccionamiento indexado de 5/9/16 bits en: 8 Marzo 2014, 02:56 am
gracias eferion por tu respuesta, lo que yo estaba intentando hacer es como tengo una cadena por ejemplo "-64,SP" pues priimero el numero -64 lo tengo que convertir a int porque es una cadena, entonces agarro lo que se encuentra antes de la coma primero convierto el numero a entero y despues si veo que tiene el signo de menos lo multiplico por menos 1. como tengo diferentes rangos para los direccionamientos pero el registro( lo que va despues de la coma) es el mismo hago lo siguiente

primero verifico que el registro sea X,Y,SP o PC y despues veo en que rango se encuentra el numero para imprimir es de 5 bits, o es de 9 bits....

pero ahora tengo que hacer otro direccionamiento:

3,+SP-> imprime es de PreIncremento
3,SP+-> imprime es de PostIncremento
3,-SP-> imprime es de PreDecremento
3,SP-  -> imprime es de PostDecremento

pero no se bien como hacerle, primero veo que tenga un signo al principio, y despues como le hago para que verifique los que tienen el signo al final?? alguna idea??
112  Programación / Programación C/C++ / modos de direccionamiento indexado de 5/9/16 bits en: 5 Marzo 2014, 21:32 pm
Saludos

tengo el siguiente código en el que tengo una cadena de nombre operando como la siguiente:

2983,X

y tengo que averiguar que modo de direccionamiento indexado es, las reglas son:

Modo indizado de 5 bits. en el operando se representan números decimales con un rango de -16 a 15, despues del valor debe de haber siempre una coma, y después el nombre de registro que puede ser X,Y,SP o PC

Modo indizado de 9 bits. Es lo mismo que en el de arriba solo que los numeros decimales de  rango desde -256 a -17 y de 16 a 255.

Modo indizado de 16 bits. Es lo mismo solo que tiene rango de 256 a 65535.

para estos tres modos de direccionamiento ya tengo el código que funciona bien, pero tengo que agregarle otro modo de direccionamiento un poco diferente y no se bien cómo hacerlo:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #define CERO 0
  6. #define MAX_DIRECTO 255
  7. #define MAX_IDX_INDIRECTO 65535
  8. #define MIN_IDX_9BITS 16
  9. #define MAX_IDX_9BITS 255
  10. #define MIN_EXT_IDX16BITS 256
  11. #define MAX_EXT_IDX16BITS 65535
  12. #define MIN_IDX_5BITS -16
  13. #define MAX_IDX_5BITS 15
  14. #define MIN_9BITS_NEG -256
  15. #define MAX_9BITS_NEG -17
  16. #define INMEDIATO '#'
  17. #define HEXADECIMAL '$'
  18. #define OCTAL '@'
  19. #define BINARIO '%'
  20. #define INDEXADO_INDIRECTO '['
  21.  
  22. int verificarRegistro(char *cadena);
  23. void verificarRangoIndexado_5_9_16bits(int num);
  24. void modoDireccionamiento(char *operando);
  25. void indexado_5bits_9bits_16bits(char *operando,int x);
  26. int convertir_a_numero(char *cadena);
  27.  
  28. int main()
  29. {
  30.    char *operando = "5,X";
  31.    modoDireccionamiento(operando);
  32.    return 0;
  33. }
  34.  
  35. void modoDireccionamiento(char *operando)
  36. {
  37.    int car;
  38.    car = operando[0];
  39.    switch(car)
  40.    {
  41.        case '-':
  42.           x = 1;
  43.           indexado_5bits_9bits_16bits(operando,x);
  44.           break;
  45.        case '0':
  46.        case '1':
  47.        case '2':
  48.        case '3':
  49.        case '4':
  50.        case '5':
  51.        case '6':
  52.        case '7':
  53.        case '8':
  54.        case '9':
  55.           x = 0;
  56.           indexado_5bits_9bits_16bits(operando,x);
  57.           break;
  58.        default:
  59.           printf("Error");
  60.    }
  61. }
  62.  
  63. void indexado_5bits_9bits_16bits(char *operando,int x)
  64. {
  65.    int i,j,num;
  66.    char *cadena = NULL,c[2],*cadena2 = NULL;
  67.    cadena = calloc(6,sizeof(char));
  68.    cadena2 = calloc(2,sizeof(char));
  69.    for(i = x;operando[i] != ',';i++)
  70.    {
  71.        sprintf(c,"%c",operando[i]);
  72.        strcat(cadena,c);
  73.    }
  74.    for(j = i+1;operando[j] != '\0';j++)
  75.    {
  76.        sprintf(c,"%c",operando[j]);
  77.        strcat(cadena2,c);
  78.    }
  79.    num = convertir_a_numero(cadena);
  80.    if(x == 1)
  81.       num = num*(-1);
  82.    if(verificarRegistro(cadena2))
  83.       verificarRangoIndexado_5_9_16bits(num);
  84.    else
  85.       printf("\nRegistro invalido para modo de direccionamiento indexado Indirecto\n");
  86. }
  87.  
  88. int convertir_a_numero(char *cadena)
  89. {
  90.    int i,j,entero,numero = 0,lon;
  91.    int potencias[] = {1,10,100,1000,10000};
  92.    lon = strlen(cadena);
  93.    for(i = 0,j = lon-1;cadena[i] != '\0';i++,j--)
  94.    {
  95.        entero = cadena[i]-48;
  96.        numero += entero*potencias[j];
  97.    }
  98.    return numero;
  99. }
  100.  
  101. void verificarRangoIndexado_5_9_16bits(int num)
  102. {
  103.    if(num >= MIN_IDX_5BITS && num <= MAX_IDX_5BITS)
  104.       printf("Indexado de 5 bits, (IDX)\n");
  105.    else if((num >= MIN_9BITS_NEG && num <= MAX_9BITS_NEG)||(num >= MIN_IDX_9BITS && num <= MAX_IDX_9BITS))
  106.       printf("Indexado de 9 bits, (IDX)\n");
  107.    else if(num >= MIN_EXT_IDX16BITS && num <= MAX_EXT_IDX16BITS)
  108.       printf("Indexado de 16 bits, (IDX)\n");
  109.    else
  110.    {
  111.        printf("Error: El rango valido de un direccionamiento indexado de 5 bits es de -16 a 15\n");
  112.        printf("el de un direccionamiento indexado de 9 bits es de -256 a -17 y de 16 a 255\n");
  113.        printf("y el de un direccionamiento indexado de 16 bits es de 256 a 65535\n");
  114.    }
  115. }
  116.  
  117. int verificarRegistro(char *cadena)
  118. {
  119.    int i;
  120.    char *registro[] = {"X","Y","SP","PC"};
  121.    for(i = 0;i < 4;i++)
  122.    {
  123.        if((strcmp(cadena,registro[i])) == 0)
  124.           return 1;
  125.    }
  126.    return 0;
  127. }
  128.  

y el direccionamiento que le tengo que agregar dice:

Modo indexado de Pre/Post Incremento Decremento: sus valores númericos tienen rango de 1 a 8, después del valor debe de haber siempre una coma y después de la coma hay un signo positivo o negativo y despues el nombre de registro X,Y o SP, algo como: +X,-SP..O tambien puede tener primero el nombre del registro y despues el signo como: X+,SP-

Pero no tengo una idea clara de como hacer las modificaciones al codigo que ya tengo para agregarle esto,el problema es que los registros despues de la coma son diferentes a los de los otros 3 direccionamientos, alguna idea??

gracias de antemano
113  Programación / Programación C/C++ / Re: fopen() y c++ en: 3 Marzo 2014, 21:33 pm
muchas gracias por sus respuestas, tienen razon había olvidado ponerle las librerias, apenas estoy empezando a programar en c++, siempre lo habia hecho en c. con el código todavía tengo problemas, tengo que hacer que me lea un archivo de texto y que lo imprima en pantalla, pero me imprime basura y no entiendo por qué?

Código
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #define MAX 40
  5.  
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10.    FILE *fd;
  11.    int car;
  12.    char archivo[MAX],nombre[MAX];
  13.    cout << "Que archivo deseas abrir: " << endl;
  14.    cin >> nombre;
  15.    sprintf(archivo,"%s.txt",nombre);
  16.    if((fd = fopen(archivo,"r"))!= NULL)
  17.    {
  18.        while((car = fgetc(fd)) != EOF)
  19.           cout << "" << car;
  20.    }
  21.    else
  22.       cout << "No se pudo abrir archivo" << endl;
  23.    return 0;
  24. }
  25.  
114  Programación / Programación C/C++ / fopen() y c++ en: 3 Marzo 2014, 19:30 pm
Saludos

estoy empezando un código en c++ en el cual tengo que usar fopen para abrir un archivo y sprintf, pero no entiendo por qué en c si me funcionan perfectamente y en c++ me aparece un error que dice:

fopen was not declared in this scope, y lo mismo dice para sprintf
115  Programación / Programación C/C++ / problema al leer archivo en: 2 Marzo 2014, 01:11 am
Saludos, tengo un archivo que tengo que leer e imprimir en pantalla y este archivo es bastante grande, el problema es que no lo imprime completo, pero si le empiezo a quitar lineas ya me lo imprime bien, lo que hace es que mientras mas lineas le agrego, en pantalla las lineas de al principio van desapareciendo, o sea me va cortando la parte de arriba para darle lugar a las lineas que voy agregando abajo,¿a que se debe esto y como puedo solucionarlo??

gracias
116  Programación / Programación C/C++ / Re: modos de direccionamiento en: 24 Febrero 2014, 02:50 am
Saludos rir3760 no es para la materia de compiladores, esto es basicamente para crear un ensamblador para la materia de Programacion de sistemas, que es la antesala para compiladores, y el codigo sirve para verificar los diferentes modos de direccionamiento que puede tener, en este caso estoy verificando los indexados, los que estan entre corchetes, pero me queda una ultima duda, si por ejemplo tengo [D,SP   , aqui el operando esta todo bien excepto porque no tiene un corchete al final ']'. ¿Cómo puedo hacer que me verifique este error si en la función direccionamientoIndexado tengo que el for va a seguir iterando hasta que encuentre el ], pero en este caso no hay ningun corchete:

Código
  1. void direccionamientoIndexado(char *operando)
  2. {
  3.    int i;
  4.    char *cadena = NULL,c[2];
  5.    cadena = calloc(2,sizeof(char));
  6.    for(i = 3;operando[i] != ']';i++)
  7.    {
  8.        sprintf(c,"%c",operando[i]);
  9.        strcat(cadena,c);
  10.        printf("%s",cadena);
  11.    }
  12. }

de antemano gracias
117  Programación / Programación C/C++ / Re: numero maximo permitido en: 22 Febrero 2014, 02:14 am
Saludos amchacon, el código es el siguiente:

Código
  1. #include <iostream>
  2. #define DIEZ 10
  3.  
  4. using namespace std;
  5.  
  6. int buscarDigito(long int numero,int digito);
  7.  
  8. int main()
  9. {
  10.    long int numero;
  11.    int digito,x;
  12.    cout << "Dame el numero: " << endl;
  13.    cin >> numero;
  14.    cout << "Que digito desea buscar? " << endl;
  15.    cin >> digito;
  16.    x = buscarDigito(numero,digito);
  17.    cout << "\nEl digito " << digito << " se repite " << x << " veces" << endl;
  18.    return 0;
  19. }
  20.  
  21. int buscarDigito(long int numero,int digito)
  22. {
  23.    int residuo,cociente,repetidos = 0;
  24.    for(cociente = numero;cociente != 0;cociente = cociente/10)
  25.    {
  26.        residuo = cociente % 10;
  27.        if(residuo == digito)
  28.           repetidos++;
  29.    }
  30.    return repetidos;
  31. }

y si le pido que le ingrese un numero como: 10040050, el codigo funciona correctamente y me dice, que digito desea buscar, si le digo que 0 me imprime

el digito 0 se repite 5 veces

pero si le ingreso un numero mas grande como: 100019860100890 el programa ya no funciona, ni siquiera me deja que le diga cual digito quiero buscar, una de las restricciones que tengo es que tengo que poder introducir numeros mayores a 100000000 pero el tipo de dato no podra ser char o cadena entonces como lo resuelvo??
gracias
118  Programación / Programación C/C++ / numero maximo permitido en: 20 Febrero 2014, 22:52 pm
Saludos

tengo que hacer un programa que me permita ingresarle un numero mayor a 100000000, y busque si el digito x existe en el número y cuantas veces se repite, el numero no debe de ser cadena o char, en el algoritmo ya tengo pensando como hacerlo ya que pues tienes que hacer un busqueda y eso no es la parte dificil, no necesito el codigo. El problema es que me ponen de restriccion que el usuario pueda meter el numero maximo permitido por el sistema o sea hasta que se llene el buffer y que sea a prueba de error, alguna idea de como hacer esto??

gracias
119  Programación / Programación C/C++ / Re: Macros en C en: 19 Febrero 2014, 03:35 am
muchas gracias por sus respuestas una ultima duda, si yo tengo en un switch varios cases que van a realizar las mismas operaciones,por ejemplo:

Código
  1.  
  2. switch(car)
  3. {
  4.               case '1':
  5.               case '2':
  6.               case '3':
  7.               case '4':
  8.               case '5':
  9.               case '6':
  10.               case '7':
  11.               case '8':
  12.               case '9':
  13.               ........
  14.               ........
  15.               default:
  16.                  printf("Error");
  17.           }
  18.           break;

podria yo juntas los cases 1,2,3,4,5,6,7,8,9 en un solo case, llamado por ejemplo: IDM y que ese IDM fuera una macro que tuviera definida como

#define IDM if(car > 0 && car < 10) para asi poder ahorrarme lineas de codigo, puede una macro contener un condicional (un if en este caso)???

gracias
120  Programación / Programación C/C++ / Re: modos de direccionamiento en: 18 Febrero 2014, 16:12 pm
gracias erest0r, si de esa manera es mucho mejor, y asi ya no tengo que repetir tantos strcmp's en la línea del if. Una última pregunta, una vez que ya tengo concatenadas todas las letras que quiero en la cadena(con ayuda del strcat), tengo que agregarle al final el carácter de fin de cadena '\0'? para que no almacene basura
Páginas: 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ... 40
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines