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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  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 ... 40
81  Programación / Programación C/C++ / operador ~ en: 22 Abril 2014, 23:21 pm
Saludos

tengo una duda a acerca de si el operador  ~ que se usa para obtener el complemento a 1 de un numero, puede usarse solo con números decimales o si tambien los puede usar con numeros binarios??
82  Programación / ASM / Re: CONTLOC en: 15 Abril 2014, 00:37 am
es para el hc12 de motorola

gracias
83  Programación / ASM / CONTLOC en: 14 Abril 2014, 21:20 pm
saludos, tengo una duda de como funciona el contador de localidades de un ensamblador cuando se tienen errores en una directiva por ejemplo si yo tengo

DB         300

aqui hay un error en el rango porque la directiva solo puede tener un valor del 0 al 255

DB         %11A

aqui hay otro error porque las bases binarias solo aceptan los digitos 1 y 0.

entonces en estos casos aumenta el contloc??? o se queda con el valor anterior??
gracias

84  Programación / Programación C/C++ / hexadecimal de 2 bytes en: 9 Abril 2014, 23:18 pm
Saludos

tengo un codigo que convierte un numero decimal en hexadecimal(siempre tiene que ser decimal-hexadecimal), el programa funciona bien el problema es que una vez que tengo el número hexa tengo que hacer que sea de dos bytes, o sea vendrían siendo 4 digitos como por ejemplo

numero decimal       hexadecimal      hexadecimal 2 bytes
33                               21                        0021

y no se como concatenarle los dos ceros al principio, pense en usar un strcat pero no funciono, creaba otra variable *cadena, y despues de asignarle memoria la inicializaba con: "0", y después le concatenaba la cadena "21" para que me quedara "021".

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. char convertirHexadecimal(int residuo);
  6.  
  7. int main()
  8. {
  9.    char num_hex,*cadena,c[2],*hexadecimal;
  10.    int numero = 33,cociente,residuo,i;
  11.    cadena = calloc(12,sizeof(char));
  12.    for(cociente = numero;cociente > 0;cociente/=16)
  13.    {
  14.        residuo = cociente % 16;
  15.        num_hex = convertirHexadecimal(residuo);
  16.        sprintf(c,"%c",num_hex);
  17.        strcat(cadena,c);
  18.    }
  19.    strrev(cadena);
  20.    printf("[%s]\n",cadena);
  21.    return 0;
  22. }
  23.  
  24. char convertirHexadecimal(int residuo)
  25. {
  26.    char letra;
  27.    switch(residuo)
  28.    {
  29.        case 10:
  30.           letra = 'A';
  31.           break;
  32.        case 11:
  33.           letra = 'B';
  34.           break;
  35.        case 12:
  36.           letra = 'C';
  37.           break;
  38.        case 13:
  39.           letra = 'D';
  40.           break;
  41.        case 14:
  42.           letra = 'E';
  43.           break;
  44.        case 15:
  45.           letra = 'F';
  46.           break;
  47.        default:
  48.           letra = '0' + residuo;
  49.    }
  50.    return letra;
  51. }
  52.  

85  Foros Generales / Dudas Generales / conversiones en: 8 Abril 2014, 02:43 am
Saludos

Alguien conoce de algun metodo que no sea el de divisiones sucesivas el cual convierta un numero decimal a cualquiera de las otras 3 potencias,(binaria,octal,hexadecimal)????

gracias
86  Programación / Programación C/C++ / validar numeros en: 5 Abril 2014, 02:17 am
Saludos, tengo el siguiente segmento de codigo dentro de un CASE '[' o
CASE INDEXADO_INDIRECTO, donde tengo que validar una cadena esta cadena que inicia con [, debe de tener o bien una D despues del corchete o un numero en base DECIMAL (tiene un rango especifico de valores para que sea valido)seguido por una , despues un registro que puede ser x,y,sp,pc  y por ultimo un corchete de cierre ]

por ejemplo si tengo:

