Ir ao conteúdo
  • Cadastre-se

C Imprimir em notação de potência


Zin762

Posts recomendados

@Zin762      você quer imprimir o número três  desse tamanho e logo em seguida imprimir o número 8 que seja a metade do tamanho do 3  ?   ,   no console ainda não vi nenhuma função que faça isso ,    mas  creio que usando a API do windows    :

https://vulms.vu.edu.pk/Courses/CS410/Downloads/Charles Petzold - Programming Windows - 5th Ed.pdf

 

 você pode conseguir  usando comandos como        :   

(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT)

ou outras bibliotecas , como wxwidgets , sdl   ,  sfml ,   graphics.h ,  Allegro , e se você usar o  compilador   jbuilder c++ com o método canvas .

        ou , no console , você pode criar sua própria fonte , usando a biblioteca windows.h , e configurando o compilador da IDE  codeblocks  para usar a       -lgdi32 ,   assim você poderá acessar os pixeis da tela e usando uma rotina que desenhe o número , criado por você mesmo e armazenado em um vetor ,  na tela na posição especificada onde o cursor estiver , e para saber a posição do cursor você pode usar o comando     GetConsoleScreenBufferInfo(hOut, &SBInfo);

          faça seu código e poste aqui para vermos como está e em que podemos ajudar   .

Link para o comentário
Compartilhar em outros sites

Veja se o código abaixo funcionar:


#include <iostream>

using namespace std;

int main()
{
   
 
    wcout << L"x\x00B1+x\x00B2+x\x00B3";
}

Se no lugar dos expoente aparecer interrogação, e porque seu console não suportar o UTF-8 (teria que alterar os parâmetros de compilação, acredito).

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Precisa usar os códigos hexadecimais Unicode para os caracteres dos dígitos Superscript, e usar uma fonte que possui as representações desses caracteres.

 

Fiz um exemplo com caracteres superscript nesses links:

https://onlinegdb.com/HyYMzPAOB (C)
https://onlinegdb.com/r1QrxwAuB (C++)

 

E aqui estão as partes da tabela Unicode com os dígitos superscript e subscript:
https://www.compart.com/en/unicode/block/U+2070
https://www.compart.com/en/unicode/block/U+0080 (tem os dígitos 1, 2 e 3) 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@Zin762  Poderia fazer assim:

                        /*    0         1         2         3         4    */
char superscript[10][4] = {"\u2070", "\u00B9", "\u00B2", "\u00B3", "\u2074",
                           "\u2075", "\u2076", "\u2077", "\u2078", "\u2079"};
                        /*    5         6         7         8         9    */

printf("%.3s", superscript[5]); //imprime o caractere superscript do digito 5

 

Até fiz um programa com uma função para transformar um número inteiro em uma string de dígitos superscript:

Teste aqui: https://onlinegdb.com/Sk0rMLgFS

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <math.h>

char *superscriptinteger(char *buffer, int n){
                            /*    0         1         2         3         4    */
    char superscript[10][4] = {"\u2070", "\u00B9", "\u00B2", "\u00B3", "\u2074",
                               "\u2075", "\u2076", "\u2077", "\u2078", "\u2079"};
                            /*    5         6         7         8         9    */
    int digit;
    static bool finished = true;
    
    if (n == 0 && finished){
        sprintf(buffer, "%.3s", superscript[0]);
        return buffer;
    }
    
    if (finished) {
        buffer[0] = '\0';
        finished = false;
    }
    
    if (n < 0){
        strcat(buffer, "\u207B"); // sinal negativo -
        n = -n;
    }
    
    if (n > 0){
        digit = n % 10;
        superscriptinteger(buffer, n/10);
        strcat(buffer, superscript[digit]);
    }
    
    if (n == 0){
        finished = true;
    }
    
    return buffer;
}

int main()
{
    
    char expoente[22];
    
    superscriptinteger(expoente, 1234);
    printf("%s\n", expoente);
    
    superscriptinteger(expoente, -1234);
    printf("%s\n", expoente);
    
    superscriptinteger(expoente, 0);
    printf("%s\n", expoente);
    
    printf("%d%s = %d\n", 2, superscriptinteger(expoente, 12), (int)pow(2, 12));
    

    return 0;
}

 

  • Obrigado 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

@devair1010 O command prompt é notoriamente ruim para lidar com Unicode, mas consegui fazer o código funcionar usando a Windows API (windows.h) para alterar a codepage do console para 65001 (UTF-8), e configurando a janela do console para usar uma fonte que possui os caracteres relevantes (por exemplo a fonte Consolas).

 

Segue o código modificado para o Windows:

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <windows.h>
#include <math.h>

char *superscriptinteger(char *buffer, int n){
                            /*    0         1         2         3         4    */
    char superscript[10][4] = {"\u2070", "\u00B9", "\u00B2", "\u00B3", "\u2074",
                               "\u2075", "\u2076", "\u2077", "\u2078", "\u2079"};
                            /*    5         6         7         8         9    */
    int digit;
    static bool finished = true;
    
    if (n == 0 && finished){
        sprintf(buffer, "%.3s", superscript[0]);
        return buffer;
    }
    
    if (finished) {
        buffer[0] = '\0';
        finished = false;
    }
    
    if (n < 0){
        strcat(buffer, "\u207B"); // sinal negativo -
        n = -n;
    }
    
    if (n > 0){
        digit = n % 10;
        superscriptinteger(buffer, n/10);
        strcat(buffer, superscript[digit]);
    }
    
    if (n == 0){
        finished = true;
    }
    
    return buffer;
}

int main()
{
    char expoente[22];

    /*
    FILE *f = fopen("teste_superscript.txt", "w");
    superscriptinteger(expoente, 1234);
    fprintf(f, "%s\n", expoente);
    
    superscriptinteger(expoente, -1234);
    fprintf(f, "%s\n", expoente);
    
    superscriptinteger(expoente, 0);
    fprintf(f, "%s\n", expoente);
    
    fprintf(f, "%d%s = %d\n", 2, superscriptinteger(expoente, 12), (int)pow(2, 12));
    
    fclose(f);
    */
    
    unsigned int cp = 65001;
    
    unsigned int cpIn = GetConsoleCP();
    unsigned int cpOut = GetConsoleOutputCP();
    
    SetConsoleOutputCP(cp);
    SetConsoleCP(cp);
    
    superscriptinteger(expoente, 1234);
    printf("%s\n", expoente);
    
    superscriptinteger(expoente, -1234);
    printf("%s\n", expoente);
    
    superscriptinteger(expoente, 0);
    printf("%s\n", expoente);
    
    printf("%d%s = %d\n", 2, superscriptinteger(expoente, 12), (int)pow(2, 12));
    
    SetConsoleCP(cpIn);
    SetConsoleOutputCP(cpOut);
    
    return 0;
}

 

Pode também ser necessário salvar esse código em um arquivo de texto com encoding UTF-8 (no codeblocks vá em Edit > File Enconding > UTF-8), ou então configurar a tag de compilação -fexec-charset=utf-8 , para que o programa compilado produza os caracteres usando a codificação UTF-8 que poderá ser representada corretamente pela codepage 65001 do console.

 

OBS: A parte comentada do código gera o texto em um arquivo txt, e não tem as limitações do command prompt.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!