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 - avesudra

#241
CitarReglas del subforo:

    Este no es un subforo donde se soliciten tareas, sino un lugar donde resolver dudas.

¡Un saludo!
#242
Implementando de manera rápida lo que comentó @diskontrol que como he podido comprobar solo es válido para logaritmos en base 10, he sacado este código (seguro que es un churro, no me mateis   :( ). En cuanto lo último comentado por @Puntoinfinito eso solo vale para logaritmos exactos. ¿@do-while al fin y al cabo es ensayo y error no? Si yo tengo log24 -> 2x = 4 vas probando valores enteros hasta que tengas un resultado mayor que 4 o igual y vas reduciendo ... no sé tampoco tengo nivel matemático para hacerlo, implemente la serie de Taylor pero es muy lenta, dejo el código al que @diskontrol se refería:
Código (cpp) [Seleccionar]
#include <iostream>
#include <sstream>
#include <string>

using namespace std;

#define PRECISION 1000

#define e 2.7182818284590452353602874713526624977572470936999595749669676277240766303535

double ln (double num);
double log10 (double num, std::string &str);
double pow (double base, register int exp);


int main(int argc , char * argv [])
{
    string str;
    cout <<"Resultado en la precision maxima de de double es: "<< log10(34.4,str) << endl;
    cout << "Resultado truncado a "<< PRECISION << " decimales es: " << endl<< str;
    return 0;
}

double pow (double base, register int exp)
{
    double ret = 1;
    while(exp!=0)
    {
        ret = base*ret;
        --exp;
    }
    return ret;
}
double ln (double num)
{
    string unused;
    return (log10(num,unused)/log10(e,unused));
}
double log10 (double num,std::string &str)
{
    double ret = 0;
    double decimal  = 0;

    if(num < 10)
        num = pow(num,10);
    else
    {
        while(num >= 10)
        {
            num /= 10;
            ++ret;
        }
        num = pow(num,10);
    }

    ostringstream convert;   // stream usado para la conversión.
    convert <<ret;
    str += convert.str();
    str += '.';
    for(register int i = 1 ; i != PRECISION; ++i)
    {
        while(num >= 10)
        {
            num /= 10;
            ++decimal;
        }
        ret += decimal*(1/(pow(10,i)));
        num = pow(num,10);

        str +=(char) decimal+48;
        decimal = 0;
    }
    return ret;
}

#244
Pues no sé, igual es porque no tiene esto:
Código (cpp) [Seleccionar]
using namespace System::Runtime::InteropServices;
Pero vamos que ya te digo que ni idea porque en el link que te he pasado lo hacen así:
Código (cpp) [Seleccionar]
using namespace System;
using namespace System::Runtime::InteropServices;

#include <iostream>                                                 // for printf


int main()
{
    // Create a managed string.
    String^ managedString = "Hello unmanaged world (from the managed world).";

    // Marshal the managed string to unmanaged memory.
    char* stringPointer = (char*) Marshal::StringToHGlobalAnsi(managedString ).ToPointer();

    printf("stringPointer = %s\n", stringPointer);

    // Always free the unmanaged string.
    Marshal::FreeHGlobal(IntPtr(stringPointer));

    return 0;
}
#245
Programación C/C++ / Re: Nuevo problema
31 Marzo 2013, 17:20 PM
Estoy tranquilo jajaja , bueno el error era que le faltaba la llave de cierre de la función que hay que decirlo por si alguien tiene el mismo problema y no lo ve  ;)

¡Un saludo!
#246
¿Quizás así?:
private:
System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
{

   FILE *Archivo;
   char Nombre[10];
   int celda;


   strcpy(Nombre, (char*)Marshal::StringToHGlobalAnsi(AbrirArchivo->Text).ToPointer());
   //AbrirArchivo es un Textbox

   Archivo = fopen((char*)Marshal::StringToHGlobalAnsi(AbrirArchivo->Text).ToPointer(), "wb");//Esto lo veo poco lógico pues ya podrías hacer:
   //Archivo = fopen(Nombre, "wb");
   if (Archivo != NULL)
   {
       Estado->Text = "Error: No se encuentra el archivo";
       //Estado es otro Textbox
   }
   else
   {
       fclose(Archivo);
   }
}
};

Fuente: http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.stringtohglobalansi.aspx
#247
Programación C/C++ / Re: Nuevo problema
31 Marzo 2013, 15:01 PM
Cita de: kayron8 en 31 Marzo 2013, 14:34 PM
Bueno pues dejo la función comentada para que vea el profe que la tengo hecha pero que no tiene mucha lógica.

Gracias por todo :)
¡¡¡Pero tienes que introducir los elementos del vector!!! Haz esa función también y la pones detrás de la de inicializar todo a 0 así te quedas más tranquilo.
#248
Programación C/C++ / Re: Nuevo problema
31 Marzo 2013, 14:21 PM
Pues eso pero después, tienes que introducir los elementos del vector tal y como dice en este punto:
    • Introducción de todos los elementos del vector (Altas).
Se les habrá olvidado ponerlo pero es que no tiene ninguna lógica, primero inicializas todos los elementos del vector a 0 , y después le pides al usuario que vaya introduciendo valores hasta completar el tamaño del vector.
#249
Programación C/C++ / Re: Nuevo problema
31 Marzo 2013, 14:12 PM
Me extraña que no te hayas dado cuenta, si ya has inicializado el vector con los valores que tú has querido, no hace falta llamar a la función InicialitzarVector ya que te vuelve a poner todos los elementos a 0 independientemente del valor que le hayas asignado, es como si hiciese esto:
int variable = 5;
//Inicializar variable
variable = 0;
#250
Programación C/C++ / Re: Problemas con ELSE
31 Marzo 2013, 00:34 AM
Sí claro que está bien, si la cantidad es menor que 1500 no se aplica descuento pero quería que te dieses cuenta de que ahí un bucle no pinta nada.