<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://fiscomp.if.ufrgs.br/index.php?action=history&amp;feed=atom&amp;title=C</id>
	<title>C - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="http://fiscomp.if.ufrgs.br/index.php?action=history&amp;feed=atom&amp;title=C"/>
	<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=C&amp;action=history"/>
	<updated>2026-04-19T17:01:06Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=C&amp;diff=17&amp;oldid=prev</id>
		<title>Tekkito: Criou página com 'Esta é a pagina dedicada à linguagem de programação C. A estrutura da página segue de muito perto a estrutura da página anterior  que explica a linguagem Fortran. Assim os ...'</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=C&amp;diff=17&amp;oldid=prev"/>
		<updated>2011-09-19T17:34:57Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;Esta é a pagina dedicada à linguagem de programação C. A estrutura da página segue de muito perto a estrutura da página anterior  que explica a linguagem Fortran. Assim os ...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Esta é a pagina dedicada à linguagem de programação C.&lt;br /&gt;
A estrutura da página segue de muito perto a estrutura da página anterior &lt;br /&gt;
que explica a linguagem Fortran.&lt;br /&gt;
Assim os que desejarem compará-las poderão fazê-lo com maior facilidade.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Olá Mundo ===&lt;br /&gt;
&lt;br /&gt;
Já é um divertida tradição que o primeiro programa de um iniciante a uma linguagem&lt;br /&gt;
de programação é  um programa que ao ser acionado responde escrevendo a expressão&lt;br /&gt;
&amp;quot;Hello World&amp;quot; ou em português &amp;quot;Olá Mundo&amp;quot;. Você pode até achar na Wikipedia uma&lt;br /&gt;
página com este programa escrito em mais de 30 linguagens conhecidas.&lt;br /&gt;
&lt;br /&gt;
Para o C este código é&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
printf(&amp;quot;Ola mundo! \n&amp;quot;); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O código acima mostra pelo menos dois elementos essenciais da gramática de C. Primeiro a existência de&lt;br /&gt;
instruções para incluir funções. Diferente de alguns compiladores, como o Fortran, o compilador C &lt;br /&gt;
necessita de instruções explícitas dizendo quais funções estarão presentes no programa, mesmo que&lt;br /&gt;
estas funções sejam as mais óbvias. No caso&lt;br /&gt;
do código acima a diretiva de compilação &amp;quot;#include&amp;quot; indicou a inclusão de um grupo de funções&lt;br /&gt;
de entrada e saída, contidas no arquivo &amp;quot;stdio.h&amp;quot;. Se tal instrução não fosse passada ao compilador &lt;br /&gt;
ele não reconheceria a função &amp;quot;printf&amp;quot;, que permite ao programa escrever &amp;quot;Ola Mundo!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Um segundo elemento da linguagem C é o programa principal. Todo o código C deve ter um programa&lt;br /&gt;
principal indicado pela expressão  &amp;quot;main&amp;quot; e contido entre chaves &amp;quot;{&amp;quot; &amp;quot;}&amp;quot;.&lt;br /&gt;
A ordem temporal das intruções realizadas pelo programa são lidas dentro deste programa principal. &lt;br /&gt;
Vocês vão observar que um código em C pode ser até bem desordenado fora do programa principal, &lt;br /&gt;
mas funcionará se estiver em ordem dentro dele. &lt;br /&gt;
Assim para entendermos um programa em C o primeiro passo é olhar dentro do &amp;quot;main&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
A função &amp;quot;printf&amp;quot; permite a '''impressão formatada''' da saída do programa. Veremos mais adiante todas&lt;br /&gt;
as possibilidades desta função. Por hora observe que o formato é escrito entre aspas e que a&lt;br /&gt;
instrução &amp;quot;\n&amp;quot; representa a mudança de linha. Ou seja, o programa escreve &amp;quot;Ola Mundo!&amp;quot; e o cursor&lt;br /&gt;
muda de linha.&lt;br /&gt;
&lt;br /&gt;
==== Editar ====&lt;br /&gt;
&lt;br /&gt;
Estas linhas devem estar dentro de um arquivo (ex: ''ola.c''), isto pode ser feito com cat linha por linha ou com um editor de texto (''jed'',''emacs'' ou ''view'')&lt;br /&gt;
&lt;br /&gt;
==== Compilar ====&lt;br /&gt;
&lt;br /&gt;
''ola.c'' deve ser compilado, isto é traduzido da linguagem C (''código fonte'') para '''Assembler''' (''código objeto'' ou de maquina) com a seguinte instrução:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; gcc ola.c -o ola&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''gcc'' invoca o compilador que faz a dita conversão&lt;br /&gt;
&lt;br /&gt;
''-o nome''  é uma opção para nomear o código objeto (o programa executável) que no exemplo terá o nome '''''ola'''''&lt;br /&gt;
&lt;br /&gt;
sem essa opção o executável criado terá o nome '''a.out'''&lt;br /&gt;
&lt;br /&gt;
==== Rodar ====&lt;br /&gt;
&lt;br /&gt;
''ola.c'' não é executável, o computador não sabe o que fazer com ele, para isso o compilador traduz para uma série de instruções que o computador sim sabe executar.&lt;br /&gt;
&lt;br /&gt;
Para rodar fazemos:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; ./ola  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
./ na frente é necessário para o interprete de comandos (''shell'') saber que o programa está no diretório de trabalho (veremos depois como configurar a sessão para não ter que digitar esses caracteres)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; Ola Mundo! &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
será a saída na tela&lt;br /&gt;
&lt;br /&gt;
Desta forma completamos o processo de ter criado nosso primeiro código C, compilado e executado o mesmo.&lt;br /&gt;
&lt;br /&gt;
=== Tipos de Variáveis ===&lt;br /&gt;
&lt;br /&gt;
Por diversas razões entre as quais o bom gerenciamento da memória, ou a correta interpretação&lt;br /&gt;
de um caractere, a linguagem C exige que o tipo de cada variável seja definido no programa. Não&lt;br /&gt;
existem &amp;quot;defaults&amp;quot;, toda a variável deve ser definida caso contrário o compilador acusa erro. &lt;br /&gt;
As mais comuns são&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
char   - Caracter. O valor armazenado é um caracter usualmente em código ASCII.&lt;br /&gt;
int    - Número inteiro.&lt;br /&gt;
float  - Numero de ponto flutuante de precisão simples.&lt;br /&gt;
double - Número de ponto flutuante de precisão dupla.&lt;br /&gt;
void   - Tipo indefinido, cuja utilidade veremos mais adiante.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operadores matemáticos ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
. ponto decimal (vírgula *NÃO*)&lt;br /&gt;
+ - * /  soma subtração multiplicação e divisão (igual que uma calculadora)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diferente do Fortran o C não tem um operador básico associado a potenciação. A potenciação&lt;br /&gt;
é feita por uma função matemática.&lt;br /&gt;
&lt;br /&gt;
=== Funções Matemáticas===&lt;br /&gt;
Estas são as funções fazem parte da biblioteca de funções do compilador C, contidas em ''math.h''.&lt;br /&gt;
Ou seja o compilador C as reconhece se a instrução&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
estiver presente nas primeiras linhas no código.&lt;br /&gt;
  &lt;br /&gt;
