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

#1111
Cita de: migcv en  8 Noviembre 2012, 06:22 AM1.-Por que en mi duda 5 dices que el doble punto y coma es un error? si el compilador lo ejecuta y si lo quito no lo compila bien?
Como ya comento BatchianoISpyxolo el punto y coma se utiliza como terminador de sentencia. Si utilizas dos no es un error pero el segundo esta de mas, no es necesario y un compilador no puede quejarse por eso (alguna otra cosa estará mal en tu programa).

Cita de: migcv en  8 Noviembre 2012, 06:22 AM2.-En la duda1 que significa que construye un carácter con el valor cero osea que como para que hace eso ?
Utilizar "char(0)" indica que, en base al valor 0 de tipo "signed int", se genere el valor 0 de tipo "char". De esa forma coinciden los tipos de la variable y el valor inicial.

Un saludo
#1112
El error se genera debido a que la función "asignarAsiento" espera que su argumento sea la dirección en memoria de un objeto de tipo "empleado". Si eso te suena muy técnico y complicado no lo es: ello se realiza cada vez que llamas a una función y el argumento se indica mediante el nombre de un array.

En buen cristiano: para utilizar esa función debes declarar un array y pasarlo a la función, como no lo haces se genera el error que mencionas.

Para solucionarlo debes, entre otras cosas, declarar el array (y tampoco llamar directamente a la función "ingresar"), mas o menos así:
Código (cpp) [Seleccionar]
int main()
{
   empleado e[10];
   
   asignarAsiento(e);
   
   for (int i = 0; i != 10; ++i)
      imprimir(e[i]);
   
   return 0;
}


Un saludo
#1113
Programación C/C++ / Re: función random
7 Noviembre 2012, 18:27 PM
Cita de: leosansan en  6 Noviembre 2012, 20:18 PM¿por qué usar size_t en lugar de int?
Primero porque ese es el tipo de la expresión "sizeof opers" y segundo porque algunos compiladores, al utilizarse en su modo mas estricto, se quejan de operaciones entre tipos con signo (el tipo "int") y sin el (el tipo "size_t").

Un saludo
#1114
Las funciones se pueden acortar un poco:

* "guardar" en base al uso del puntero "itr", no necesitas de otro contador para iterar por cada elemento de la lista.

* "read" utilizando el valor de retorno de la función "fread" (no hay necesidad del contador "numContactos").

Pero, considerando lo poco que muestras, el error no se encuentra en esas funciones. El primer candidato es la función "append" y no estaría de mas revisar todo el código fuente del programa.

Un saludo
#1115
Cita de: migcv en  7 Noviembre 2012, 08:29 AMDuda1: "const char FINCAD = char(0);" Como es que se declara esta variable se que es una constante del tipo char pero eso de  "= char(0);" que significa por que hace eso?
Construye un carácter con el valor cero.

Cita de: migcv en  7 Noviembre 2012, 08:29 AMDuda2: "typedef char TCadena[MAXCAD+1];" Esta linea tampoco la entiendo bien creo que es la asignacion de una varible pero no me queda claro que es lo que hace
No es una declaración, es la definición de un tipo. En ella se indica que el uso de "TCadena" sera equivalente a "char [MAXCAD+1]", a partir de esa definición puedes utilizar:
Código (cpp) [Seleccionar]
TCadena cadena_1;
char cadena_2[MAXCAD+1];

Para declarar dos variables cuyo tipo es el mismo: array de 81 elementos de tipo "char".

Cita de: migcv en  7 Noviembre 2012, 08:29 AMDuda3: "void EscribirPersona(TPersona p);" En la declaración de esta función por que entre "TPersona" y "p" no hay una coma?
Porque como indicas es una declaración y en ella se debe indicar el tipo de cada uno de los argumentos a utilizar cuando se llame. En una declaración el nombre de los parámetros es opcional. Por ejemplo:
Código (cpp) [Seleccionar]
void EscribirPersona(TPersona);
void EscribirPersona(TPersona p);

Tienen el mismo efecto: indican que la función con el nombre "EscribirPersona" no retorna un valor y al llamarse se debe pasar un argumento de tipo "TPersona".

Cita de: migcv en  7 Noviembre 2012, 08:29 AMDuda4: "void LeerPersona(TPersona &p);" En esta función por que el  parámetro "p" tiene una "&" antes?
Porque indica que el argumento sera pasado por referencia. Eso lo debes ver mas adelante en el curso, en el apartado sobre funciones (si estas empezando no entiendo porque ya estas tratando con funciones, te vas a complicar la vida).

Cita de: migcv en  7 Noviembre 2012, 08:29 AMDuda5: "TPersona p;;" En verdad esta linea no la entiendo nada :S si aguien me pudiera iluminar un poco en porque el doble punto y coma al final y que es lo que hace
El punto y coma de mas no hace nada, es un error.

Cita de: migcv en  7 Noviembre 2012, 08:29 AMDuda6: "TCadena nomFich;" Igual como la anterior pero sin el doble punto y como pero que hace?
Declara un objeto cuyo nombre es "nomFich" y su tipo es "TCadena". Si revisas tu primera pregunta te daras cuenta que esa variable se puede declarar de dos formas (por supuesto equivalentes):
Código (cpp) [Seleccionar]
TCadena nomFich;

