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

#1101
Programación C/C++ / Re: duda tuplas
11 Noviembre 2012, 16:29 PM
Eso se debe a que te falta indicar el valor de retorno en la funcion "copiaTiempo", al final de esta debes indicarlo con:
Código (cpp) [Seleccionar]
   return t;
}


Un saludo
#1102
Programación C/C++ / Re: Duda con strlen
11 Noviembre 2012, 03:22 AM
Bueno, aquí voy de metiche, pedante y [CENSORED]. Con todo espero se tome como una critica constructiva.

Cita de: 0xDani en 10 Noviembre 2012, 23:15 PMpero se me ocurre una mejora, o al menos no hay que utilizar el if:
unsigned int mystrlen(char *s)
{
    unsigned int cont = 0;

    for(;*s;s++)
    *s!=0x20 ? cont++: ;
    return cont;
}

Aunque seguramente el compilador va a generar el mismo codigo, asi queda mas "pro"  :'P
Honestamente no. Ello porque el operador "?:" requiere de tres operandos, utilizar solo dos (como en tu caso) es un error.

La recomendación en estos casos es:
A) Si se debe realizar una operación ante una condición dada se utiliza una sentencia de selección (por ejemplo "if").
B) Si se debe elegir uno de dos valores se utiliza el operador "?:"

De nuevo: es una recomendación, nada impide usar el operador "?:" a rajatabla pero en semejante escenario su uso esta a la altura de las palabras reservadas "auto" y "register".

Veamos el ejemplo de leosansan:
cadena[i] != ' ' ? k++ : 0;
Al agregar el cero solo para cumplir con la sintaxis del lenguaje terminamos con una construcción forzada ya que solo nos interesa el incremento del contador, nada mas (y esa es la clave).

Para el caso es mejor:
if (cadena[i] != ' ')
   k++;

En el sentido de ser solo lo necesario.

