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

#1401
Para eso solo debes crear un menú donde el usuario elija la opción y en base a esta se llame a una de las funciones.

Inténtalo, no es difícil.

Un saludo
#1402
Porque al declarar la funcion:
Código (cpp) [Seleccionar]
void fn_programa_b();
Se esta indicando que ella no retorna un valor, si vas a utilizar la sentencia de retorno esta debe ser:
Código (cpp) [Seleccionar]
return;

Pero como esta tu programa lo mejor es simplemente eliminarla.

Un saludo
#1403
Se refiere a las dos formas de reservar memoria para emular una matriz.

1) El primer caso es el usual donde se reserva primero un bloque de memoria principal donde se almacenaran las direcciones en memoria del inicio de cada fila. A continuacion se reserva la memoria de cada una de ellas.

Mas o menos asi:
int **mat;
int i;

/* ... */

/* 10 filas por 20 columnas */
mat = malloc(10 * sizeof *mat);

for (i = 0; i < 10; i++)
   mat[i] = malloc(20 * sizeof *mat[i]);


2) El segundo caso ya lo explicaste (me refiero a naderST).

Un saludo
#1404
Es posible, la forma mas facil es colocando el codigo de cada programa en una funcion (por supuesto con las correcciones pertinentes).

Un empujon:
Código (cpp) [Seleccionar]
#include <iostream>
using std::cout;
using std::endl;

#include <cstdio>
using std::printf;
using std::scanf;

void fn_programa_a();
void fn_programa_b();

int main()
{
fn_programa_a();
fn_programa_b();

return 0;
}

void fn_programa_a()
{
unsigned long a;
unsigned long b;

printf("primer numero:");
scanf("%lu", &a);

printf("segon numero:");
scanf("%lu", &b);

printf("el resultat es %lu", a+b);
}

void fn_programa_b()
{
// codigo del segundo programa ...
}


Dos detalles a considerar: 1) Casi no utilizas las facilidades del lenguaje C++ y 2) El tipo "long long" no existe en C++ estandar (pero si en C99).

Un saludo
#1405
Programación C/C++ / Re: Ayuda con matrices String
2 Diciembre 2011, 00:12 AM
Como ya te indicaron puedes utilizar un array de strings y para conocer su numero de elementos puedes utilizar el operador "sizeof".

Por ejemplo:
Código (cpp) [Seleccionar]
#include <iostream>
using std::cout;
using std::endl;

#include <string>
using std::string;

int main()
{
string nombre[] = {"Abel", "Benjamin", "Cain", "Daniel"};
size_t num_elem = sizeof nombre / sizeof nombre[0];

for (size_t i = 0; i != num_elem; ++i)
cout << "nombre[" << i << "] == " << nombre[i] << endl;

return 0;
}


Un saludo
#1406
El "char **" que espera la funcion "cargar_fichero" debe ser la direccion en memoria de la variable de tipo "char *" que almacenara la direccion del bloque:
FILE *fp = fopen(argv[i], "rb");
char *contenido;
unsigned long bytes;

cargar_fichero(f, &contenido, &bytes);

Ello para que asi se puede modificar la variable "contenido" dentro de la funcion "cargar_fichero" (es la emulacion del paso por referencia en C).

Un saludo
#1407
Esa funcion la debes hacer de forma tal que solo indique si la conversion no es valida (por ejemplo devolviendo -1), quien la llama (la funcion principal en tu caso) se debe hacer cargo de hacer lo necesario (imprimir el mensaje de error).

Mas o menos asi:
#include <stdio.h>

int hexadecimal (char car1, char car2);

int main(void)
{
   char car1;
   char car2;
   int valor;
   int flag;
   
   while (1){
      puts("Introduzca un valor hexadecimal:");
      scanf(" %c%c", &car1, &car2);
      if (car1 == 'q' && car2 == 'q'){
         printf ("Presione enter para salir\n");
         while (getchar() != '\n')
            ;
         getchar();
         break;
      }else if ((valor = hexadecimal (car1, car2)) == -1)
         printf ("Valor erroneo\n\n");
      else
         printf("0x%c%c == %d\n", car1, car2, valor);
   }
   
   return 0;
}

int hexadecimal(char car1, char car2)
{
   char valor1;
   char valor2;
   
   if ('0' <= car1 && car1 <= '9')
      valor1 = car1 - '0';
   else if ('A' <= car1 && car1 <= 'F')
      valor1 = car1 - 'A' + 10;
   else if ('a' <= car1 && car1 <= 'f')
      valor1 = car1 - 'a' + 10;
   else
      return -1;
     
   if ('0' <= car2 && car2 <= '9')
      valor2 = car2 - '0';
   else if ('A' <= car2 && car2 <= 'F')
      valor2 = car2 - 'A' + 10;
   else if ('a' <= car2 && car2 <= 'f')
      valor2 = car2 - 'a' + 10;
   else
      return -1;
   
   return valor1 * 16 + valor2;
}


Un saludo
#1408
Para empezar el fragmento que pones es C. No tienes porque convertirlo antes de enviarlo al archivo ya que puedes hacerlo directamente con:
x = system("dir");

/* ... */

fprintf(F, "%d\n", x);

Para leerlo solo tienes que utilizar fscanf.

Código (cpp) [Seleccionar]
string itoa(int n){
string rtn;
for(rtn="";n>0;rtn.insert(rtn.begin(),n%10+'0'),n/=10);
return rtn;
}

Un problema aqui es que devolveria una cadena vacia (no es necesaria la asignacion inicial ya que todo objeto de la clase string inicia asi) si el numero pasado fuera el cero.

Otra opcion es:
Código (cpp) [Seleccionar]
string itoa(int n)
{
string s;
char digit[] = "0123456789";

do {
s = digit[n % 10] + s;
}while ((n /= 10) > 0);

return s;
}


Otra forma es utilizando clase stringstream:
Código (cpp) [Seleccionar]
string itoa(int n)
{
stringstream ss;
string s;

ss << n;
ss >> s;

return s;
}


Un saludo
#1409
Para ayudarte lo mejor es que publiques el codigo fuente del programa completo o al menos las partes donde declaras las variables y realizas las operaciones de lectura y escritura.

Asi a primera vista no se ve bien el fragmento ya que por algun razon lees el numero de filas y columnas como tipo "double" y despues utilizas contadores de tipo "int".

Y si es un solo bloque de memoria no necesitas de dos bucles, basta con uno, mas o menos asi:
for (i = 0; i <filas * columnas; i++)
  fscanf(fp, "%lf", vect + i);


Pero de nuevo para sacarte de dudas mejor publica el codigo fuente completo.

Edito:

Por alguna (extraña) razon debes procesar columna por columna en lugar de lo usual que es por filas. En ese caso:
for (i = 0; i < columnas; i++){
   for (j = 0; j < filas; j++)
      fscanf(fp, "%lf", vect + i + (j * columnas));


Un saludo
#1410
Solo un detalle: el caracter 'ñ' no es valido como parte del nombre de un objeto (la razon por la que usualmente se ven cosas como "a ni o" y similares).

Un saludo