Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rir3760

#761
Cita de: josri en 28 Junio 2013, 06:45 AM
se supone que tengo que verificar que una variable declarada (en C) como int o como double se use de forma adecuada es decir que no sobrepase su rango

[...]

El caso es que una vez declaradas dos variables int (por ejemplo), como podria hacer una operacion que supere su rango??.
Solo con las dos variables no es posible. En el caso de los enteros con signo se generaria comportamiento no definido (en buen cristiano: ya nos [CENSORED]) y en el caso de los sin signo el resultado se mueve al rango valido mediante modulo MAX + 1 (MAX es el valor maximo del tipo sin signo en cuestion).

Con ciertos tipos (por ejemplo int) una opcion es utilizar dos variables con un rango de valores mayor. Por ejemplo si la operacion a realizar es con el tipo int utilizarias tres variables auxiliares de tipo long long, dos para almacenar los valores y la tercera para el resultado. Mas o menos asi:
int int_a = ALGUN_VALOR;
int int_b = ALGUN_VALOR;

/* ... */

long long a = int_a;
long long b = int_b;

long long res = a operador b;

Esto con sus limitaciones ya que el rango de valores depende de la implementacion.

Cita de: josri en 28 Junio 2013, 06:45 AMno entiendo esa parte de ejemplificar alguna operacion que supere el rango de un int o double, para que asi con otro programa que lee este codigo fuente marque el error en la operacion e indique que sobrpaso el rango.
Si manejas bien el ingles una pagina que describe el tema con algunos ejemplos es INT02-C. Understand integer conversion rules.

Un saludo
#762
Otra forma de verificar si una matriz cuadrada es triangular superior:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int num [3][3] = {
      {1, 2, 3},
      {0, 5, 6},
      {0, 0, 9}
   };
   int N = 3;
   int i;
   int j;
   
   i = 1;
   j = 0;
   while (i < N && num[i][j] == 0)
      if (++j == i){
         i++;
         j = 0;
      }
   printf("Es triangular superior? %s\n", i == N ? "Si" : "No");
   
   return EXIT_SUCCESS;
}


Un saludo
#763
Programación C/C++ / Re: pregunta
27 Junio 2013, 17:28 PM
Cita de: alejandro5837 en 27 Junio 2013, 04:44 AMtengo un problema con este programa corre pero al fina me manda un mensaje de error donde dice que la variable h ha sido corrompida o algo asi me podrían ayudar
Ese programa tiene algunas deficiencias ya que no utiliza casi nada de C++. Por favor lee el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Cosas a cambiar hay a varias empezando por el nombre de los encabezados y la definición de la función main.

El error principal se encuentra en la linea:
Código (cpp) [Seleccionar]
scanf("%s",&h);
Ello porque el especificador "%s" es para leer una palabra, si quieres leer un carácter debes utilizar " %c".

Un saludo
#764
Cita de: m@o_614 en 25 Junio 2013, 19:08 PMtengo la duda de si en vez de usar dos fors podria meter el metodo de ordenamiento en el for que me pide que ingrese los elementos del vector para ahorrar lineas de codigo
Puedes combinar la ordenacion y la entrada de datos para reducir el numero de lineas pero, como ya te comentaron, eso no afecta el rendimiento del algoritmo.

Por ejemplo:
#include <stdio.h>
#include <stdlib.h>

#define MAX_ELEM  16U

void swap(int *p, int *q);

int main(void)
{
   int num[MAX_ELEM];
   unsigned num_elem;
   unsigned i;
   unsigned j;
   
   printf("Numero de elementos del vector: ");
   fflush(stdout);
   if (scanf("%u", &num_elem) != 1 || num_elem > MAX_ELEM)
      return EXIT_FAILURE;
   
   for (i = 0; i < num_elem; i++){
      printf("Valor del elemento %d: ", i + 1);
      fflush(stdout);
      if (scanf("%d", num + i) != 1)
         return EXIT_FAILURE;
     
      for (j = i; j > 0 && num[j] < num[j - 1]; j--)
         swap(num + j, num + j - 1);
   }
   
   for (i = 0; i < num_elem; i++)
      printf(" %d", num[i]);
   putchar('\n');
   
   return EXIT_SUCCESS;
}

