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

#1161
Considerando que el dígito mas significativo (las centenas) limita las opciones del segundo (las decenas) el programa se puede implementar con dos bucles, de esta forma:
for (i = 1; i <= 9; i++)
   for (j = 0; i + j <= 9; j++)
      printf("%d%d%d\n", i, j, i + j);


Un saludo
#1162
Esto:
printf("caracter de relleno:");
fflush (stdin);
scanf("%c",&caracter);


Se puede sustituir por (el espacio en " %c" es critico):
printf("caracter de relleno: ");
fflush(stdout);
scanf(" %c", &caracter);

Y así evitamos la llamada a "fflush(stdin)".

La llamada a "fflush(stdout)" es necesaria ya que si el texto no termina con '\n' no hay garantía de que este se haya enviado a la salida estándar (podría estar, todavía, en el bufer correspondiente).

Un saludo
#1163
Programación C/C++ / Re: DUDA-Programación en C
21 Octubre 2012, 03:03 AM
Como solucionar el calculo del promedio ya lo respondió maxim_o (faltaban los paréntesis).

En cuanto a la apertura del archivo te piden que realices dos operaciones: lectura de los tres números y escritura del promedio. Eso no lo puedes hacer con el modo "a" ya que este es un modo de escritura.

Debes utilizar el modo "a+" ya que este permite realizar operaciones de escritura (siempre al final del archivo) y de lectura (siempre indicando primero la posición desde donde se lee). Eso en detalle en el vinculo que te indicaron.

Parte de las modificaciones a tu programa:
/* Se abre el archivo en modo "agregar" (mas lectura) */
F = fopen("notas.txt", "a+");

/* Para colocarnos al principio del archivo (Lectura) */
rewind(F);

/* Lectura de los tres valores */
fscanf(F, "%d", &x);
fscanf(F, "%d", &y);
fscanf(F, "%d", &z);

r = (x + y + z) / 3; /* Division entera (no hay decimales) */
fprintf(F, "La nota media de los tres alumnos es: %d\n", r);

fclose(F);


También debes evitar el uso de funciones de la biblioteca conio de Borland como "getch", mas información sobre ello en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
#1164
El operador "sizeof" resulta en el tamaño del objeto, por ejemplo:
char *p = malloc(100);
size_t num_elem = sizeof p;

Ahi el resultado de ""sizeof p" es "sizeof(char *)", usualmente cuatro.


Si lo que se desea no es el tamaño del puntero sino del objeto apuntado (el resultado de malloc, el bloque de cien caracteres) no hay mas opción que llevar la cuenta de forma "manual" (mediante una variable):

char *p = malloc(100);
size_t num_elem = 100;



Un saludo
#1165
Para ello primero imprimes el numero y a continuación utilizas un bucle para la secuencia " * n * n ...". Por ejemplo:
Código (cpp) [Seleccionar]
#include <iostream>
using namespace::std;

int main()
{
   cout << "Ingresa un numero para ver la magia: ";
   int n;
   cin >> n;
   
   int c = 0;
   int p = 1;
   while (c < n) {
      c++;
      p *= n;
     
      cout << n;
      for (int i = 1; i < c; ++i)
         cout << " * " << n;
      cout << " = " << p << endl;
   }
   
   return 0;
}


Un saludo
#1166
Cita de: kikian94 en 19 Octubre 2012, 15:44 PMel problema es que se queda pillado el programa y no se que hacer.
Eso se debe a que una vez se entra en el bucle nada modifica el valor de la variable "letra" terminando como un bucle infinito.

Para solucionarlo debes obtener el siguiente carácter, modifica el bucle de esta forma:
scanf ("%c", &letra);
while (letra!='.'){
   /* ... */

   contadorvoc = cona+cone+coni+cono+conu;
   
   scanf ("%c", &letra);
}


Para evitar la repetición de la llamada a "scanf" se puede utilizar:
while (scanf("%c", &letra) == 1 && letra!='.'){
   /* ... */
   
   contadorvoc = cona+cone+coni+cono+conu;
}

Se verifica que el valor de retorno de la función es igual a uno porque ello indica una lectura sin problemas del carácter.

Un saludo
#1167
Esa función realiza la operación (concatenación) de forma correcta. El error, si existe, debe encontrarse en otra parte del programa.

Se puede acortar utilizando punteros:
void strcat(char *p, char *q)
{
   while (*p != '\0')
      p++;
   
   while ((*p++ = *q++) != '\0')
      ;
}


Un saludo
#1168
Una respuesta general (si se trata del lenguaje C) no es posible porque cuando un tipo entero con signo se desborda se genera comportamiento no definido (cualquier cosa puede pasar). Intenta revisando la documentación de tu compilador, tal vez ahí se describa el funcionamiento.

Un saludo
#1169
El problema se debe a que estas utilizando el mismo nombre para las macros y los parámetros:
Código (cpp) [Seleccionar]
#define longPacket 16384
#define maxNumPacket 20

void initArrayPacket(char * arrayPacket[maxNumPacket], int  maxNumPacket, int longPacket);


No puedes hacer eso porque el preprocesador actúa primero y lo que recibe el compilador es:
Código (cpp) [Seleccionar]
void initArrayPacket(char * arrayPacket[20], int  20, int 16384);
Ahí es donde se generan los mensajes del compilador.

En cuanto a pasar esos valores no es necesario, utiliza las macros directamente. Por cierto para evitar ese tipo de errores la convención es utilizar nombres de macros con todos sus caracteres en mayúsculas.

Un saludo
#1170
Programación C/C++ / Re: RETOS C++
18 Octubre 2012, 16:13 PM
El prototipo de la función "time" se encuentra en <time.h> (si el lenguaje es C++ se debe utilizar <ctime>).

Un saludo