Usando o printf em C

Standard

Todos os dias, pelo menos um aluno me pergunta alguma coisa sobre o printf. Como essa função é chata!!! Em fim, vamos ver se consigo ajudar um pouco mais….

printf

A função printf() está disponível na biblioteca <stdio.h>, e seu objetivo é enviar um conjunto de caracteres para o dispositivo de saída padrão do sistema <stdout>. Em outras palavras, se considerarmos apenas o sistema operacional Windows 10, o que estra função faz é escrever um conjunto de caracteres no dispositivo padrão de saída que pode ser, por exemplo, o console. Em outros dispositivos ou outros sistemas operacionais, o dispositivo padrão de saída pode ser outro mas a função do printf() será a mesma, enviar um conjunto de caracteres para o dispositivo de saída.

A função printf() está disponível na biblioteca <stdio.h> e possui a seguinte declaração:

int printf(const char *format, ...)

Observe que uma característica interessante desta função é a possibilidade de uso de um número indefinido de argumentos. O único argumento que é indispensável é o primeiro. Este primeiro  argumento deve ser um conjunto de caracteres (string) contendo a formatação desejada para os caracteres que serão enviados a saída.

Os caracteres utilizados para a formatação serão considerados de acordo com três classes: (i) caracteres ordinários que são diretamente enviados para o dispositivo de saída; (ii) caracteres de especificação de conversões; (iii) caracteres de controle de impressão.

A distinção entre estes caracteres do string de formatação será determinada de acordo com o uso do caractere ‘%’ (porcento) ou  do caractere “\” (contra-barra). Chamamos a contra-barra de caractere de  escape. Quando o computador encontra uma contra-barra em uma string ele escapa da string para executar uma função de controle. Na tabela a seguir estão os caracteres de escape e seu significado.

Escape Hexadecimal ANSI Função
\0 0x00 NULL Caractere Nulo
\a 0x07 BELL Alarme
\b 0x08 BS Retrocesso
\f 0x0C FF Avançar Página
\n 0x0A LF Quebra de Linha
\t 0x09 HT Tab Horizontal
\v 0x0B VT Tab Vertical
\\ 0x5C \ Barra Invertida
\’ 0x27 Aspas Simples
\” 0x22 Aspas Duplas
\? 0x3F ? Interrogação

Quanto aos caracteres de formatação, teremos que tomar um pouco mais de cuidado. Comece dando uma olhada na tabela a seguir:

Comando entrada resultado 
%d signed int inteiro decimal (positivo ou negativo)
%u unsigned int inteiro decimal, sem sinal
%o unsigned int inteiro octal apenas sem sinal
%x, %X unsigned int inteiro hexadecimal, sem sinal, maiúscula ou minúscula
%z[n], %Z[n] unsigned int inteiro de base n, sem sinal
%f float número real
%e, %E float número real notação científica
%s String string
%c char caractere
%p Object objeto, por exemplo um ponteiro

Considere o programa abaixo.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
double d;
d=3.14;
printf("%e\n", d);
system("PAUSE");
return 0;
}

Neste programa estaos utilizando uma variável do tipo double e é especificada uma conversão de um tipo double para o formato [-]m.dddddde+/-xx que é o formato de impressão de números reais em notacão científica. Podemos especificar várias conversões em um único comando de formatação da função printf().

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
int i; float d;
i=123; d=3.14;
printf("%i %f\n", i, d);
system("PAUSE");
return 0;
}

As duas especificações de conversão (correspondente aos dois caracteres percento) exigem dois argumentos, o primeor será um int o segundo um float. O formato geral da especificação do string  de conversão é:

%[flags][width][.prec][hlL]type

Os campos opcionais estão entre colchetes mas devem estar na ordem especificada acima. A tabela abaixo descreve os “flags”

Flag Significado
posicione o valor à esquerda
+ o valor deve ser precedido de + ou –
espaço/branco o valor positivo deve ser precedido de 1 caractere em branco
0 preencha o valor com zeros
# preceder octais com 0, hex com 0x;
mostrar ponto decimal…

A tabela abaixo descreve o par largura.precisão especificados em ([width.prec]):

número tamanho mínimo da largura ou precisão
* o próximo argumento da printf é a largura
.numero numero minimo de digitos para int;
numero de casas decimais para e ou f
numero max de dig significativos para g
numero max de caracteres para s
.* o próximo argumento da printf é o valor da precisão
(interpretado como acima)

Um h especifica short int, um l (letra l minúscula) especifica long int. Vamos ver alguns outros exemplso de uso do printf(). Experimente rodar o seguinte código.

#include<stdio.h>

	main()
	{
		int a,b;
		float f1,f2;

		a = 27;
		b = a / 2;
		printf("%d\n",b);
		printf("%3d\n",b);
		printf("%03d\n",b);

		f1 = 15.3;
		f2 = c / 3;
		printf("%3.2f\n",f2);
	}

 

 

 

 

Algumas pegadas que vão mudar a história do homem

Standard

Nada é tão interessante que uma nova descoberta arqueológica que coloca em cheque o que sabemos sobre nossa história e evolução.  Já discuti algumas delas aqui, quando um pastor curdo descobriu um templo e mais recentemente, falando de vinho. Volto ao tema, entre afoito, curioso e excitado. Um conjunto de pegadas, achadas na Ilha de Creta, em Trachilos, parecem indicar que pés humanos andaram sobre esta ilha há 5,7 milhões de anos. Tempo em que nossos antepassados deveriam ter pés parecidos com os pés dos grandes macacos e não deveriam andar eretos.

A matéria original, que discuto aqui foi publicada em news.com.au, uma organização de notícias australiana que, até onde me consta, tem reputação de seriedade. Então, podemos considerar a fonte como idônea e fidedigna e trata do artigo científico: Possible hominin footprints from late Miocene (ac. 5.7Ma) of Crete?

A equipe liderada por Gerard D. Gierliński analisou uma série de rastros deixados na margem lamacenta de um rio há 5,7 milhões de anos, fossilizadas, em 2002 e encontrou algumas pegadas curiosas que aparentam terem sido deixadas por algum animal cujo pé teria um polegar grande, redondo, sem garras muito próximo, senão igual, ao pé humano moderno colocando a raça humana, ereta pelo menos 1,5 milhões de anos antes do que que sabíamos. Ou pensávamos que sabíamos.

O estudo é, no mínimo, polêmico. O próprio sr. Gierlinski admite isso no seu trabalho mas, foi feito cuidadosamente e com critério científico. Agora, resta aos pares discutir, e aprofundar o assunto, até que a ciência chegue a um consenso.

Considerando as outras pegadas, os cientistas acreditam que este deve ter sido um caçador, rastreando suas presas em busca de subsistência. Além da data calculada para esta caçada, existe ainda o problema do lugar. Creta está muito longo dos lugares onde acreditamos que existissem hominídeos nesta época.

O estudo tem implicações interessantes, Um hominídeo ereto, muito mais antigo que a nossa espécie pode indicar outra espécie humanoide totalmente desconhecida. Qual teria sido seu destino? Está no nosso tronco? ou em outra árvore? O sr. Gierlinski é cuidadoso na análise e conclusões quando ressalta que as marcas estão longe de serem perfeitas e que pode existir alguma outra explicação mais simples. Eu, por outro lado, vou acompanhar tudo com olhos bem abertos.

A mais antiga garrafa de vinho

Standard

Já falamos antes do templo mais antigo da humanidade, talvez já naquele tempo, o vinho fosse a bebida preferida. Não temos certeza disso. Temos algumas referências de vinho em tábuas sumerianas de 5000 anos atrás mas, não vamos muito além disso. Contudo, temos certeza que em 350AC já se tomava vinho. Tanta certeza que temos uma garrafa para provar. ]

A garrafa Römerwein, ou garrafa Speyer foi descoberta em uma escavação arqueológica realizada na tumba de um nobre romano, na região alemã que dá nome a garrafa, que viveu entre os anos 325 e 329 AC. E tem a fama de ser a mais antiga garrafa de vinho ainda fechada.

Trata-se de uma anfora de aproximadamente 1.5 litro, enfeitada com dois golfinhos de vidro e parcialmente cheia onde ainda é possivel ver, o vinho, e algumas ervas para temperar. Os antigos romanos tinham o hábito de misturar mel e ervas ao vinho. Hoje chamamos isso de sangria. Mas, em fim, os tempos mudam. O interessante neste vinho é que conserva todo o mistêrio de uma era muito anterior a fumaça do petróleo e dos pesticidas. Mas, acredito que ninguém terá coragem de abrir.

Matéria original: The Guardian

 

E uma atriz de Hollywood toma a cena na história da engenharia elétrica

Standard

As décadas depois da segunda guerra mundial não foram fáceis para ninguém. Principalmente se você fosse mulher, linda e inteligente. Hedy Lamarr nasceu na Austria em nove de novembro de 1914. Linda e inteligente de um tipo exótico para a Austria, foi descoberta pelo Diretor Max Reinhardt e teve uma carreia curta na Europa. Talvez, seu primeiro momento de fama tenha sido oriundo da cena de nudez no filme Ectasy. Mas, o mais importante é o que ela realizou com a tecnologia da época. Continue reading

Gradiente, divergente e rotacional

Standard

Aprender eletromagnetismo não é fácil. Ensinar, pior ainda. Meus alunos, apesar de esforçados e dedicados esbaram em problemas de álgebra básica e se perdem na matemática esquecendo os conceitos mais importantes. Uma das coisas que sinto falta em todos os livros que leio são definições simples. Coisas que possam ajudar o entendimento do conceito, antes mesmo de ver a matemática.

Continue reading

História da Engenharia Elétrica – Thales de Mileto

Standard

Nossa história começa em uma pequena cidade estado da Grécia antiga, Mileto. Descrita por alguns historiadores como uma poderosa aliada de Atenas nas guerras contra os persas esta cidade teve papel decisivo na difusão da cultura helênica durante o século VI antes de Cristos (Wikipédia, 2015). Ficava na região que os gregos chamavam de Anatólia, ou, em tradução livre, onde o sol nasce. Ao oriente, se preferir. Suas ruinas podem ser encontradas na região de Balat, na Turquia. Continue reading

Porquê radianos?

Standard

Curiosamente muitos alunos de engenharia têm dúvidas quanto ao uso dos radianos. Radianos são unidades de medida, assim como o quilo ou o metro. E devem ser prioritariamente utilizados em todos os cálculos.  Graus e grados são unidades arbitrárias e, em cálculo, não tem utilidade. Por outro lado, radianos relacionam uma medida linear com uma medida angular. Continue reading

Como o pareamento do Bluetooth funciona

Standard

Um dispositivo Bluetooth transmite dados sobre uma rede composta  de sinais de rádio de muito baixa potência em uma frequência entre 2.402Ghz e  2.480 GHz, decidida em um acordo internacional. Esta banda é conhecida como ISM e foi reservada para uso em dispositivos médicos e científicos e é utilizada, por muitos dispositivos domésticos, médicos e científicos de grande importância como acionadores remotos de portão de garagem. O que poderia tornar o Bluetooth suscetível a interferência

Continue reading