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

#831
Un problema con el primer programa es que no utilizas la función "comprueba". En ella utilizas el condicional:
if (y > x)
   return T; /* T == 1 */
else
   return F; /* F == 0 */

Ya que los operadores relacionales resultan en uno si se cumple la condición y cero en caso contrario esa parte la puedes reducir a (tenias mal el orden de las variables):
return x > y;

El programa con todos los cambios necesarios:
#include <stdio.h>
#include <stdlib.h>

int mayor(int x, int y);

int main(void)
{
   int a;
   int b;
   int c;
   
   puts("Introduce tres valores:");
   if (scanf("%d %d %d", &a,&b,&c) != 3)
      return EXIT_FAILURE;

   if (!mayor(a, b) && !mayor(b, c))
      puts("Ordenados de menor a mayor");
   else
      puts("No estan ordenados de menor a mayor");

   return EXIT_SUCCESS;
}

int mayor(int x, int y)
{
   return x > y;
}


Un saludo
#832
Como ya te comentaron en la caso del lenguaje C y si se trata de un array no es posible, en su lugar se debe utilizar un puntero y reservar memoria de forma dinámica mediante malloc, calloc o realloc.

En ese escenario los pasos son:
1) Reservar un bloque con el nuevo tamaño y los datos originales mediante la función realloc.
2) Para emular el desplazamiento copias la parte final del bloque con memmove (si las áreas no se sobreponen puedes utilizar memcpy).
3) Si deseas que todos los bytes del hueco estén a cero puedes utilizar la función memset.

Un saludo
#833
Cita de: sora_ori en 24 Abril 2013, 21:16 PMEsta vez estoy haciendo un programa para jugar con las edades de las personas, y según la edad que tenga que muestre un mensaje u otro.

[...]

A) Si hay alguna persona de menos de 18 años: Vaya a Pasear
B) Si todos tienen 18 o más años, pero hay al menos 4 personas con menos de 29 años: Vaya a la discoteca
C) Si todos tienen 18 o más años, pero hay al menos 4 personas con más de 29 años: Ir al cine
D) Si todos tienen al menos 50 años: Ir al teatro
Un problema y un detalle con el enunciado:

El problema: si las edades introducidas son todas iguales a 29 no se presenta un mensaje.
El detalle: el caso D se debe procesar antes que el C, esto porque si todos son mayores de 49 se cumple con las condiciones de los casos C y D.

Como ya te comento gorystyle en el cuerpo del bucle donde lees cada una de las edades debes incrementar los contadores que correspondan a la edad, mas o menos así:
if (edad < 29){
   menores_de_29++;
   
   if (edad < 18)
      menores_de_18++;
}else if (edad > 29){
   mayores_de_29++;
   
   if (edad > 49)
      mayores_de_49++;
}


Después de leer todas las edades solo tienes que utilizar un condicional "if ... else if ..." verificando si se cumple la condición de alguno de los cuatro casos.

Un saludo
#834
Cita de: foreground en 23 Abril 2013, 22:12 PMMe gustaría saber si alguien sabe resolverlos
Supongo que si pero la política de los foros es no hacer tareas. En su lugar publica los avances que llevas del programa mas las dudas que tengas y alguien te ayudara a terminarlo.

También debes publicar toda la información que ayude a ayudarte, por ejemplo el lenguaje de programación, compilador y sistema operativo que utilizan en clase.

----

Cita de: OmarHack en 24 Abril 2013, 11:49 AM¿No es mejor usar un puntero de parámetro? Así puedes controlar la memoria y a la vez cambiar el valor.
Depende del lenguaje.

En C no hay otra forma de emular el paso por referencia.
En C++ no es necesario, en su lugar se utiliza una referencia, ello se explica en el mensaje de 85.

Un saludo
#835
Sin ofender ese programa tiene deficiencias importantes y no hará lo esperado.

Si no tienes un curso de calidad sobre C++ es hora de conseguir uno, por ejemplo "Thinking in C++" de Bruce Eckel. Otras recomendaciones las puedes encontrar mediante el motor de búsqueda de los foros.

En cuanto al algoritmo de Euclides este se describe en la pagina Algoritmo de Euclides tradicional

Un saludo
#836
Cita de: Zodiak98 en 21 Abril 2013, 23:57 PMtengo una duda por ejemplo una variable de tipo char almacena 1 solo dato
Correcto. Si deseas almacenar mas no hay otra opción que utilizar un array.

Cita de: Zodiak98 en 21 Abril 2013, 23:57 PMpero en un ejemplo vi un código en el cual hay un puntero de tipo char asi:
char* nombre = "Yahoo";
Qué según tengo entendido es para que la variable de tipo char almacene ma sde 1 dato
No. Una variable de tipo "puntero a T" solo puede almacenar la dirección de un objeto, lo que almacene el objeto apuntado es otra historia.