// O tambien
char nomFich[MAXCAD+1];

La variable "nomFich" es un array de caracteres cuyo objetivo es almacenar una cadena de caracteres que indique el nombre del fichero (archivo).

Cita de: migcv en  7 Noviembre 2012, 08:29 AMBueno seria dos y agradecería mucho su ayuda y sus respuestas desde ya muchísimas gracias y se que mis dudas pueden ser tontas pero es que ya busque y busque en el tutorial y no viene nada de eso :'( no lo explica :'(
Si estas completamente seguro que ese tutorial es deficiente lánzalo a la basura y empieza con otro, puedes revisar recomendaciones utilizando el motor de búsqueda de los foros.

Un saludo
#1116
Programación C/C++ / Re: función random
6 Noviembre 2012, 17:49 PM
Cita de: leosansan en  6 Noviembre 2012, 16:23 PMSi resulta un valor no válido -si entra en el else- habrá que descontarlo, de ahí el i--, si no tendrías menos de cinco valores, ya que se contarían también los valores no válidos
En tu programa el uso de la sentencia "continue;" no es necesario ya que, si revisas con cuidado, es la ultima sentencia del bucle.

Y los dos cambios al contador se pueden reducir a uno si se utiliza un bucle "while" o "do ... while", por ejemplo:
i = 0;
do {
   numero1 = rand() % 11;
   numero2 = rand() % 11;
   operacion = rand() % 6 + 42;
   
   if (operacion == 44 || operacion == 46)
      puts("Otro");
   else {
      printf("%d %c %d = ", numero1, operacion, numero2);
      scanf("%d", &resultado);
      i++;
   }
}while (i < OPERACIONES);


El problema de fondo (ignorar valores no deseados) se puede evitar simplemente almacenando los operadores en un array, la función "rand" se utiliza para generar el indice del operador a utilizar:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define OPERACIONES 5

int main()
{
   char opers[] = {'+', '-', '*', '/'};
   size_t num_opers = sizeof opers;
   size_t i;
   int a;
   int b;
   int resultado;
   char operacion;
   
   srand((unsigned) time(NULL));
   
   for (i = 0; i < OPERACIONES; i++){
      a = rand() % 11;
      b = rand() % 11;
      operacion = opers[rand() % num_opers];
     
      printf("%d %c %d = ", a, operacion, b);
      scanf("%d", &resultado);
   }
   
   return 0;
}


Un saludo
#1117
Cita de: SonaArtica en  6 Noviembre 2012, 05:53 AM
Bueno sigo cn lo mismo,otro ejercicio de vectores,quisiera saber si creen que le falta algo.A mi parecer esta bien el ejercicio,corre perfecto si lo funcionan.Espero sus opiniones
Se puede mejorar evitando el uso de la biblioteca conio de Borland, cambiando la definición de la función "main" y evitando el uso de "fflush(stdin);", las razones de ello se explican en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

En cuanto al caso especial (primer valor) este se puede eliminar si se utilizan dos bucles: el primero para obtener los valores y el segundo para encontrar el máximo y el mínimo.

Un saludo
#1118
Cita de: xiruko en  5 Noviembre 2012, 23:20 PMsi lo que quieres es que la funcion sea de 1 solo return, esto te podria servir:

int is_symbol(int sym) {

return !(BACKSLASH^sym && SLASH^sym && COLON^sym && ASTERISK^sym && QUESTION^sym && QUOTES^sym && LESS^sym && GREATER^sym && PIPE^sym);
}


aunque sinceramente no se que tan eficiente es respecto a la primera version que es mas facil de entender.
Tiene la misma eficiencia. Ello porque en el caso de operador lógico AND si el operando a la izquierda es falso el derecho no se evalúa, en otras palabras la evaluación termina en cuanto uno de los operando en tu expresión sea cero (indicando que coincidió con alguna de las macros).

Cita de: HRSLASH en  5 Noviembre 2012, 19:14 PM
Hola foreros. Tengo este codigo y lo que quiero es que devuelva 1 si el simbolo pasado a la funcion es alguno de los definidos arriba.
Eso implica que se deben cumplir tres condiciones:
1) Ser mayor o igual que 1.
2) Ser menor o igual que 256.
3) Ser una potencia de dos (en binario el numero tiene solo un bit a uno).

Combinando los tres tenemos:
int is_symbol(int x)
{
   return x >= 1 && x <= 256 && (x & x - 1) == 0;
}


Un saludo
#1119
Cita de: BatchianoISpyxolo en  5 Noviembre 2012, 16:48 PMTambién faltaba indexar el array de doubles.
Esa operacion:
*sum += a[i];
Si se encuentra en el primer mensaje pero oxi12pek no utilizo las etiquetas de código (debería) y por eso en su lugar aparece el texto en cursiva.

Un saludo
#1120
Los errores son dos:

* Al llamar a la función "avg_sum" su segundo argumento debe ser el numero de elementos en el array. Tu pasas el valor de "j" el cual es "no definido" o "basura".

* El valor inicial del acumulador (la variable "y") también es "no definido" o "basura", debes inicializarlo con cero.

Un saludo