Browse Source

Até o tópico 3-1 da apostila intro_prog

bernardo 6 years ago
commit
122f730b5a
4 changed files with 452 additions and 0 deletions
  1. 68 0
      comandos_C.html
  2. 75 0
      comandos_Python.html
  3. 48 0
      index.html
  4. 261 0
      perguntas_Basicas.html

+ 68 - 0
comandos_C.html

@@ -0,0 +1,68 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="UTF-8"/>
+  <title>Comandos Python</title>
+</head>
+<body>
+  <h1>2 - Comandos básicos do C</h1>
+  <p>
+    Nesta seção apresentaremos, brevemente, os comandos e regras (sintáticas e semânticas) da lingaguem C que poderá ser usada por você nas atividades
+    desenvolvidas durante o curso. Note que no C é exigido colocar ; ao final de cada linha.
+  <br />
+    Um conceito muito importante à programação é o de <b>variável</b>. Uma variável é um nome(identificador) que está associado à uma posição única na
+    memória do computador. Ela serve para armazenar um valor a ser utilizado pelo algoritmo.
+  <br />
+    Podemos considerar que uma variável é como uma gaveta, cada uma tem sua localização no armário e seu conteúdo. Sempre que fizermos uma atribuição
+    a esta variável, o valor atribuido será armazenado na gaveta correspondente.
+  </p>
+  <ul>
+    <li><b>Declaração de variáveis:</b> As variáveis podem assumir diferentes tipos, sendo os mais usuais <b>int</b>(inteiro), <b>float</b>(real) e <b>char</b>(caracter).</li>
+    Os nomes das variáveis devem seguir um padrão, devem começar por letras, seguidos por uma combinação entre letras, números ou _. exemplos de nomes
+    válidos: a, abc1, ab_c_3, minha_variavel, a1_b2_c3_d4.<br />
+    <pre>
+      int X, Y; //declara as variáveis X e Y que armazenam apenas inteiros.
+      float I,J; //declara as variáveis I e J que armazenam números reais.
+      char A,B; //declara as variáveis A e B que armazenam caracteres
+    </pre>
+
+  <li><b>Atribuição:</b> Permite atribuirmos valores (fixo ou resultado de uma expressão aritmética) às variáveis já declaradas.</li>
+    <pre>
+      X = EXPR; //A variável X recebe o resultante do cálculo da expressão aritmética EXPR
+      X = 3+5; //Atribuirá o valor 8 à variável X
+      X = X+1; //X recebe o valor armazenado em X mais 1
+    </pre>
+  <li><b>Seleção:</b> Comando que desvia o fluxo caso uma condição seja verdadeira.O comando de seleção é o <b>if</b> e é escrito na forma</li>
+    <pre>
+      if (EXPL){ //o comando recebe uma expressão do tipo lógico(EXPL) e caso verdadeira executa o bloco de comando envolto por chaves
+        //bloco de comandos executado caso a EXPL seja verdadeira
+      }
+    </pre>
+
+  <li><b>Repetição:</b> Comandos utilizados para repetir blocos de comandos evitando a escrita de várias linhas iguais no código.</li>
+  <p>
+    Um dos comandos de repetição é o <b>while</b> ele tem a seguinte forma:
+  </p>
+  <pre>while(EXPL){//enquanto a expressão lógica for verdadeira o bloco de comandos é executado.
+    //bloco de comandos a serem repetidos
+    //quando EXPL resultar falso o bloco de comandos será ignorado
+  }</pre>
+
+  <li>
+    <b>Entrada e Saída:</b> Estes são comandos essenciais para que o usuário (pessoa que está utilizando o algoritmo/programa) possa interagir com o algoritmo.<br />
+    Lembre-se que as variáveis que irão receber o valor já devem ter sido declaradas
+    <pre>
+      scanf("%d", &a);// Lê um inteiro e salva na posição de memória da variável <b>a</b>.
+      scanf("%f", &b);// Lê um real(float) e salva na posição de memória da variável <b>b</b>
+      scanf("%c", &c);//Lê um caracter(char) e salva na posição de memória da variável <b>c</b> <br />
+
+      printf("Mensagem que será impressa na tela", argumentos);// os argumentos devem ser separados por virgula
+      printf("Nota do aluno: %f", nota); //o argumento <b>nota</b> corresponde ao  <b>%f</b>
+      printf("soma de %d e %d eh %d", a, b, soma); //os argumentos correspondem aos %d na ordem em que são incluidos
+
+    </pre>
+  </li>
+  </ul>
+</body>
+</html>

