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

#1091
Programación C/C++ / Re: ¿Duda sobre malloc en C?
19 Noviembre 2012, 23:23 PM
Es correcto, al reservar memoria mediante esa función solo debes utilizar el numero de bytes indicados en la llamada.

Otro detalle (tal vez solo un error ortográfico) es utilizar comillas dobles en las asignaciones, por ejemplo:
MessageToSend[0] = "1";
Ya que la literal "1" resulta en la dirección en memoria donde se almacena (de tipo "char *") mientras que "MessageToSend[0]" es de tipo "char".

De nuevo tal vez sea solo un "error de dedazo" y en tu programa utilizas comillas simples para indicar (de la forma correcta) los caracteres '1', '1' y '\0'.

Un saludo
#1092
Cita de: barnix456 en 15 Noviembre 2012, 19:39 PMHa y otra duda que tengo, como regreso desde una funcion al main
Mediante una sentencia "return;" si el tipo de retorno de la función es "void", en cualquier otro caso debe ser "return N;" donde "N" es un valor del tipo apropiado.

Cita de: barnix456 en 15 Noviembre 2012, 19:39 PMyo le puse return main(), mi IDE me marca error, aunque si lo hace, cual es la forma correcta de hacerlo??
No. Debes utilizar:
return;
Así la función finaliza y el control retorna a quien llamo a la función.

Un saludo
#1093
Programación C/C++ / Re: Ayuda con arrays
15 Noviembre 2012, 21:42 PM
Cita de: norris en 15 Noviembre 2012, 21:00 PMAunque sigo sin entender este ciclo.
for (i=N-2;i>=0;i--)
        t[i+1]=t[i];
    t[0]=aux2;


me podrias indicar que hace.Muchas gracias de antemano y perdon por las molestias
El bucle itera con el contador tomando los valores N-2 .. 0, esos son los indices de los elementos con excepción del ultimo. En cada iteracion se copia el elemento "i" en la posición "i + 1". Con ello se copia el penúltimo elemento en el ultimo, el antepenúltimo en el penúltimo, etc. con ello se da el efecto de desplazamiento.

El ultimo paso es copiar el ultimo elemento en la primera posición (almacenado previamente en la variable auxiliar):
t[0]=aux2;

Un saludo
#1094
Programación C/C++ / Re: Por que no se ordena?
15 Noviembre 2012, 21:36 PM
El problema se debe a que estas comparando las direcciones de memoria con:
if (pnames[j] > pnames[j + 1]){
   aux = pos[j];
   pos[j] = pos[j + 1];
   pos[j + 1] = aux;
}


En su lugar debes utilizar la función "strcmp" (prototipo en <string.h>):
if (strcmp(pnames[pos[j]], pnames[pos[j + 1]]) > 0){
   aux = pos[j];
   pos[j] = pos[j + 1];
   pos[j + 1] = aux;
}


Un saludo
#1095
Programación C/C++ / Re: Ayuda con arrays
15 Noviembre 2012, 16:19 PM
Una opción mas fácil es solo aparentar el desplazamiento, para ello puedes utilizar el operador de modulo '%'. Por ejemplo:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int num[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   size_t num_elem = sizeof num / sizeof num[0];
   size_t i;
   
   puts("Un desplazamiento a la izquierda:");
   for (i = 0; i < num_elem; i++)
      printf(" %d", num[(1 + i) % num_elem]);
   putchar('\n');
   
   puts("Un desplazamiento a la derecha:");
   for (i = 0; i < num_elem; i++)
      printf(" %d", num[(num_elem - 1 + i) % num_elem]);
   putchar('\n');
   
   return EXIT_SUCCESS;
}


Por supuesto si ello vale (o no) depende del enunciado. El valor 1 se indica en las expresiones solo para enfatizar el desplazamiento.

Un saludo
#1096
Los cambios que requiere el programa son muchos.

Lo primero que debes hacer es eliminar la inclusión del encabezado <string.h> ya que no es necesario, también hay que eliminar la pausa ya que no es parte del programa.

Y salvo casos excepcionales no se debe utilizar la función "feof" para controlar la lectura mediante un bucle, esto porque la función retorna verdadero (diferente de cero) solo después que una función de lectura falla.

Un archivo compuesto por lineas de texto plano no permite el acceso aleatorio primero porque varia la longitud de cada linea y segundo porque en ese modo no puede utilizarse la función "fseek" (no en la misma forma que un archivo abierto en modo "b").

