É muito comum uma saída com percentual, e com o símbolo '%' depois do número, mas a printf() usa este caractere para formatação de saída. Qual é a solução?
Já vi muitas vezes sendo resolvido assim:
printf( "%f %s\n",pecent,"%" );
Isto está errado, realmente muito errado. Mas por que está errado, e qual é a solução?
Eu já tenho um blog principalmente de fotografia, mas aqui pretendo falar de computação, dando dicas, truques etc. O nome veio do fictício Necronomicon, que pelo que eu li, seria um livro praticamente perdido, com poucos exemplares sobreviventes, e ainda por cima proibido, ensinando uma arte perdida, muito pouco conhecida, chegando a ser muito perigosa. É neste sentido que uso como origem do nome deste blog. Para maiores detalhes, leia o artigo mais antigo publicado.
quarta-feira, 22 de agosto de 2018
C: Ponteiros para função
Em C existe um recurso muito incomum. Ponteiros para funções. Não sei de outra linguagem que tenha isto, além de C e C++. Não sei se outras linguagens derivadas do C, como Java e C# tem isto (Podem responder nos comentários). Dá para fazer em Assembly, mas isto não conta.
Qual é o uso disto? Depende do caso. É possível passar uma função, aliás, o endereço de uma função, como parâmetro para outra função, para que ela a chame dentro dela, por exemplo.
Então vamos a um exemplo prático:
Qual é o uso disto? Depende do caso. É possível passar uma função, aliás, o endereço de uma função, como parâmetro para outra função, para que ela a chame dentro dela, por exemplo.
Então vamos a um exemplo prático:
terça-feira, 17 de abril de 2018
Testando os quadrados por somas de ímpares de Pitágoras e otimização
Eu vi a seguinte publicação no Facebook e pensei em testar computacionalmente até um limite grande. Para quem não quer, ou não tem como, acessar o Facebook, reproduzo a imagem abaixo:
Quando escrevia o programa notei que estava fazendo errado, que o código iria gastar tempo demais inutilmente, então reescrevi o código resolvendo isto.
A primeira versão do programa foi:
#include <stdio.h>
int main()
{
register unsigned long long numero, impar, soma ;
for( numero = 1 ; numero <= 1000000000 ; numero++ )
{
register int i ;
for( i = numero, impar = 1, soma = 0 ; i ; i--, impar +=2 )
soma += impar ;
if( soma != numero*numero )
printf( "Falhou para o numero %llu\n",numero );
}
}
Esta é a descrição literal do problema, mas nem sempre a descrição literal é a melhor a ser implementada. O que está errado neste programa?
Quando escrevia o programa notei que estava fazendo errado, que o código iria gastar tempo demais inutilmente, então reescrevi o código resolvendo isto.
A primeira versão do programa foi:
#include <stdio.h>
int main()
{
register unsigned long long numero, impar, soma ;
for( numero = 1 ; numero <= 1000000000 ; numero++ )
{
register int i ;
for( i = numero, impar = 1, soma = 0 ; i ; i--, impar +=2 )
soma += impar ;
if( soma != numero*numero )
printf( "Falhou para o numero %llu\n",numero );
}
}
Esta é a descrição literal do problema, mas nem sempre a descrição literal é a melhor a ser implementada. O que está errado neste programa?
Assinar:
Postagens (Atom)