+ 75 - 0
comandos_Python.html

@@ -0,0 +1,75 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="UTF-8"/>
+  <title>Comandos Python</title>
+</head>
+<body>
+  <h1>2 - Comandos básicos do Python</h1>
+  <p>
+    Nesta seção apresentaremos, brevemente, os comandos e regras (sintáticas e semânticas) da lingaguem Python que poderá ser usada por você nas atividades
+    desenvolvidas durante o curso. Note que no python não é exigido colocar ; ao final de cada linha.
+  <br />
+    Um conceito muito importante à programação é o de <b>variável</b>. Uma variável é um nome(identificador) que está associado à uma posição única na
+    memória do computador. Ela serve para armazenar um valor a ser utilizado pelo algoritmo.
+  <br />
+    Podemos considerar que uma variável é como uma gaveta, cada uma tem sua localização no armário e seu conteúdo. Sempre que fizermos uma atribuição
+    a esta variável, o valor atribuido será armazenado na gaveta correspondente.
+  </p>
+  <ul>
+    <li><b>Declaração de variáveis:</b> A declaração de variáveis é apenas uma atribuição e define o tipo implicitamente a partir do resultado da expressão,
+       Os tipos usuais que podem ser definidos na variável são <b>int</b>(inteiro), <b>float</b>(real), <b>bool</b>(booleano/lógico) e <b>string</b>(cadeia de caracteres).</li>
+    Os nomes das variáveis devem seguir um padrão, devem começar por letras, seguidos por uma combinação entre letras, números ou _. exemplos de nomes
+    válidos: a, abc1, ab_c_3, minha_variavel, a1_b2_c3_d4.
+    <br />
+    <pre>
+      X = 5 //cria a variável X com tipo int com valor 5
+      Y = 1.0 //cria a variável Y com tipo float com valor 1.0
+      S = "MAC2166" //cria a variável S do tipo String com valor MAC2166
+      Z = true //cria a variável Z do tipo bool com o valor true
+    </pre><br /><br />
+
+  <li><b>Atribuição:</b> Permite atribuirmos valores (fixo ou resultado de uma expressão aritmética) a variável, caso ela ainda não exista será
+    declarada com o tipo correspondente ao resultado da expressão(EXPR).</li>
+    <pre>
+      X = EXPR; //A variável X recebe o resultante do cálculo da expressão EXPR
+      X = 3+5; //Atribuirá o valor 8 à variável X
+      X = X+1; //X recebe o valor armazenado em X mais 1
+    </pre>
+  <li><b>Seleção:</b> Comando que desvia o fluxo caso uma condição seja verdadeira.O comando de seleção é o <b>if</b> e é escrito na forma</li>
+    <pre>
+      if EXPL : //o comando recebe uma expressão do tipo lógico(EXPL) e caso verdadeira executa o bloco de comando identado abaixo dele.
+          //bloco de comandos executado caso a EXPL seja verdadeira
+    </pre>
+
+  <li><b>Repetição:</b> Comandos utilizados para repetir blocos de comandos evitando a escrita de várias linhas iguais no código.</li>
+  <p>
+    Um dos comandos de repetição é o <b>while</b> ele tem a seguinte forma:
+  </p>
+  <pre>
+    while EXPL : //enquanto a expressão lógica for verdadeira o bloco de comandos é executado.
+      //bloco de comandos a serem repetidos
+      //quando EXPL resultar falso o bloco de comandos será ignorado
+  </pre>
+
+  <li>
+    <b>Entrada e Saída:</b> Estes são comandos essenciais para que o usuário (pessoa que está utilizando o algoritmo/programa) possa interagir com o algoritmo.<br />
+    Lembre-se que as variáveis que irão receber o valor já devem ter sido declaradas
+    <pre>
+      print(argumento) // imprime o argumento na tela
+      print(X) //imprime o valor de X
+      print("o valor é"+X) //caso X tenha valor 5, imprime <b>o valor é 5</b>
+
+      No <b>Python 2</b> temos dois tipos de entrada de dados, input() e raw_input()
+      A = input() // Recebe int, float ou bool digitado pelo usuário
+      A = raw_input() //Recebe String digitada pelo usuário
+
+      No <b>Python 3</b> não existe mais raw_input, portanto input() é para qualquer tipo de entrada
+      A = input() //Recebe qualquer tipo de entrada digitada pelo usuário
+
+
+    </pre>
+  </li>
+  </ul>
+</body>
+</html>

+ 48 - 0
index.html

@@ -0,0 +1,48 @@
+<!DOCTYPE HTML>
+<html>
+  <head>
+    <meta charset="UTF-8"/>
+    <title>Introdução a resolução de problemas via algoritmos</title>
+  </head>
+  <body>
+    <h1>1 - Introdução</h1>
+    <p>
+      O objetivo desta apostila é introduzir o conceito de algoritmos(seção 2) e principalmente, apresentar algumas obre
+       como escrever um algoritmo a partir de um problema dado.  Para isto iremos introduzir comandos nas linguagens
+       C e Python. Iremos deduzir algoritmos a partir de alguns problemas/exemplos.
+    </p>
+    <p>
+      Esta dedução será construtiva: começaremos anaisando casos particulares e só então generalizaremos na forma de um algoritmo. E como uma técnica
+      auxiliar, propomos ao programador iniciante que tente consturir seus algoritmos a partir de quatro questões básicas descritas na seção 3.
+    </p>
+
+    <h2>1.1 - O que é um algoritmo</h2>
+    <p>
+      Um algoritmo é uma sequência de passos elementares, executados um após o outro seguindo o fluxo de execução (de cima para baixo)
+      Em geral, um <b>algoritmo</b> deve ser <b>aplicado</b> sobre um conjunto de <b>valores</b> para produzir um conjunto de <b>valores</b> como resposta.
+      Uma característica que um algoritmo deve apresentar é ser determinístico: sempre que este for aplicado sobre o mesmo conjunto de entradas
+      deverá produzir sempre a mesma saida
+    </p>
+    <p>
+      Nos exemplos utilizaremos quatro classes de comandos:
+    </p>
+    <ul>
+      <li>Variável: É utilizada para armazenar valores e resultados aritméticos;</li>
+      <li>Atribuição: Comando que permite modificar o valor de uma variável;</li>
+      <li>Seleção: Comando que permite desviar o fluxo de execução do seu algoritmo;</li>
+      <li>Laço de repetição: Comandos que permitem repetir um conjunto de comandos.</li>
+    </ul>
+
+  <!--  <h2>1.2 - Um primeiro exemplo de algoritmo</h2>
+    <p>
+      Vamos iniciar a discussão de algoritmos com um um exemplo que todos já conhecem: o problema da soma de dois números (com 2 ou mais dígitos)
+    </p>
+    <p>
+      Dados dois números inteiros, representados pelas variáveis x e y, como você descreveria um algoritmo (os passos) para alguém que não sabe somar
+      obter o resultado correto?
+    </p>
+    <p>
+      Sugestão: Pense como você explicaria o processo de soma para uma criança utilizando o "vai um".
+    </p>-->
+  </body>
+</html>