Un saludo
#1103
Otro detalle a corregir: en C y C++ los indices van desde 0 hasta "N - 1" donde "N" es el numero de elementos en el array. Estos dos bucles y similares:
for (x=1; x<=RA; x++){
   for (y=1; y<=CA; y++){
      ...


Hay que cambiarlos a:
for (x = 0; x < RA; x++){
   for (y = 0; y < CA; y++){
      ...


Un saludo
#1104
Programación C/C++ / Re: Error en malloc()
9 Noviembre 2012, 15:48 PM
Cita de: DickGumshoe en  9 Noviembre 2012, 15:18 PMSi lo que quieres es reservar sizeMalloc espacios de char, debes hacer esto:

char* funcion(int sizeMalloc){
     char* buffer=(char*)malloc(sizeMalloc * sizeof(char));
     return buffer;
}
Es valido pero innecesario. Ya que tanto la conversión explicita como el tamaño del objeto ("sizeof(char)" siempre es igual a uno) se pueden eliminar la función se reduce a:
char *funcion(int sizeMalloc)
{
   return malloc(sizeMalloc);
}

Considerando que no hay ningún proceso adicional seria mejor llamar a "malloc" directamente.

Cita de: soyloqbuskas en  9 Noviembre 2012, 03:39 AMTengo un problema con la funcion malloc() porque me da fallo de segmentacion....el codigo es como este...
Solo con el código fuente de la función no es posible indicarte la causa del problema que mencionas y te puedo asegurar que, salvo un caso excepcional, el error esta en otro lugar.

Lo recomendado en un caso como este es publicar el programa mas pequeño posible que exhiba el problema, en base a el ya podemos buscar que esta mal.

Un saludo
#1105
Programación C/C++ / Re: ayuda con vectores c++
9 Noviembre 2012, 01:51 AM
Cita de: indict en  8 Noviembre 2012, 19:16 PMquiero que dada una secuencia de números se imprima por pantalla.

Hice lo siguiente, (no puedo usar el bucle for)
En la función "leer_seq_i" tienes dos lecturas "cin >> n" en el bucle:
Código (cpp) [Seleccionar]
while (cin >> n && n != -1){
   resultado.push_back(n);
   cin >> n;
}


Solo necesitas la que forma parte de la condición, la que esta en su cuerpo debes eliminarla. El bucle corregido:
Código (cpp) [Seleccionar]
while (cin >> n && n != -1)
   resultado.push_back(n);


Un saludo
#1106
Programación C/C++ / Re: Error!
8 Noviembre 2012, 17:17 PM
Cita de: do-while en  8 Noviembre 2012, 15:58 PM
_nodo *insertarEnLista(int numero, _nodo *apuntador )


No puedes modificar un puntero exterior si no tienes un doble puntero. Si cuando llamas a la funcion el puntero que usas en la llamada tiene el valor NULL, copiaras dicho valor en el parametro que utiliza la funcion internamente, pero anque cambies la direccion a la que apunta el puntero interno de la funcion, no estaras cambiando el externo, por lo tanto seguira siendo NULL cuando salga de la funcion
Correcto pero en esa función no es un error ya que el valor de retorno de la función es el puntero (actualizado) al primer nodo de la lista y mientras se realice la asignación:
inicioLista = insertarEnLista(5, inicioLista);
inicioLista = insertarEnLista(6, inicioLista);
inicioLista = insertarEnLista(7, inicioLista);
inicioLista = insertarEnLista(8, inicioLista);
inicioLista = insertarEnLista(9, inicioLista);

No habrá problemas.

El programa revienta debido a la cantidad de errores en la función "s_copy", para empezar no debe compilar (me refiero al programa original). Esa función es innecesariamente larga ya que se puede implementar utilizando su parámetro y la función "insertarEnLista", de esta forma:
_nodo *s_copy(_nodo *p)
{
   _nodo *copia = NULL;
   
   while (p != NULL){
      copia = insertarEnLista(p->valor, copia);
      p = p->sig;
   }
   
   return copia;
}


Un saludo
#1107
Cita de: do-while en  8 Noviembre 2012, 16:47 PMA parte funcion2 me insulta por pasarle la direccion de memoria de x...
Eso sucede porque en tu programa "&x" es de tipo "int (*)[10]" mientras que la función "funcion2" espera, como segundo argumento, un valor de tipo "char **":
void funcion2(int *x[]) ...

==>

void funcion2(int **x) ...


Al no coincidir los tipos tu compilador genera el mensaje de error.

Un saludo
#1108
Si ese texto lo copiaste de esta pagina, cito:
Citarstricmp() - Compare Strings without Case Sensitivity

Format

#include <string.h>
int stricmp(const char *string1, const char *string2);

Note:
The stricmp function is available for C++ programs. It is available for C only when the program defines the __cplusplus__strings__ macro.

Language Level: Extension
En ella se indica claramente que esa función es una extension y estas no forman parte de las bibliotecas estándar de C y C++ (su disponibilidad depende del compilador).

Un saludo
#1109
Cita de: BatchianoISpyxolo en  7 Noviembre 2012, 22:08 PMDeclaras empleados e[3], sin haber hecho un typedef de la struct y luego usas la struct...
Es valido siempre y cuando el lenguaje, a pesar de todas las apariencias, no sea C sino C++ (a veces pasa).

Y si un empleado solo puede tener un asiento asignado hay que cambiar la definicion de la estructura a:
struct empleado{
   char nom[40];
   int asiento;
};


Con los cambios:
#include <stdio.h>

struct empleado{
   char nom[40];
   int asiento;
};

void ingresar(struct empleado *e);
void asignarAsiento(struct empleado *e);
void imprimir(struct empleado *e);

int main(void)
{
   struct empleado e[3];
   
   asignarAsiento(e);
   
   for (int i = 0; i != 3; ++i)
      imprimir(e + i);
   
   return 0;
}

void ingresar(struct empleado *e)
{
   printf("Nombre: ");
   scanf("%s", e->nom);
   
   printf("Asiento: ");
   scanf("%d", &e->asiento);
}

void asignarAsiento(struct empleado *e)
{
   int i;
   int j;
   
   i = 0;
   do {
      ingresar(e + i);
     
      for (j = 0; j < i && e[j].asiento != e[i].asiento; j++)
         ;
      if (i == j)
         i++;
      else
         puts("Asiento ocupado");
   }while (i < 3);
}

void imprimir(struct empleado *e){
     printf("Nombre\tAsiento");
     printf(" %s \t %d", e->nom, e->asiento);
}

Debería funcionar pero no lo revise, eso te toca a ti.

Un saludo
#1110
Otra opción es crear una función propia que compare las cadenas sin distinguir mayúsculas de minúsculas. Por ejemplo:
#include <ctype.h>

int stricmp(char const *s, char const *t)
{
   while (tolower(*s) == tolower(*t) && *s != '\0'){
      s++;
      t++;
   }
   
   return (tolower(*s) > tolower(*t)) - (tolower(*s) < tolower(*t));
}


Un saludo