A sintaxe de uso é o nome da função (geralmente três letras) e o argumento entre parêntesis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sqrt(x)                - raiz quadrada: &lt;br /&gt;
pow(x,y)               - x elevado na potencia y&lt;br /&gt;
sin(x), cos(x), tan(x) - funções trigonométricas &lt;br /&gt;
exp(x)                 - exponencial&lt;br /&gt;
log(x)                 - logarítmo natural&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;!--Lista completa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Function        Generic  Specific Data type&lt;br /&gt;
                name     name     Arg   Res&lt;br /&gt;
&lt;br /&gt;
Square root     SQRT     SQRT     R     R&lt;br /&gt;
                         DSQRT    D     D&lt;br /&gt;
                         CSQRT    C     C&lt;br /&gt;
&lt;br /&gt;
Exponential     EXP      EXP      R     R&lt;br /&gt;
                         DEXP     D     D&lt;br /&gt;
                         CEXP     C     C&lt;br /&gt;
&lt;br /&gt;
Natural         LOG      ALOG     R     R&lt;br /&gt;
 logarithm               DLOG     D     D&lt;br /&gt;
                         CLOG     C     C&lt;br /&gt;
&lt;br /&gt;
Common          LOG10    ALOG10   R     R&lt;br /&gt;
 logarithm               DLOG10   D     D&lt;br /&gt;