void swap(int *p, int *q)
{
   int aux;
   
   aux = *p;
   *p = *q;
   *q = aux;
}


Un saludo
#765
Compilando tu programa con CygMing (la versión de gcc 4.5.3 para el entorno Cygwin) se presentan las dos advertencias y no se genera el ejecutable.

¿Que versión de gcc estas utilizando?

Un saludo
#766
Una ventaja de utilizar cout y cin es la sincronización de estos: si se utiliza cout para enviar un texto a la salida estándar y a continuación se utiliza cin el bufer del primero se vacía automáticamente.

Un saludo
#767
Programación C/C++ / Re: Problema con Char
24 Junio 2013, 18:03 PM
Cita de: <<<-Underwar->>> en 24 Junio 2013, 09:12 AM
Código (cpp) [Seleccionar]

class M{
};

int main(){
char c[5];

c = typeid(M).name();

return 0;
}
En C y C++ los arrays no pueden utilizarse en asignaciones (en ellas son lvalues pero no son modificables).

La solución es utilizar la función strcpy como en el ejemplo de satu para copiar la cadena en el array o bien utilizar un objeto de clase string como en el ejemplo de ecfisa.

Un saludo
#768
Otro error en el programa se encuentra en el bucle:
Código (cpp) [Seleccionar]
for (i = 1; i <= 100; i++){
   cout << "Ingrese el dato numérico: " << endl;
   cin >> x;
   
   if (i > mayor){ // <==
      mayor = x;
   }
   if (x < menor){
      menor = x;
   }
}

En la linea indicada estas comparando el mayor con el indice "i" cuando deberías comparar con el valor introducido por el usuario: "x > mayor".

Un saludo
#769
Otro detalle a tener en consideración: cuando se envía una cadena a la salida estándar y esta no termina con el carácter de avance de linea '\n' se debe llamar  a la función fflush para así garantizar que el texto realmente se envié y no termine en el bufer de la salida estándar.

En este caso:
printf ("Ingrese el dato numerico %d: ", i);
fflush(stdout);
scanf ("%d", &num);


Un saludo
#770
Cita de: SARGE553413 en 21 Junio 2013, 18:09 PMPero supongamos que hago una funcion que devuelva un hostent*, en el cuerpo de esta función podría reservar memoria con malloc, y después usar el memcpy() sin necesidad de declarar y vector ¿cierto?
Tienes que explicarte de una forma mas clara, si puedes poner un ejemplo e indicar el lenguaje de programación que estas utilizando mejor.

Cita de: SARGE553413 en 21 Junio 2013, 18:09 PMOtra cosa, si la estructura tiene dentro punteros, al usar memcpy(), ¿estos punteros apuntan correctamente no?, es decir, si tengo 2 vectores a y b, uno de tam. 20 y otro de tam. 40, en ese caso tras usar memcpy(), mis nuevos a y b tendrán también 20 y 40 de tamaño, ¿cierto?
El tamaño de los campos depende de la declaración de la estructura, el uso de la función memcpy es tema aparte.

----

Cita de: zonahurbana en 21 Junio 2013, 18:32 PM
Cita de: amchacon en 21 Junio 2013, 13:08 PMDepende, en C++ se puede definir un operador = específico para la estructura [...]

Tal vez no sea muy adecuado preguntar por acá, pero es una pregunta corta:
¿Cómo puedo encontrar más acerca de estos temas?
Es decir, ¿con qué nombre lo busco?
El tema es "Sobrecarga de operadores en C++", una pagina sobre ello es 22 Operadores V: Operadores sobrecargados.

Un saludo