Cita de: Zodiak98 en 21 Abril 2013, 23:57 PMpero ahora aquí vamos a mi duda porqué se coloca el simbolo de indirección(*)
Porque es una declaración y en ella la única forma de indicar que la variable es un puntero es mediante el carácter '*', no hay '*' entonces no hay puntero:
int numero; /* variable de tipo "int" */
int *p;     /* variable de tipo "puntero a int" */


----

Cita de: amchacon en 23 Abril 2013, 10:35 AMAmbas sentencias son equivalentes puesto que tienen el mismo uso de memoria y se usan igual.
No. Ya lo indicaron durasno y x64Core, solo voy a explicarlo un poco mas.

Cuando se declara un array puede utilizarse como valor inicial una cadena literal pero esta es equivalente a una lista de valores. Siguiendo tu ejemplo:
/* Esta declaracion ... */
char nombre[] = "Yahoo";

/* ... se termina procesando de esta forma */
char nombre[] = {'Y', 'a', 'h', 'o', 'o', '\0'};


Otra historia es la declaración de un puntero inicializando este mediante una literal:
char* nombre = "Yahoo";
Aquí la cadena literal "Yahoo" es de tipo array de caracteres, se almacena en alguna dirección en memoria y es esa dirección el valor inicial del puntero.

Cita de: amchacon en 23 Abril 2013, 10:35 AMAdemás cómo ya hemos dicho,  un array no es más que un puntero a su primer elemento.
No. Los arrays y punteros son objetos distintos.

El detalle (o problema, depende de la perspectiva) es: denotar (referirse a) un array mediante su nombre o una expresión resulta (salvo contados casos) en la dirección del primer elemento del array.

El caso mas conocido es el uso de scanf, cuando se trata con esta de leer una palabra utilizamos el nombre de un array sin el operador '&':
char nombre[100];
char (*p)[100] = &nombre;

/* Para indicar que array usar utilizamos: */

puts("Teclea tu nombre:");
scanf("%s", nombre /* 1) Su nombre */);

puts("Teclea tu nombre:");
scanf("%s", *p /* 2) Una expresion */);


Uno de los pocos casos donde ello no aplica es el uso del operador sizeof, si su argumento es un array declarado en el mismo ámbito este reportara correctamente el tamaño del array.

Un saludo
#837
Programación C/C++ / Re: estructura de datos
23 Abril 2013, 06:43 AM
Algunos de los errores ya se comentaron, una lista de ellos es:

* En el prototipo de la función "busqueda" falta la palabra reservada "struct":
int busqueda (alumno [10], char [20], int);

* Falta la llave de cierre de la función main justo después de la sentencia:
}while (opcion != '5');

* Falta el punto y coma al final de varias sentencias:
system ("cls")

* Tienes una llave de cierre de mas al final del programa.

Con esas correcciones el programa debe por lo menos compilar.

También hay algunos detalles que, sin ser errores, se deben corregir:

* En las funciones "altas" y "cambios" declaras la variable "aux" pero no la utilizas, hay que eliminarla.
* Caso similar con la función "consultas" y la variable "i".
* En la función "cambios" en el tercer caso tienes dos sentencias "break;":

case '3':   printf ("Edad: ");
   scanf ("%d", &stu[pos].edad);
   break;
   break;

Con una basta, hay que eliminar la otra.

También hay que eliminar el uso de la biblioteca conio de Borland, la función gets y la función fflush en la forma "fflush(stdin)". Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|

Un saludo
#838
Cita de: SARGE553413 en 22 Abril 2013, 22:34 PMHe leído la especificacion en cplusplus.com, pero no entiendo que significa el trozo de
'& ifstream::failbit ', es decir, ahí el '&' ¿es un operador de comparación o algo así?
Si, es el operador AND a nivel de bits.

Cita de: SARGE553413 en 22 Abril 2013, 22:34 PM¿Cómo funciona?
1) Se obtiene el estado del stream (la función rdstate).
2) Se obtiene el patrón de bits que indica una falla en el stream (ifstream::failbit)
3) Se aplica el operador AND a nivel de bits y el resultado sera algún valor diferente de cero si esa bandera esta activada, cero si no lo esta.

Un saludo
#839
Es un marcador.

En la cadena de formato de printf y similares cada '%' indica el inicio de un especificador (secuencia de caracteres indicando el tipo a procesar y algunos detalles mas). Si la intención es simplemente imprimir el carácter '%' se debe escapar utilizando '%%'.

Con las funciones scanf y familia el comportamiento es similar (obviamente con la diferencia de ser funciones de entrada), si se desea leer el carácter '%%' se debe escapar de la forma indicada.

Un saludo
#840
Cita de: VbStructure en 22 Abril 2013, 15:16 PMuna pregunta al decir "indicador de posición" ¿a qué te refieres? ¿es el cursor de la pantalla negra?
No. Me refiero al indice utilizado para acceder a cada uno de los elementos del array donde debes guardar los caracteres.

Un ejemplo es la variable "pos" en el programa de gorystyle .

Un saludo