[5,Sp -> error: le falta el ultimo corchete
[,x] -> no puede haber una instruccion vacia antes de la coma
[100,] ->no puede haber una instruccion vacia despues de la coma
[ ->despues del primer [ debe haber dos registros separados por una , y despues ]
[AD,sp]-> el primer registro tiene que ser la letra D

PERO cuando le pongo algo como:

[5A9,x] -> aqui me aparece que es un numero valido, pero para este caso en especial solo puede aceptar numeros decimales, y no se como corregir esto

Código
  1. case INDEXADO_INDIRECTO:
  2.            i = 1;
  3.            tam = strlen(operando);
  4.            car = operando[i++];
  5.            if(car == '\0')
  6.               printf("Despues del primer [ debe haber dos registros separados por , y un corchete de cierre\n");
  7.            else
  8.            {
  9.                if(operando[tam-1] != ']')
  10.                   printf("Error: No se encontro corchete de cierre\n");
  11.                else
  12.                {
  13.                    switch(car)
  14.                    {
  15.                        case ']':
  16.                           printf("No pueden estar los corchetes vacios\n");
  17.                           break;
  18.                        case ',':
  19.                           printf("No puede haber una instruccion vacia antes de la coma\n");
  20.                           registro = obtenerRegistro(operando);
  21.                           if((strcmp(registro,"\0")) == 0)
  22.                              printf("No puede haber una instruccion vacia despues de la coma\n");
  23.                              break;
  24.                        case '0':
  25.                        case '1':
  26.                        case '2':
  27.                        case '3':
  28.                        case '4':
  29.                        case '5':
  30.                        case '6':
  31.                        case '7':
  32.                        case '8':
  33.                        case '9':
  34.                           if((ptr = strchr(operando,',')) == 0)
  35.                              printf("Despues del primer corchete debe haber dos registros separados por una ,\n");
  36.                           else
  37.                           {
  38.                               base = 10;
  39.                               x = 1;
  40.                               k = 0;
  41.                               esIndexadoIndirecto16bits = 1;
  42.                               instruccion = obtenerInstruccion(operando,x);
  43.                               numero = obtenerNumero(instruccion,k,base);
  44.                               registro = obtenerRegistro(operando);
  45.                               registro = convertirMayusculas(registro);
  46.                               if((strcmp(registro,"\0")) == 0)
  47.                                  printf("No puede haber una instruccion vacia despues de la coma\n");
  48.                               else
  49.                               {
  50.                                   if(!verificarRegistro(registro))
  51.                                   {
  52.                                       esIndexadoIndirecto16bits = 0;
  53.                                       printf("Los registros validos de un direccionamiento Indexado indirecto de 16 bits son X,Y,SP,PC\n");
  54.                                   }
  55.                                   if(!verificarRangoIndexadoIndirecto(numero))
  56.                                   {
  57.                                       esIndexadoIndirecto16bits = 0;
  58.                                       printf("El rango valido de un direccionamiento Indexado Indirecto de 16 bits es de 0 a 65535\n");
  59.                                   }
  60.                                   if(esIndexadoIndirecto16bits)
  61.                                   {
  62.                                       if((indice = buscarDireccionamiento(encontrado,direccionamiento[7]))!= -1)
  63.                                          printf("Indexado Indirecto de 16 bits([IDX2]), de %s bytes\n",encontrado->total_bytes[indice]);
  64.                                       else
  65.                                          printf("el codop %s no acepta el direccionamiento indexado indirecto de 16 bits\n",encontrado->instruccion);
  66.                                   }
  67.                               }
  68.                           }
  69.                          break;
  70.                       case '-':
  71.                          if((ptr = strchr(operando,',')) == 0)
  72.                             printf("Despues del primer corchete debe haber dos registros separados por una ,\n");
  73.                          else
  74.                          {
  75.                              base = 10;
  76.                              x = 0;
  77.                              k = 1;
  78.                              esIndexadoIndirecto16bits = 1;
  79.                              instruccion = obtenerInstruccion(operando,x);
  80.                              numero = obtenerNumero(instruccion,k,base);
  81.                              registro = obtenerRegistro(operando);
  82.                              registro = convertirMayusculas(registro);
  83.                              if((strcmp(registro,"\0")) == 0)
  84.                                 printf("No puede haber una instruccion vacia despues de la coma\n");
  85.                              else
  86.                              {
  87.                                  if(!verificarRegistro(registro))
  88.                                  {
  89.                                      esIndexadoIndirecto16bits = 0;
  90.                                      printf("Los registros validos de un direccionamiento Indexado indirecto de 16 bits son X,Y,SP,PC\n");
  91.                                  }
  92.                                  if(!verificarRangoIndexadoIndirecto(numero))
  93.                                  {
  94.                                      esIndexadoIndirecto16bits = 0;
  95.                                      printf("El rango valido de un direccionamiento Indexado Indirecto de 16 bits es de 0 a 65535\n");
  96.                                  }
  97.                                  if(esIndexadoIndirecto16bits)
  98.                                  {
  99.                                      if((indice = buscarDireccionamiento(encontrado,direccionamiento[7]))!= -1)
  100.                                         printf("Indexado Indirecto de 16 bits([IDX2]), de %s bytes\n",encontrado->total_bytes[indice]);
  101.                                      else
  102.                                         printf("el codop %s no acepta el direccionamiento indexado indirecto de 16 bits\n",encontrado->instruccion);
  103.                                  }
  104.                              }
  105.                          }
  106.                          break;
  107.                       default:
  108.                          x = 1;
  109.                          esIndexadoIndirecto_Acumulador = 1;
  110.                          instruccion = obtenerInstruccion(operando,x);
  111.                          registro = obtenerRegistro(operando);
  112.                          registro = convertirMayusculas(registro);
  113.                          if(!indirectoAcumulador_D(instruccion))
  114.                          {
  115.                              printf("Error: El Acumulador valido de un Indexdo Indirecto de acumulador es D\n");
  116.                              esIndexadoIndirecto_Acumulador = 0;
  117.                          }
  118.                          if(!verificarRegistro(registro))
  119.                          {
  120.                              printf("Los registros validos de un Indexado Indirecto de Acumulador son X,Y,SP,PC\n");
  121.                              esIndexadoIndirecto_Acumulador = 0;
  122.                          }
  123.                          if(esIndexadoIndirecto_Acumulador)
  124.                          {
  125.                              if((indice = buscarDireccionamiento(encontrado,direccionamiento[6]))!= -1)
  126.                                 printf("Indexado Indirecto de Acumulador D,([D,IDX]), de %s bytes\n",encontrado->total_bytes[indice]);
  127.                              else
  128.                                 printf("el codop %s no acepta el direccionamiento indexado indirecto de acumulador D\n",encontrado->instruccion);
  129.                          }
  130.                      }
  131.                }
  132.            }
  133.            break;
  134.  

y las demas funciones son estas, no puse todo el codigo porque son como 1700 lineas de codigo,se que tengo algunas malas practicas de programacion pero ahora lo importante es corregir ese bug.

Código
  1. char *obtenerRegistro(char *operando)
  2. {
  3.    int j,i = 0;
  4.    char *cadena = NULL,c[2];
  5.    cadena = calloc(2,sizeof(char));
  6.    while(operando[i] != ',')
  7.       i++;
  8.    for(j = i+1;operando[j] != ']';j++)
  9.    {
  10.        sprintf(c,"%c",operando[j]);
  11.        strcat(cadena,c);
  12.    }
  13.    return cadena;
  14. }
  15. char *obtenerInstruccion(char *operando,int x)
  16. {
  17.    int i;
  18.    char *cadena = NULL,c[2],signo[] = {'\0',','};
  19.    cadena = calloc(7,sizeof(char));
  20.    for(i = x;operando[i] != ',';i++)
  21.    {
  22.        sprintf(c,"%c",operando[i]);
  23.        strcat(cadena,c);
  24.    }
  25.    return cadena;
  26. }
  27.  
  28. int obtenerNumero(char *operando,int x,int base)
  29. {
  30.    int i,potencia,num_decimal = 0,lon,entero = 0;
  31.    lon = strlen(operando);
  32.    for(i = lon-1,potencia = 1;i >= x;i--,potencia*=base)
  33.    {
  34.        if(esLetraBase16(operando[i]))
  35.           entero = hexadecimal(operando[i]);
  36.        else
  37.           entero = operando[i]-'0';
  38.        num_decimal+= potencia*entero;
  39.    }
  40.    if(operando[CERO] == '-')
  41.       num_decimal*= -1;
  42.    return num_decimal;
  43. }
  44.  
  45. int hexadecimal(char caracter)
  46. {
  47.    int decimal;
  48.    switch(caracter)
  49.    {
  50.        case 'A':case 'a':
  51.           decimal = 10;
  52.           break;
  53.        case 'B':case 'b':
  54.           decimal = 11;
  55.           break;
  56.        case 'C':case 'c':
  57.           decimal = 12;
  58.           break;
  59.        case 'D':case 'd':
  60.           decimal = 13;
  61.           break;
  62.        case 'E':case 'e':
  63.           decimal = 14;
  64.           break;
  65.        case 'F':case 'f':
  66.           decimal = 15;
  67.           break;
  68.        default:
  69.           printf("!Error!\n");
  70.    }
  71.    return decimal;
  72. }
  73.  
  74. char *convertirMayusculas(char *cadena)
  75. {
  76.    int i;
  77.    for(i = 0;cadena[i];i++)
  78.       cadena[i] = toupper(cadena[i]);
  79.    return cadena;
  80. }
  81.  
  82. int verificarRegistro(char *cadena)
  83. {
  84.    int i;
  85.    char *registro[] = {"X","Y","SP","PC"};
  86.    for(i = 0;i < 4;i++)
  87.    {
  88.        if((strcmp(cadena,registro[i])) == 0)
  89.           return 1;
  90.    }
  91.    return 0;
  92. }
  93.  
  94. int verificarRangoIndexadoIndirecto(int numero)
  95. {
  96.    if(numero >= CERO && numero <= MAX_IDX_INDIRECTO)
  97.       return 1;
  98.    else
  99.       return 0;
  100. }
  101.  

de antemano gracias
87  Programación / Bases de Datos / subconsultas en: 4 Abril 2014, 06:54 am
Saludos, tengo dos tablas en postgres que son la siguientes:

partidas_pedidos con sus campos: id_pedido(Pk),fecha_pedido,cantidad,producto(fK),cliente(Fk)

y info_clientes: nombre,apellido,id_cliente(Pk)

y me piden que haga una consulta:

Mostrar IDs de los clientes, sin repetirse, que en algun pedido hayan comprado mas de dos ejemplares de un mismo producto(cantidad) durante 1999

SELECT DISTINCT id_cliente
FROM info_clientes
WHERE id_cliente=(SELECT cliente FROM partidas_pedidos WHERE cantidad > 2 AND fecha_pedido LIKE '1999%');

pero me aparece un error que dice: subconsulta utilizada como expresion retorno mas de un registro y no entiendo por qué me sale esto
88  Programación / Bases de Datos / Re: consultas en: 2 Abril 2014, 03:50 am
muchas gracias Carloswaldo por tu respuesta, una ultima duda si yo tengo :

3.2 Mostrar los IDs de los clientes, sin repetirse, que en algún pedido hayan comprado más de dos ejemplares de un mismo producto (cantidad) durante 1999, utilizando subconsultas.

SELECT DISTINCT id_cliente
FROM info_clientes,partidas_pedidos
WHERE id_cliente=cliente AND cantidad > 2 AND fecha_pedido LIKE ‘1999%’;

aqui tengo que utilizar la tabla de info_clientes y la de partidas_pedidos, pero me aparece un error por donde tengo el id_cliente y no se por que? si creo que la subconsulta esta bien hecha
89  Programación / Programación C/C++ / Re: duda con arreglo de caracteres en: 1 Abril 2014, 17:30 pm
muchas gracias por sus respuestas

El arreglo lo necesito para una función como esta:

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

para que en la condicion operando != aqui pueda ser o '\0' o la coma
90  Programación / Programación C/C++ / duda con arreglo de caracteres en: 1 Abril 2014, 02:23 am
Saludos

si yo quiero declarar un arreglo de 2 caracteres que sean:

char arreglo[] = {'\0',','};

uno que es una coma, y el otro que es el simbolo de fin de cadena, pero me dicen que al declarar un arreglo de caracteres al final se le tiene que poner precisamente el simbolo '\0', entonces tendria yo que poner a fuerzas otro signo de fin de linea??

char arreglo[] = {'\0',',','\0'};
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 ... 40
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines