Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Genoske en 8 Julio 2011, 07:21 am



Título: Ayuda con un programa
Publicado por: Genoske en 8 Julio 2011, 07:21 am
Hola a todos es mi primera vez escribiendo aquí y quisiera saber si hay alguien que me ayude con el desarrollo de un programa en dev-c++, soy un aprendiz de programación por lo que quisiera puedan ayudarme con el seudocódigo y consejos para poder desarrollarlo.
Sin mas que decir aqui planteo el problema:

Implemente un programa que lea un número decimal y lo muestre en pantalla en hexadecimal (base 16). El cambio de base se realiza mediante divisiones sucesivas por 16 en las cuales los restos determinan los dígitos hexadecimales del número según la siguiente correspondencia:

(http://img339.imageshack.us/img339/5829/hexap.png)
____________________________________________________

Me ayudaron con el seudocódigo, pero es en visual net si mal no recuerdo, pero quisiera que alguien me de las pautas para desarrollarlo en dev-c++
y si pudieran el seudódigo, aunque no lo entiendo aki se los dejo.
_____________________________________________________

Codigo----

Dim num, resultado As Double
Dim nuevoNumero As String
Private Sub Command1_Click()
Label1.Caption = ""
num = CDbl(numero.Text)
resultado = 0
nuevoNumero = ""
While num > 15
resultado = num Mod 16
Label1.Caption = Label1.Caption & "Resultado Modulo-> " & resultado & " <-" & vbCrLf
If resultado < 10 Then
nuevoNumero = resultado & nuevoNumero
End If
If resultado = 10 Then
nuevoNumero = "A" & nuevoNumero
End If
If resultado = 11 Then
nuevoNumero = "B" & nuevoNumero
End If
If resultado = 12 Then
nuevoNumero = "C" & nuevoNumero
End If
If resultado = 13 Then
nuevoNumero = "D" & nuevoNumero
End If
If resultado = 14 Then
nuevoNumero = "E" & nuevoNumero
End If
If resultado = 15 Then
nuevoNumero = "F" & nuevoNumero
End If
If num / 16 > 15.1 And num / 16 < 16 Then
num = 15
Else
num = CInt(num / 16)
End If
Label1.Caption = Label1.Caption & "Creacion Numero-> " & nuevoNumero & vbCrLf
Label1.Caption = Label1.Caption & "Nuevo Numero-> " & num & vbCrLf
Wend
If num < 10 Then
nuevoNumero = num & nuevoNumero
End If
If num = 10 Then
nuevoNumero = "A" & nuevoNumero
End If
If num = 11 Then
nuevoNumero = "B" & nuevoNumero
End If
If num = 12 Then
nuevoNumero = "C" & nuevoNumero
End If
If num = 13 Then
nuevoNumero = "D" & nuevoNumero
End If
If num = 14 Then
nuevoNumero = "E" & nuevoNumero
End If
If num = 15 Then
nuevoNumero = "F" & nuevoNumero
End If
Label1.Caption = Label1.Caption & "Ultimo numero-> " & num & " <-" & vbCrLf
Label1.Caption = Label1.Caption & "Creacion Numero-> " & nuevoNumero & vbCrLf
res.Text = nuevoNumero
End Sub

Eso es todo espero su ayuda (:


Título: Re: Ayuda con un programa
Publicado por: leogtz en 8 Julio 2011, 08:58 am
Aquí te dejo mi versión, con el uso de un pequeño "alfabeto".

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. char *alfabeto = "0123456789ABCDEFG";
  7.  
  8. char *hexa(unsigned long long n)
  9. {
  10.    if(n == 0)
  11.    return "0";
  12.    char *s = NULL;
  13.    unsigned i = 0, j, c;
  14.  
  15.    for(; n > 0; n /= 16)
  16.    {
  17.        s = realloc(s, sizeof(char) * ++i);
  18.        s[i - 1] = alfabeto[ (int)fmod(n, 16)  ];
  19.    }
  20.  
  21.    for(i = 0, j = strlen(s) - 1; i < j; i++, j--, s[j + 1] = c)
  22.    {
  23.        c = s[i];
  24.        s[i] = s[j];
  25.    }
  26.  
  27.    return s;
  28. }
  29.  
  30. int main(void)
  31. {
  32.    puts(hexa(1234567));
  33.    return 0;
  34. }
  35.  


Título: Re: Ayuda con un programa
Publicado por: satu en 8 Julio 2011, 11:32 am
Hola

Aquí lo tienes recursivo en C++

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void mostrar(int num)
  6. {
  7.    switch(num)
  8.        {
  9.        case 10: cout<<"A"; break;
  10.        case 11: cout<<"B"; break;
  11.        case 12: cout<<"C"; break;
  12.        case 13: cout<<"D"; break;
  13.        case 14: cout<<"E"; break;
  14.        case 15: cout<<"F"; break;
  15.        default: cout<<num;
  16.        }
  17. }
  18.  
  19. void hexa(unsigned long long num)
  20. {
  21.    int n;
  22.  
  23.    if(num>15)
  24.        {
  25.        n=num%16;
  26.        num /= 16;
  27.        hexa(num);
  28.        mostrar(n);
  29.        }
  30.    else
  31.        mostrar(num);
  32. }
  33.  
  34. int main()
  35. {
  36.    unsigned long long num;
  37.  
  38.    cout << "Introduce el numero: ";
  39.    cin>>num;
  40.    hexa(num);
  41.  
  42.    while(cin.get()!='\n'); // Limpiamos el buffer
  43.    cout<<endl<<endl<<"Pulsa Enter para salir"<<endl;
  44.    cin.get(); // Pausamos el programa hasta que se pulse Enter
  45.    return 0;
  46. }
  47.  

Saludos


Título: Re: Ayuda con un programa
Publicado por: El_Java en 8 Julio 2011, 17:36 pm
En C++ la manera más fácil creo que es esta xD
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main(){
  5.    unsigned long long num;
  6.    cin >> num;
  7.    cout << hex << num << endl;
  8.    return 0;
  9. }
  10.  

Un saludo!


Título: Re: Ayuda con un programa
Publicado por: satu en 8 Julio 2011, 19:37 pm
En C++ la manera más fácil creo que es esta xD
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main(){
  5.    unsigned long long num;
  6.    cin >> num;
  7.    cout << hex << num << endl;
  8.    return 0;
  9. }
  10.  

Un saludo!

Ostras no sabía que eso se pudiera hacer  :o :o :o


Título: Re: Ayuda con un programa
Publicado por: El_Java en 9 Julio 2011, 13:28 pm
Ostras no sabía que eso se pudiera hacer  :o :o :o
Te sorprenderia la cantidad de cosas que se puede hacer solo con los estandares, tienen funciones realmente útiles, sólo hay que conocer bien el tema.
Aqui tienes lo de 'cout << hex' http://www.cplusplus.com/reference/iostream/ostream/operator%3C%3C/ (http://www.cplusplus.com/reference/iostream/ostream/operator%3C%3C/).


Título: Re: Ayuda con un programa
Publicado por: satu en 10 Julio 2011, 15:59 pm
thanks  ;-) ;-)


Título: Re: Ayuda con un programa
Publicado por: Genoske en 12 Julio 2011, 02:21 am
agradezco mucho su ayuda a todos :)
realmente es muy util lo que hacen ^_^
sin embargo aun soy principiante en esto, solo se desarrollar programas simples
no sabia de operadores hasta ver la ayuda de @El_Java, agradezco tambien a @Leo Gutiérrez, pero por falta de nivel aun no entiendo muy bien su programada, de todos modos gracias por la ayuda :)
@satu... amigo en verdad me fue de mucho ayuda tu codigo en programa se ve bastante entendible, pero podrias explicarme tambien si es que se puede desarrollar por ejemplo solo con un:

include <iostream>
using namespace std:
main ()
{
bla bla bla
bla bla bla
system("pause");
}

solo se desarrollar problemas de esta manera, por decirlo con un solo main y no con varios como me planteaste en respuesta.
tengo conocimiento de Estructura de Control... Secuencial, Selectiva: Simple, Doble y Multible: Desde - Mientras - Repetir ~ Hasta.

if
do
while
switch
case


Espero puedas apoyarme un poco, no entiendo tanto el problema que me planteaste, exactamente estas partes:

void mostrar
void hexa
este si: int main


Bueno agradezco a todos por su ayuda :)


Título: Re: Ayuda con un programa
Publicado por: satu en 12 Julio 2011, 15:13 pm
Hola

Vale te ayudo aunque no me explico muy bien

void mostrar() y void hexa() son funciones a las que llama el main. Como sabrás, el programa se ejecuta secuencialmente empezando por el main hasta el final, pues cuando el main encuentra la llamada a una función, en este caso hexa(), se empieza a ejecutar lo que hay en la función y cuando termina sigue por el main por donde se quedó y así hasta el final. La utilizaión de funciones es muy útil porque tienen una funcionalidad concreta, para una tarea específica, por lo que es bueno que te acostumbres a usarlas.

En mi programa, la función hexa() es recursiva, eso quiere decir que se llama a sí misma, busca en google sobre recursividad para que lo entiendas. Haz una traza paso a paso con tu IDE para que veas el comportamiento del programa y de esta función.

Espero haberte ayudado y si tienes más dudas pregúntalas que estaremos aquí para responderlas.

Saludos


Título: Re: Ayuda con un programa
Publicado por: Genoske en 14 Julio 2011, 08:03 am
Hola

Vale te ayudo aunque no me explico muy bien

void mostrar() y void hexa() son funciones a las que llama el main. Como sabrás, el programa se ejecuta secuencialmente empezando por el main hasta el final, pues cuando el main encuentra la llamada a una función, en este caso hexa(), se empieza a ejecutar lo que hay en la función y cuando termina sigue por el main por donde se quedó y así hasta el final. La utilizaión de funciones es muy útil porque tienen una funcionalidad concreta, para una tarea específica, por lo que es bueno que te acostumbres a usarlas.

En mi programa, la función hexa() es recursiva, eso quiere decir que se llama a sí misma, busca en google sobre recursividad para que lo entiendas. Haz una traza paso a paso con tu IDE para que veas el comportamiento del programa y de esta función.

Espero haberte ayudado y si tienes más dudas pregúntalas que estaremos aquí para responderlas.

Saludos

Hey, muchas gracias ;)
me eres de mucha ayudo bro..! (: