<aside>

Conhecimentos necessários:

Variáveis, entrada e saída de dados, estruturas condicionais e estruturas repetitivas

</aside>

<aside>

Navegação

</aside>

Existem algumas técnicas que os programadores usam para criar programas mais fáceis, além de deixá-los mais organizados e fáceis de serem entendido por outras pessoas.

Depuração e testes

Realizar testes é o essencial para criar um programa, mas não deixe isso apenas para o final!

Suponha que está fazendo uma calculadora. Não deixe para testá-la apenas quando acabar de escrevê-la, vá testando sempre de possa! Por exemplo, crie a possibilidade de somar e já a teste! Coloque a subtração e faça outro teste! Faça a multiplicação e faça outro teste! Sempre vá testando. Isso ajuda a identificar melhor onde o erro de localiza.

Se não fosse assim, você poderia acabar de programá-la e quando fosse testar… bum! Um problema na multiplicação, mas a parte da multiplicação está bem escrita, então onde está o problema? Se você fosse testando desde o início, conseguiria identificar mais rápido que o problema pode estar no scanf que colocou nas primeiras linhas, ou um “%d” que colocou onde era para ser “%f”…

Talvez nesse exemplo da calculadora, ainda possa ser rápido de achar um problema, pois ele deve ter até umas 100 linhas de código… mas e num programa que possui 1500 linhas de código? Concorda comigo que achar o erro ali vai ser bem mais demorado?

Mas e se for um programa que vai criar uma função aleatório do segundo grau e já aplicar a fórmula de Bhaskara? Isso já fica mais difícil de separar em parte para testar, concorda? Por isso existe a depuração! De vez em quando, coloque um printf para mostrar o valor da variável e ver o valor que ela possui em determinado pedaço do código, isso ajuda a perceber se ela está agindo como deveria ou se há algum problema fazendo ela agir de forma estranha.

O printf no meio do código é o cara que vai ficar te avisando como as coisas estão ocorrendo. Use ele com sabedoria! Quando estiver tudo pronto, basta apagá-los!

Escrita

Nomeação de variáveis

Colocar nomes convenientes em variáveis é algo essencial, tanto para te ajudar a saber o que representa cada variável, como para ajudar outras pessoas a lerem o seu código.

Um exemplo aqui:

#include <stdio.h>

#define AAA 0.6213711922;
int main(){
		double iii, jjj;
		scanf("%lf", &iii);
		jjj = iii * AAA;
		printf("%lf", jjj);
		return 0;
}

Caso reconheça os números na constante, talvez saiba o que esse programa faz, caso não, observe o mesmo, mas com melhores nomes de variáveis:

#include <stdio.h>

#define KM_PARA_MILHAS 0.6213711922;
int main(){
		double km, milhas;
		scanf("%lf", &km);
		milhas = km * KM_PARA_MILHAS;
		printf("%lf", milhas);
		return 0;
}

E agora? Ficou mais fácil de identificar que é um programa para converter quilômetros para milhas?

Tanto para você quanto para quem vai ler o código, é melhor ter nomes de variáveis que contém uma informação sobre o quê que ela se trata.

Indentação

Isso não passa de espaços vazios que damos com a tecla TAB para dar organização ao código dentro de chaves. Darei um exemplo de um código sem indentação e com indentação:

Sem indentação:

#include <stdio.h>

int main(){
int continuar = 1;
int num;
while(continuar){
printf("Deseja prosseguir (1) ou sair (0)?\\n");
scanf("%d", &continuar);
if(continuar){
printf("informe um numero inteiro: ");
scanf("%d", &num);
if(num % 2 == 0){
if(num % 4 == 0)
printf("Seu numero eh divisivel por 2 e 4.\\n");
else
printf("Seu numero eh divisivel por 2, mas nao por 4.\\n");
}
else
printf("Seu numero nao eh divisivel por 2 e 4.\\n");
}
else
printf("Obrigado por usar o programa!");

}
return 0;
}

Um programa para verificar se tal número é divisível por 2 e por 4. Ele está dentro de um while para o usuário poder usar quantas vezes quiser, e como o valor 1 já é uma afirmação verdadeira, nem precisa fazer uma comparação como “continuar == 1”.

Observe como fica muito mais difícil de entender. Agora observe o mesmo código com indentação:

#include <stdio.h>

int main(){
		int continuar = 1;
		int num;
		while(continuar){
				printf("Deseja prosseguir (1) ou sair (0)?\\n");
				scanf("%d", &continuar);
				if(continuar){
						printf("informe um numero inteiro: ");
						scanf("%d", &num);
						if(num % 2 == 0){
								if(num % 4 == 0)
										printf("Seu numero eh divisivel por 2 e 4.\\n");
								else
										printf("Seu numero eh divisivel por 2, mas nao por 4.\\n");
						}
						else
							printf("Seu numero nao eh divisivel por 2 e 4.\\n");
				}
				else
						printf("Obrigado por usar o programa!");
						
		}
		return 0;
}

Muito mais organizadinho, né?

Comentários

Comentários que o criador do programa faz pode ajudar ele a lembrar de tais partes do código, como também pode ajudar outras pessoas a entenderem melhor.

Para fazer um comentário, basta escrever “//” e escrever o comentário na frente, fazendo tudo à frente do “//” ser um comentário e ignorado pelo código.

Para escrever mais linhas como comentário, basta abrir com “/” e fechar com “/”. Tudo entre isso será considerado comentário e ignorado pelo código.

Irei usar o exemplo acima com comentários:

#include <stdio.h>

/*
Esse programa verificar se um número é divisível por 2 e 4.
Caso seja ou não, ele nos informa.
*/

int main(){
		int continuar = 1; //variável responsável pelo loop do while
		int num; //número que será verificado se é divisível
		while(continuar){
				printf("Deseja prosseguir (1) ou sair (0)?\\n");
				scanf("%d", &continuar); //caso a pessoa escreva 1, já vai tornar o while verdadeiro e fazer ele se repetir mais uma vez
				if(continuar){ //caso a pessoa escolha continuar, vai pra cá
						printf("informe um numero inteiro: ");
						scanf("%d", &num); //recebe o número para verificar
						if(num % 2 == 0){ //verifica se ele é divisível por 2
								if(num % 4 == 0) //verifica se ele é divisível por 4
										printf("Seu numero eh divisivel por 2 e 4.\\n");
								else //vem pra cá, caso ele não seja divisível por 4
										printf("Seu numero eh divisivel por 2, mas nao por 4.\\n");
						}
						else //vem pra cá, caso ele não seja divisível por 2
							printf("Seu numero nao eh divisivel por 2 e 4.\\n");
				}
				else //caso a pessoa escolha continuar, vai pra cá e encerra o while, pois a variável é 0, ou seja, falsa
						printf("Obrigado por usar o programa!");
						
		}
		return 0;
}

Fica bem melhor de entender, né?

Modularização

Aqui consiste em dividir as tarefas em funções, como somar, subtrair, multiplicar e dividir, podem ser separadas em 4 funções diferentes.

Mas… o que são funções em C? Veja sobre isso aqui:

Sub-rotinas (funções)