&lt;br /&gt;
Sine            SIN      SIN      R     R&lt;br /&gt;
                         DSIN     D     D&lt;br /&gt;
                         CSIN     C     C&lt;br /&gt;
&lt;br /&gt;
Cosine          COS      COS      R     R&lt;br /&gt;
                         DCOS     D     D&lt;br /&gt;
                         CCOS     C     C&lt;br /&gt;
&lt;br /&gt;
Tangent         TAN      TAN      R     R&lt;br /&gt;
                         DTAN     D     D&lt;br /&gt;
&lt;br /&gt;
Arcsine         ASIN     ASIN     R     R&lt;br /&gt;
                         DASIN    D     D&lt;br /&gt;
&lt;br /&gt;
Arccosine       ACOS     ACOS     R     R&lt;br /&gt;
                         DCOS     D     D&lt;br /&gt;
&lt;br /&gt;
Arctangent      ATAN     ATAN     R     R&lt;br /&gt;
                         DATAN    D     D&lt;br /&gt;
                ATAN2    ATAN2   2R     R&lt;br /&gt;
                         DATAN2  2D     D&lt;br /&gt;
&lt;br /&gt;
Hyperbolic      SINH     SINH     R     R&lt;br /&gt;
 sine                    DSINH    D     D&lt;br /&gt;
&lt;br /&gt;
Hyperbolic      COSH     COSH     R     R&lt;br /&gt;
 cosine                  DCOSH    D     D&lt;br /&gt;
&lt;br /&gt;
Hyperbolic       TANH    TANH     R     R&lt;br /&gt;
 tangent                 DTANH    D     D&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ciclos (loop) ===&lt;br /&gt;
O grande lance dos programas (e do computador claro) é poder repetir operações. Ou seja, utilizando a lógica para repetir tarefas que podem ter variações especificadas pelo programador dentro de um ciclo. Vejamos um exemplo usando a instrução ''for'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int i;&lt;br /&gt;
float x,y;&lt;br /&gt;
...&lt;br /&gt;
for(i=1;i&amp;lt;=100;i++)&lt;br /&gt;
   {&lt;br /&gt;
   x = i*0.1;   &lt;br /&gt;
   y = pow(x,2);&lt;br /&gt;
   printf(&amp;quot;%f %f\n&amp;quot;,x,y);&lt;br /&gt;
   }&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
a interpretação do '''for''' é a seguinte:&lt;br /&gt;
&lt;br /&gt;
    * comece com i=1&lt;br /&gt;
    * faça o que esta entre chaves.&lt;br /&gt;
    * incremente i em 1 ( i++ ) e veja se ultrapassou o valor máximo de i (no exemplo 100)&lt;br /&gt;
    * se a resposta é não faça de novo  com o novo valor de i&lt;br /&gt;
    * o ciclo se repete até o valor máximo de i (= 100 no exemplo)&lt;br /&gt;
    * quando i ultrapassa esse valor o laço é interrompido e o programa prossegue&lt;br /&gt;
&lt;br /&gt;
Observe que assim como no comando ''main'' todas as instruções dentro do comando ''if'' devem&lt;br /&gt;
estar entre chaves. A presença das chaves só é facultativa se houver uma única instrução dentro&lt;br /&gt;
do ciclo. As chaves são essenciais para organizar a estrutura de encadeamentos dentro de um&lt;br /&gt;
código C. Quando o código é muito grande é usual que o programador use certas regras de&lt;br /&gt;
identação ou alinhamento das chaves para melhor visualizá-lo ( Por exemplo, no exemplo&lt;br /&gt;
acima a chave fecha diretamente abaixo de onde ela abriu). Editores tradicionais como &lt;br /&gt;
o emacs ou o gvim ajudam o programador a verificar se o fechamento das chaves está correto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Pergunta:'''&lt;br /&gt;
Qual será no exemplo acima o valor da variável ''i'' finalizado o laço?&lt;br /&gt;
&lt;br /&gt;
==== Notas em sintaxe - Maísculas, Abrevições e printf ====&lt;br /&gt;
&lt;br /&gt;
'''Mauísculas '''&lt;br /&gt;
&lt;br /&gt;
No C como no shell maiúsculas são diferentes de minúsculas. Por exemplo em C , não existe o&lt;br /&gt;
commando &amp;quot;Printf&amp;quot; e sim &amp;quot;printf&amp;quot;. Isto também vale para variáveis definidas dentro do programa,&lt;br /&gt;
por exemplo a variável ''a'' é diferente da variável ''A''.&lt;br /&gt;
&lt;br /&gt;
'''Abreviações'''&lt;br /&gt;
&lt;br /&gt;
O C é uma linguagem que possui muitas notações abreviadas para melhorar a dinâmica de escrita. &lt;br /&gt;
Por exemplo  &amp;quot;i++&amp;quot; é uma abreviação de &amp;quot;i = i+1&amp;quot; ou seja o incremento de 1 de uma variável. A notação&lt;br /&gt;
para um incremento genérico é &amp;quot;x += a&amp;quot; onde &amp;quot;a&amp;quot; é um valor qualquer. Isto também serve para multiplicações&lt;br /&gt;
e divisões, por exemplo. &amp;quot;x *= a&amp;quot; é equivalente a &amp;quot;x = x*a&amp;quot; e assim por diante.&lt;br /&gt;
&lt;br /&gt;
'''printf - Impressão formatada'''&lt;br /&gt;
&lt;br /&gt;
Neste exemplo vemos que para imprimir dois números do tipo ''float'' a expressão ''%f'' deve estar&lt;br /&gt;
no argumento de ''printf''. O que indica o comando acima é que os dois números de ponto flutuante serão&lt;br /&gt;
impressos na mesma linha com um único espaço entre eles (já que tem um único espaço entre as&lt;br /&gt;
duas expressões &amp;quot;%f&amp;quot;. Para os demais formatos temos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%c  variável tipo char&lt;br /&gt;
%d  variável tipo int&lt;br /&gt;
%f  variável tipo float&lt;br /&gt;
%lf variável tipo double&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exemplo: MRUA ====&lt;br /&gt;
Neste exemplo criamos um programa que gera a trajetória x(t) (uma dimensão) de um objeto com aceleração constante:&lt;br /&gt;
&lt;br /&gt;
 x(t) = x(0) + v(0)*t + 0.5*a*t²&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Programa mrua  --- isto é um comentário, não é interpretado pelo compilador&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{               &lt;br /&gt;
float x0, x, v0, a, t, dt;                   //  variáveis ponto flutuante&lt;br /&gt;
int   i,N;                                   //  variáveis inteiras   &lt;br /&gt;
printf(&amp;quot;entre x0, v0, a, t, N\n&amp;quot;);          &lt;br /&gt;
scanf(&amp;quot;%f %f %f %d&amp;quot;,&amp;amp;x0, &amp;amp;v0, &amp;amp;a, &amp;amp;t, &amp;amp;N);   // leitura dos dados&lt;br /&gt;
dt = t/N;                    // passo de tempo: definido pelo tempo máximo e o número de pontos da trajetória&lt;br /&gt;
t = 0;&lt;br /&gt;
for(i = 1; i&amp;lt;= N; i++)&lt;br /&gt;
   {&lt;br /&gt;
   x = x0 + v*t + 0.5*a*pow(t,2);&lt;br /&gt;
   printf(&amp;quot;%f %f\n&amp;quot;, t, x);                  // saída de dados&lt;br /&gt;
   t += dt;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Nota''': este programa tem um erro que você deve descobrir&lt;br /&gt;
&lt;br /&gt;
==== Notas em sintaxe - Pointers ou apontadores ====&lt;br /&gt;
&lt;br /&gt;
O C é uma linguagem que possibilita o usuário ter acesso não só ao valor de uma variável&lt;br /&gt;
(ou seja o conteúdo da memória onde esta variável é armazenada) mas também ao endereço&lt;br /&gt;
na memória onde esta armazenada a variável. A existência destes dois tipos de informação&lt;br /&gt;
introduz certas regras de sintaxe em C que se não são seguidas causam muita dor de&lt;br /&gt;
cabeça.&lt;br /&gt;
Por exemplo, se você utilizar o valor de uma certa variável ''x'' como argumento de um&lt;br /&gt;
comando (ou função) de forma que este o valor seja usado mas não moficado pelo comando (ou função) &lt;br /&gt;
você escreve simplesmente&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
func(x);&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Mas se no entanto ''func'' for modificar ''x'' você deverá forçosamente escrever&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
func(&amp;amp;x);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
onde &amp;quot;&amp;amp;x&amp;quot; é o valor do apontador da variável &amp;quot;x&amp;quot;( endereço na memória onde está o valor de &amp;quot;x&amp;quot;).&lt;br /&gt;
E é esta a razão pela qual os argumentos do comando de leitura formatada  &amp;quot;scanf&amp;quot; são &lt;br /&gt;
os apontadores e não as variáveis. Um comando de leitura sempre modifica valores de&lt;br /&gt;
variáveis.&lt;br /&gt;
&lt;br /&gt;
Funções e comandos são sensíveis aos tipos de variáveis em seus argumentos. Colocar a variável onde&lt;br /&gt;
deveria estar seu apontador ( e vice versa ) causam erro no programa.  &lt;br /&gt;
&lt;br /&gt;
Isto no começo parece mais dificultar do que ajudar o programador. Mas veremos mais adiante&lt;br /&gt;
que a existência de apontadores possibilita escrever programas muito mais eficientes sendo&lt;br /&gt;
isto uma das grandes vantagens da linguagem C.&lt;br /&gt;
&lt;br /&gt;
=== Controle de Fluxo (if) ===&lt;br /&gt;
&lt;br /&gt;
Possibilitam a escolha de rumos diferentes no programa dependendo de valores de variáveis ou condições entre elas.&lt;br /&gt;
Sintaxe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (condição)&lt;br /&gt;
    { instruções executadas quando condição verdadeira }&lt;br /&gt;
else&lt;br /&gt;
    { instruções executadas quando condição falsa }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operadores relacionais e lógicos ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
==   igual&lt;br /&gt;
!=   diferente&lt;br /&gt;
&amp;gt;    maior&lt;br /&gt;
&amp;lt;    menor&lt;br /&gt;
&amp;gt;=   maior ou igual&lt;br /&gt;
&amp;lt;=   menor ou igual&lt;br /&gt;
&amp;amp;&amp;amp;   E lógico&lt;br /&gt;
||   OU lógico&lt;br /&gt;
!    NÃO lógico&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eles são usados junto com as instrucões de controle como o ''if'' (se), exemplo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// exemplo de divisão a x b:&lt;br /&gt;
float a,b,c;&lt;br /&gt;
...&lt;br /&gt;
scanf(&amp;quot;%f %f&amp;quot;,&amp;amp;a, &amp;amp;b);&lt;br /&gt;
&lt;br /&gt;
if (b != 0) &lt;br /&gt;
    c = a/b;&lt;br /&gt;
else&lt;br /&gt;
    break;&lt;br /&gt;
printf(&amp;quot; a/b= %f/n&amp;quot;,c);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ciclos (Avançado)==&lt;br /&gt;
&lt;br /&gt;
Muitas vezes quando estamos lidando com um ciclo é conveniente poder interrompê-lo&lt;br /&gt;
antes do número previsto de iterações. &lt;br /&gt;
Isto pode acontecer porque algum erro é detectado ou porque o&lt;br /&gt;
resultado desejado já foi obtido sendo desnecessário continuar no ciclo.&lt;br /&gt;
O comando ''for'' em princípio aceita a introdução de uma série de condições de parada&lt;br /&gt;
além do limite da variável contadora. Por exemplo&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int i;&lt;br /&gt;
float x;&lt;br /&gt;
...&lt;br /&gt;
for( i=1; ( i &amp;lt; 100 &amp;amp;&amp;amp; x &amp;gt; 3.1 );i++)&lt;br /&gt;
   {&lt;br /&gt;
   instrução1;&lt;br /&gt;
   instrução2;&lt;br /&gt;
   }&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
No exemplo acima se ''x'' assumir um valor menor que 3.1 o ciclo&lt;br /&gt;
não é repetido novamente não importa o valor de ''i'', isto porque a condição&lt;br /&gt;
para a realização de um ciclo é que &amp;quot;i&amp;quot; seja menor que 100 e &amp;quot;x&amp;quot; seja maior que 3.1.&lt;br /&gt;
&lt;br /&gt;
=== Quebra - Break ===&lt;br /&gt;
&lt;br /&gt;
Outras vezes uma interrupção mais abrupta é necessária. Ou seja, talvez seja conveniente&lt;br /&gt;
deixarmos um ciclo no meio dele, não realizando todas as instruções até o fim.&lt;br /&gt;
Isto se pode fazer usando o comando ''break'' como é exemplificado abaixo &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int i;&lt;br /&gt;
float x;&lt;br /&gt;
...&lt;br /&gt;
for( i=1; i &amp;lt; 100 ;i++)&lt;br /&gt;
   {&lt;br /&gt;
    instrução1&lt;br /&gt;
    if( x &amp;lt; 3.1) break;&lt;br /&gt;
    instrução2&lt;br /&gt;
   }&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Os dois exemplos acima são quase iguais, salvo pelo fato que no último somente&lt;br /&gt;
a instrução1 é realizada.&lt;br /&gt;
&lt;br /&gt;
=== Ciclo condicionais - do-while e while ===&lt;br /&gt;
&lt;br /&gt;
Os ciclos podem ser controlados de diversas formas. Como vimos&lt;br /&gt;
anteriormente o ''for'' no seu uso mais simples repete um conjunto&lt;br /&gt;
de instruções um número definido de vezes. Mas podemos adicionar&lt;br /&gt;
mais condições de parada a ele.&lt;br /&gt;
&lt;br /&gt;
Existem dois outros comandos equivalentes ao ''for'' que produzem&lt;br /&gt;
ciclos.  Nestes comandos os ciclos são interrompidos quando uma condição&lt;br /&gt;
deixar de ser válida. São eles o ''do-while'' escrito como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
do{&lt;br /&gt;
  instrução1;&lt;br /&gt;
  ...&lt;br /&gt;
  instruçãoN;&lt;br /&gt;
  } while( condição );&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
e o ''while'' escrito como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
while( condição )&lt;br /&gt;
     {&lt;br /&gt;
     instrução1;&lt;br /&gt;
     ...&lt;br /&gt;
     instruçãoN;&lt;br /&gt;
     }&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A única diferença entre os dois esta no momento onde a condição&lt;br /&gt;