+ 261 - 0
perguntas_Basicas.html

@@ -0,0 +1,261 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="UTF-8"/>
+  <title>Exemplos</title>
+</head>
+<body>
+    <h1>3 - Perguntas básicas para implementar um algoritmo</h1>
+    <p>
+      No restante desta apostila procuraremos mostrar como desenvolver programas utilizando as linguagens C e Python. Os problemas que abordaremos são, em sua
+       maioria, bastante simples, no sentido de ser possível resolvê-los manualmente (sem o auxílio de programas de computador). A dificuldade consiste em obter
+       soluções computacinais para tais problemas, ou seja, em escrever um processo que resolva tais problemas servindo-se de uma linguagem extremamente rígida e
+       um pouco limitada.<br />
+
+       Um <b>programa</b> pode ser entendido como uma sequência finita de comandos que manipulam um numero limitado de  variaveis  e  que  deve  devolver
+       algum  conjunto-resposta. Em geral, os problemas que admitem solucoes via computador apresentam caracterısticas de repeticao, isto  ́e, permitem que
+       uma mesma sequência de passos seja repetida (um numero finito de vezes) ate que se obtenha o resultado desejado.<br />
+
+       Sugerimos ao leitor, principalmente aos iniciantes em programação, que se concentre em quatro questões chaves à resolução de problemas via algoritmos,
+       independentemente da linguagem a ser utilizada, seja ela qual for.<br />
+
+       <ul>
+         <li><b>1ª Pergunta:</b> Quais variáveis são necessárias?</li>
+         <li><b>2ª Pergunta:</b> Quais comandos devem apareceer dentro de um bloco de repetição?</li>
+         <li><b>3ª Pergunta:</b> Qual a condição para que continue a repetição?</li>
+         <li><b>4ª Pergunta:</b> Quais os comandos neceessários antes e depois do bloco de repetição?</li>
+       </ul>
+       <br />
+
+       Nem sempre é possível responder completamente estas perguntas nesta sequência. Muitas vezes, ao longo da descrição do programa surge a necessidades de novas
+       variáveis, que devem ser acrescentadas à lista inicialmente pensada como resposta à 1ª pergunta.  Por outro lado, com o passar do tempo (e aquisiçao de
+       experiência na programação), será natural que ao tentar responder a 2ª pergunta ja se note a necessidade de alguns comandos que  devem  aparecer  antes  do
+       bloco  de  repetição (4ª pergunta). Alem  disto, somente “problemas pequenos” possuem um  ́unico bloco de repetição, sendo que as perguntas 2 a 4 devem ser
+       levadas em conta para cada novo bloco de repetição. No entanto, a experiência tem-nos mostrado que, pelo menos enquanto se esta comecando a  aprender  a
+      descrever  processos  em  liguagens  estruturadas,  estas  perguntas  servem  como  um  bom  roteiro  ao programador iniciante.<br />
+
+      Veremos, a seguir, o desenvolvimento de programas para alguns problemas.
+    </p>
+    <h2>3.1 - Como somar um número arbitrário de valores</h2>
+    <p>
+      <b>Problema: </b> Faça um programa que leia uma sequência de números inteiros, diferentes de zero, e calcule a sua soma.<br />
+      <br />
+      Se a sequência de entrada tivesse um tamanho fixo conhecido, digamos 4, a descrição do processo não seria complicada, bastando escrever:
+      <center>
+      <table border='1'>
+       <tr>
+         <th> C </th>
+         <th>Python</th></tr>
+       <tr>
+         <td>
+           <pre>
+#include < stdio.h> //inclui a biblioteca que lida com scanf e printf
+int main(){ //inicia a função principal
+  int n1, n2, n3, n4, soma; //cria as 5 variáveis que serão utilizadas
+  scanf("%d %d %d %d", &n1, &n2, &n3, &n4); //lê 4 inteiros
+  soma = n1+n2+n3+n4; //soma os 4 inteiros lidos
+  printf("%d", soma); //imprime o resultado da soma
+  return 0; //finaliza a função principal
+}
+           </pre>
+         </td>
+         <td>
+           <pre>
+n1 = input() //lê o primeiro inteiro
+n2 = input() //lê o segundo inteiro
+n3 = input() //lê o terceiro inteiro
+n4 = input() //lê o quarto inteiro
+soma = n1+n2+n3+n4 //soma os 4 inteiros
+print(soma) //imprime o resultado da soma
+           </pre>
+         </td>
+       </tr>
+    </table>
+  </center>
+  <br />
+     No entanto a solução muda radicalmente se desejamos escrever um algoritmo que funcione para um número arbitrário de valores de entrada (este número é
+     definido pelo usuário durante a execução do algoritmo). Neste caso, a dificuldade reside no fato de o programa ser capaz de somar uma sequência de qualquer
+     tamanho.<br /><br />
+     Antes de continuar, reflita um pouco sobre esta questão e tente escrever um código que permita a soma de uma sequência de qualquer tamanho.<br /><br />
+     Duas possíveis soluções são:
+     <ul>
+       <li>Ao início da execução do algoritmo o usuário digitar qual o tamanho da sequência</li>
+       <li>Utilizarmos um caracter de escape que indicará o final da sequência</li>
+     </ul>
+    <br />
+    Abaixo iremos apresentar a segunda solução, utilizar um caracter de escape.<br />
+    Uma boa técnica para iniciar o processo de rogramação é admitir algumas sequências de dados de entrada e pensar a partir destes dados. Então examinaremos,
+    por exemplo, a soma da seguinte sequência de entrada: 8  11  3  -7  2 ... 0
+    <ol>
+      <li>Leia o primeiro número 8;</li>
+      <li>Como o número lido !=(diferente) 0, leia o próximo número 3, guardando a soma destes dois 19+3 = 22;</li>
+      <li>Como o último número lido != 0, leia o próximo número 3, guardando com a soma anterior 19+3=22;</li>
+      <li>Como o último número lido != 0, leia o próximo número -7, guardando com a soma anterior 22+(-7)=15;</li>
+    <center>
+      <pre>
+        .
+        .
+        .
+      </pre>
+    </center>
+    <li>Lê o 0, e como o número lido foi 0 imprime a soma final</li>
+    </ol>
+
+    <h3>Quais variáveis são necessárias?</h3>
+    Vemos a necessidades de 2 variáveis: uma para guardar o último número lido e outra para guardar a soma dos número já lidos. Então teremos:
+    <center>
+    <table border='1'>
+     <tr>
+       <th> C </th>
+       <th>Python</th></tr>
+     <tr>
+       <td>
+         <pre>int num, soma;</pre>
+       </td>
+       <td>
+         <pre>
+num = 0
+soma = 0</pre>
+       </td>
+     </tr>
+  </table>
+</center>
+
+<h3>Quais os comandos necessários antes e depois do bloco de repetição?</h3>
+<p>
+  Inicialmente, no código em C o valor das variáveis(quaisquer) está indefinido, já no código em Python está definido em 0 e portanto devemos cuidar das
+  "inicializações" antes do primeiro teste <b>while (num !=0)</b>. Quanto deve valer a variável num neste momento inicial?<br />
+  Uma solução possível é o tratamento do primeiro número da sequência como caso à parte, antes de entrarmos no comando de repetição. Deste modo, devemos ler
+  o primeiro número fora da repetição e já contabilizar na soma.<br />
+  <br />
+  <b>Exercício 1</b> Tente elaborar outra solução, que não faça uma primeira leitura de num dentro do laço<br />
+  <br />
+  Após a repetição devemos imprimir o conteúdo da variável <b>soma</b>, que deverá conter a soma dos elementos da sequência de entrada.<br />
+  Escrevendo o código temos:<br />
+  <center>
+  <table border='1'>
+   <tr>
+     <th> C </th>
+     <th>Python</th></tr>
+   <tr>
+     <td>
+       <pre>
+1  int num, soma;
+2  scanf("%d", &num);
+3  soma = num;
+4  while (num != 0){
+5    scanf(%d, &num);
+6    soma = soma + num;
+7  }
+8  printf("%d",soma);
+       </pre>
+     </td>
+     <td>
+       <pre>
+1  num = input();
+2  soma = num;
+3  while num != 0
+4    num = input()
+5    soma = soma + num
+6  print(soma)
+       </pre>
+     </td>
+   </tr>
+  </table>
+  </center>
+<h3>Conceito de simulação de um Algoritmo</h3>
+Um conceito muito importante à programação é o processo de <b>simulação</b> de um algoritmo. Útil na verificação da corretude do mesmo e também para entender
+o seu funcionamento. Na simulação de um algoritmo/programa devemos anotar todas as alterações, de todas suas variáveis, ao longo de seu fluxo de execução para algum
+conjunto de entrada<br />
+Melhor que muitas explicações complicadas é um bom exemplo. Vejamos a simulação do programa acima para o conjunto de entradas 10 3 4 0 no algoritmo em C:
+<center>
+  <table border='1'>
+    <tr>
+      <th>num</th>
+      <th>soma</th>
+      <th>comando em execução</th>
+      <th>observações</th>
+    </tr>
+    <tr>
+      <td>?</td>
+      <td>?</td>
+      <td>  </td>
+      <td>no início do programa valores das variáveis são desconhecidos, elas apenas foram declaradas</td>
+    </tr>
+    <tr>
+      <td>10</td>
+      <td>?</td>
+      <td>scanf("%d", &num)</td>
+      <td>pega o 1º número de entrada e guarda em num</td>
+    </tr>
+    <tr>
+      <td>10</td>
+      <td>10</td>
+      <td>soma = num</td>
+      <td>Atribui o valor de num a soma</td>
+    </tr>
+    <tr>
+      <td>10</td>
+      <td>10</td>
+      <td> while (num != 0) </td>
+      <td>Como num é diferente de 0, executa os comandos dentro do bloco de repetição (linhas 5 e 6)</td>
+    </tr>
+    <tr>
+      <td>3</td>
+      <td>10</td>
+      <td> scanf("%d", num) </td>
+      <td>Recebe o 2º número de entrada e guarda em num</td>
+    </tr>
+    <tr>
+      <td>3</td>
+      <td>13</td>
+      <td> soma = soma + num </td>
+      <td>atribui a soma o valor da expressão soma + num</td>
+    </tr>
+    <tr>
+      <td>3</td>
+      <td>13</td>
+      <td> while(num!=0) </td>
+      <td>Como num é diferente de 0, o programa continuará a repetição</td>
+    </tr>
+    <tr>
+      <td>4</td>
+      <td>13</td>
+      <td> scanf("%d", num) </td>
+      <td></td>
+    </tr>
+    <tr>
+      <td>4</td>
+      <td>17</td>
+      <td>soma = soma+ num</td>
+      <td></td>
+    </tr>
+    <tr>
+      <td>4</td>
+      <td>17</td>
+      <td>while(num!=0)</td>
+      <td></td>
+    </tr>
+    <tr>
+      <td>0</td>
+      <td>17</td>
+      <td> soma = soma + num </td>
+      <td></td>
+    </tr>
+    <tr>
+      <td>0</td>
+      <td>17</td>
+      <td> while(num!=0) </td>
+      <td>Como soma é igual a 0, o programa pula para a linha 8</td>
+    </tr>
+    <tr>
+      <td>0</td>
+      <td>17</td>
+      <td>printf("%d", soma)</td>
+      <td>Imprime o valor de soma: 17</td>
+    </tr>
+  </table>
+</center>
+</p>
+</body>
+</html>