¿Ya han visto el uso de estructuras? Porque para el acceso aleatorio lo usual es 1) Abrir el archivo en modo binario y 2) Escribir/Leer utilizando las funciones fwrite/fread, el objeto en cuestión es de tipo "struct x" el cual representa un registro.

Un programa que puede tomarse como base es:
#include <stdio.h>
#include <stdlib.h>

struct registro {
   char contenido [128];
   char nombre [50];
   char paterno [50];
   char materno [50];
   char licenciatura[50];
   char matricula[15];
};

int main(void)
{
   FILE *entrada;
   char nom_archivo[32];
   struct registro reg;
   
   puts("Nombre del archivo:");
   scanf("%31s", nom_archivo);
   if ((entrada = fopen(nom_archivo, "rb")) == NULL){
      perror(nom_archivo);
      return EXIT_FAILURE;
   }

   while(fread(&reg, sizeof reg, 1, entrada) == 1){
      printf("Nombre: %s\n", reg.nombre);
      printf("A.Paterno: %s\n", reg.paterno);
      printf("A.Materno: %s\n", reg.materno);
      printf("Licenciatura: %s\n", reg.licenciatura);
      printf("Matricula: %s\n", reg.matricula);
      puts("----");
   }
   fclose(entrada);
   
   return EXIT_SUCCESS;
}

Ese seria el equivalente para tener acceso aleatorio pero, como ya te había comentado, primero debemos saber si ya manejan estructuras.

Por supuesto lo primero que debes hacer es, mediante una operación similar, escribir los datos en el archivo.

Un saludo
#1097
En el caso del método de ordenación BubbleSort puedes utilizar el contador del bucle externo (numero de elementos a ordenar) para indicar el limite superior del bucle interno (ultimo elemento a verificar), mas o menos así:
for (i = N - 1; i > 0; i--){
   intercambio = 0;
   
   for (j = 0; j < i; j++)
      if (elem[j] > elem[j + 1]){
         /* Intercambiar elementos j y j + 1 */
         
         intercambio = 1;
      }
   
   if (!intercambio)
      break;
}


Un saludo
#1098
Programación C/C++ / Re: [Aporte] Aporte
14 Noviembre 2012, 16:32 PM
Sin animo de molestarte: tienes que explicarte de una forma mas clara.

Cita de: Stakewinner00 en 14 Noviembre 2012, 12:13 PMComo puedo generar un vector aleatorio que reserve un espacio dinamicamente??
En C++ puedes utilizar la clase vector, para ejemplos de su uso puedes utilizar el motor de búsqueda de los foros.

Cita de: Stakewinner00 en 14 Noviembre 2012, 12:13 PMOtra pregunta, que es mejor guardar los valores a medida que el mouse se va moviendo o guardar los valores en un vector y luego guardarlos como e echo??
Las dos opciones que das, en la practica, son lo mismo (revisa tu programa). ¿Te molesto si explicas en detalle lo que quieres hacer?

Un saludo
#1099
Cita de: Jomad205 en 14 Noviembre 2012, 11:18 AMLeí que en ascii al tener cada caracter una numeracion independiente, la manera de pasar de minusculas a mayusculas era restandole 32 , y viceversa.
No se recomienda ya que el lenguaje C no garantiza el juego de caracteres ASCII (solo un subconjunto de el) como tampoco que la diferencia entre las mayúsculas y minúsculas sea de 32. Es el caso usual si pero no esta garantizado.

En su lugar es mejor utilizar isalpha y tolower/toupper (prototipos en <ctype.h>) para conocer si un carácter es alfabético y de ser el caso pasarlo a minúsculas/mayúsculas.

Un saludo
#1100
El error es logico y se debe a la condición de la sentencia "if":
if ((('0' <= car1) && (car1 <= '9')) || (('A' <= car1) && (car1 <= 'F')) || ( ('a' <= car1) && (car1 <= 'f')) || (('0' <= car2) &&  (car2 <= '9') ) || ( ('A' <= car2) && (car2 <= 'F') ) || ( ('a' <= car2) && (car2 <= 'f')))

Antes de seguir un consejo: utiliza la función "isxdigit" (prototipo en <ctype.h>) para realizar la verificación. Al hacerlo la condición se reduce a:
if (isxdigit(car1) || isxdigit(car2)){
Espero ahora veas el error: realizas la conversión de los dos dígitos si alguno es valido.

Para solucionarlo hay que cambiar el uso del operador OR "||" por un AND "&&", con ello la condición sera verdadera solo si ambos operandos son verdaderos (en buen cristiano: solo si ambos caracteres son dígitos hexadecimales).

Un saludo