é testada. Por exemplo, o ''do-while'' realiza as suas instruções&lt;br /&gt;
pelo menos uma vez já que a condição é sempre testada ao final.&lt;br /&gt;
&lt;br /&gt;
Não existe nada novo nos comandos acima, eles podem ser&lt;br /&gt;
facilmente implementados com a combinação de comandos ''for'' e ''if''.&lt;br /&gt;
&lt;br /&gt;
'''Exercício''' - Tente escrever um ''do-while'' usando um ''for'' e ''if'', e um&lt;br /&gt;
''for'' usando um ''while''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
== Funcoes e Subrotinas ==&lt;br /&gt;
&lt;br /&gt;
Sao modulos independentes para fazer tarefas especificas definidas pelo programador&lt;br /&gt;
As funcoes permitem definir funcoes diferentes daquele conjunto de funcoes intrinsecas do &lt;br /&gt;
compilador. Elas podem ser de uma ou mais variavies, porem devolvem um unico valor.&lt;br /&gt;
&lt;br /&gt;
Quanto a subrotina ela e um procedimento mais geral que pode operar em um conjunto ou todas as&lt;br /&gt;
variaveis que estao no programa principal, e no retorno ao programa nao ha limitacao nas variaveis &lt;br /&gt;
que pode devolver. Vejamos a sintaxe de cada uma:&lt;br /&gt;
&lt;br /&gt;
=== Funcao ===&lt;br /&gt;
&lt;br /&gt;
A sintaxe e:&lt;br /&gt;
&lt;br /&gt;
 REAL FUNCTION NOME(VARIAVEL)&lt;br /&gt;
 ...&lt;br /&gt;
 NOME = opracoes com VARIAVEL&lt;br /&gt;
 END FUNCTION NOME&lt;br /&gt;
&lt;br /&gt;
Melhor ver um exemplo:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Real Function g(x)&lt;br /&gt;
Implicit None&lt;br /&gt;
Real x&lt;br /&gt;
&lt;br /&gt;
  g = x**2 * sin(x)&lt;br /&gt;
&lt;br /&gt;
End Funcion g&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este recurso permite definir funcoes nao analiticas como por exemplo&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 if (x &amp;lt;= 0) then&lt;br /&gt;
    g = 0.&lt;br /&gt;
 else&lt;br /&gt;
    g = 1.&lt;br /&gt;
 end if&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
=== Subrotina ===&lt;br /&gt;
&lt;br /&gt;
A sintaxe de subrotina e:&lt;br /&gt;
&lt;br /&gt;
 SUBROTINE EXEMPLO (Argumentos)&lt;br /&gt;
 ...&lt;br /&gt;
 END SUBRUTINE&lt;br /&gt;
&lt;br /&gt;
No meio todas as intrucoes FORTRAN sao validas, pois a subrotina e&lt;br /&gt;
um programa. A ideia e que se um cunjunto de operacoes se repete muito,&lt;br /&gt;
entao resulta conveniente colaca-las num moddulo e chama-lo cada vez que &lt;br /&gt;
for necessario, assim:&lt;br /&gt;
&lt;br /&gt;
 PROGRAM Principal&lt;br /&gt;
 ...&lt;br /&gt;
 CALL EXEMPLO(Argumentos)&lt;br /&gt;
 ...&lt;br /&gt;
 DO&lt;br /&gt;
 ...&lt;br /&gt;
     CALL EXEMPLO(Argumentos)&lt;br /&gt;
 ...&lt;br /&gt;
 END DO&lt;br /&gt;
 ...&lt;br /&gt;
 END PROGRAM Principal&lt;br /&gt;
&lt;br /&gt;
Exemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Program Main&lt;br /&gt;
implicit None&lt;br /&gt;
Real A(3,3)&lt;br /&gt;
&lt;br /&gt;
Read*, B&lt;br /&gt;
&lt;br /&gt;
Call Matriz(A,B)&lt;br /&gt;
&lt;br /&gt;
End Program Main&lt;br /&gt;
&lt;br /&gt;
Subrutien Matriz(A,B)&lt;br /&gt;
Real A(3,3)&lt;br /&gt;
&lt;br /&gt;
A = B&lt;br /&gt;
End subrutine Matriz&lt;br /&gt;
&amp;lt;/pre&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;/div&gt;</summary>
		<author><name>Tekkito</name></author>
	</entry>
</feed>