JavaRush /Blogue Java /Random-PT /Harvard CS50: Tarefas da Semana 1 (Aulas 3 e 4)
Masha
Nível 41

Harvard CS50: Tarefas da Semana 1 (Aulas 3 e 4)

Publicado no grupo Random-PT
Harvard CS50: Tarefas da Semana 1 (Aulas 3 e 4) - 1Amigos, vocês podem obter informações teóricas básicas nas notas do seminário . Lá, além do básico de C, ele explica como se conectar a um IDE CS50 de nuvem especial (isso deve ser feito para executar e verificar tarefas) e descreve os comandos básicos e estruturas de linguagem necessários do Linux. Se o material apresentado na palestra e as notas sobre C não forem suficientes para você, recorra a outras fontes. Por exemplo, aqueles listados no final deste artigo. No tópico " Materiais adicionais "
  • Metas da primeira semana
  • IDE CS50
  • Atualização da linha de comando e do ambiente de trabalho
  • Trabalhando no IDE
  • Olá, C!
  • Insetos?
  • Verificação de validação: teste check50
  • Noções básicas de C: comparação com Scratch
  • Tipos de dados básicos em C
  • Bibliotecas C
  • Olá C de novo: análise da sintaxe dos programas mais simples
  • Um pouco mais sobre E/S em C
Materiais neste tópico:
  • Entrada de dados validados: funções especiais da biblioteca cs50.h
  • Tarefa 1. Cálculo inteligente do consumo de água
  • Tarefa 2. Mario está conosco!
  • Tarefa 3. Hora de trocar
  • Como validar seu código e obter notas
  • Recurso de código
  • literatura adicional

Entrada de dados validados: funções especiais da biblioteca cs50.h

Para tornar este curso mais conveniente, desenvolvemos uma biblioteca especial CS50, que, em particular, possui funções muito úteis para o processamento de dados inseridos pelo usuário.
  • GetString()lê a string inserida pelo usuário;

  • GetInt()lê a string inserida pelo usuário e verifica se ela contém um número inteiro;

  • GetFloat()lê a string inserida pelo usuário e verifica se ela contém um número de ponto flutuante;

  • GetLongLong()lê a string inserida pelo usuário e verifica se ela contém um número real longo.

Tarefa 1. Cálculo inteligente do consumo de água

Harvard CS50: Tarefas da Semana 1 (Aulas 3 e 4) - 2É lógico: quanto mais tempo você toma banho, mais água é gasta nesse processo. Vamos descobrir quanto? Mesmo que o chuveiro esteja mal aberto, saem dele aproximadamente 6 litros de água por minuto. E são 12 garrafas de água que você carrega para beber. Normalmente uma pessoa toma banho por cerca de 10 minutos, no total, para se lavar, são necessárias 120 garrafas de meio litro. Bastante! Crie um arquivo water.cno seu ~/workspace/pset1. O programa deve contar quantas garrafas de água são utilizadas no banho dependendo do horário. Aquilo é:
  1. O programa pergunta ao usuário quantos minutos passou no banho
  2. O usuário insere um número inteiro positivo
  3. O programa exibe a quantidade de garrafas utilizadas pelo usuário.
username:~/workspace/pset1 $ ./water
minutes: 10
bottles: 120
Para simplificar, desta vez assumiremos que o usuário sempre digita corretamente o número de minutos, ou seja, não verificamos se o número digitado é positivo e inteiro. Mais tarde aprenderemos como preencher cheques, mas por enquanto isso é o suficiente. Para verificar se o programa está funcionando corretamente, check50,você precisa inserir a seguinte linha no terminal:
check50 2015.fall.pset1.water water.c
E se você quiser ver como waterfunciona o programa escrito pela equipe do curso, execute o seguinte comando:
~cs50/pset1/water

Tarefa 2. Mario está conosco!

Harvard CS50: Tarefas da Semana 1 (Aulas 3 e 4) - 3Você conhece o encanador mais famoso do mundo? Com a ajuda da Nintendo, o cara fictício de bigode e um pouco rechonchudo com boné vermelho se tornou um herói para várias gerações de jogadores. Se você não sabe de quem estamos falando, aqui está um link para o clássico jogo de 1985 : acredite, ainda é bom e vale a pena conferir! Você também pode encontrar uma versão do clássico Super Mario para smartphones ou emuladores offline. Precisamos de tudo isso para o desenvolvimento geral, isso, infelizmente, ainda não é uma tarefa ;). E a tarefa é esta. No final do primeiro nível do Mario, todos os jogadores viram esta meia pirâmide: Crie um arquivo mario.cno seu arquivo ~/workspace/pset1. Nosso programa desenhará uma meia pirâmide semelhante à que você vê, mas diretamente no console, sem gráficos: cada um dos blocos consistirá em um ícone de hash (#). Mesmo que você ainda não tenha descoberto como fazer, acredite: é fácil. Para tornar o problema mais interessante, vamos adicionar a ele a capacidade de definir a altura da meia pirâmide usando um número inteiro não negativo de 0 a 23. A altura da pirâmide na imagem é considerada no lugar mais alto, ou seja, igual a 8. Se o usuário inserir o número incorretamente, será necessário solicitar que ele faça novamente uma vez. Em seguida, gere (usando printf uma pirâmide). Tenha cuidado para alinhar o canto inferior esquerdo da sua meia pirâmide com a borda esquerda da janela do terminal, como no exemplo abaixo. O texto sublinhado é o que o próprio usuário insere.
username:~/workspace/pset1 $ ./mario

height: 8
       ##
      ###
     ####
    #####
   ######
  #######
 ########
#########
Observe que as duas colunas mais à direita têm a mesma altura. Ainda não vale a pena gerar canos, nuvens e o próprio Mario =). Pelo menos para esta tarefa. Caso o usuário tenha digitado dados incorretos (não digitou um número, ou digitou um número menor que um ou maior que 23), o programa deverá solicitar que ele insira os dados novamente, como no exemplo abaixo, onde o texto sublinhado é o que o usuário digitou no teclado. Para ler a string inserida, use GetInt. Pode ajudar a verificar entradas incorretas, mas não em todos os casos.
username:~/workspace/pset1 $ ./mario
Height: -2
Height: -1
Height: foo
Retry: bar
Retry: 1
##
Para compilar o programa, digite a linha no terminal:
make mario
ou uma versão mais transparente, porém mais longa:
clang -o mario mario.c -lcs50
Depois disso, execute o programa para execução:
./mario
Se você quiser verificar se o programa está funcionando corretamente, execute check50:
check50 2015.fall.pset1.mario mario.c
E se você quiser brincar com a versão do Mario dos assistentes do curso, digite a seguinte linha:
~cs50/pset1/mario

Tarefa 3. Hora de trocar

Harvard CS50: Tarefas da Semana 1 (Aulas 3 e 4) - 4Nas nossas latitudes não vimos isso, mas nos EUA, ao que parece, existe um brinquedo assim, mostrado na foto: os cilindros são projetados para moedas de diferentes diâmetros (e denominações), são liberados por um mecanismo de mola , e a própria unidade pode ser fixada no cinto de uma caixa infantil. Porém, o que acontece se alguém pagar ao caixa com uma conta grande? Imagine quanto trabalho será contar moedas para troco. Para minimizar o número de moedas emitidas, você pode usar os chamados algoritmos “gananciosos”. Eles, conforme definido pelo Instituto Nacional de Padrões e Tecnologia (NIST), sempre encontram a solução ótima em cada etapa da resolução de um problema, assumindo que a solução final (obtida da totalidade de tais etapas) também será ótima. O que isso significa? Vamos imaginar que um caixa deve a um cliente 41 centavos de troco e ele tem cilindros de moedas em seu cinto para troco nos valores de 25, 10, 5 e 1 centavo. Um caixa guiado por um algoritmo “ganancioso” desejará imediatamente dar o máximo logo no primeiro passo. Neste ponto, a solução ideal ou melhor seria distribuir 25 centavos. 41-25 = 16,16 centavos restantes para pagar. Obviamente, 25 centavos é demais, então sobra 10. 16-10 = 6. Agora distribuímos 5 centavos de acordo com o mesmo princípio e depois 1. Assim, o comprador receberá apenas quatro moedas nos valores de 25, 10 , 5 e 1 centavo. Acontece que as instruções passo a passo “gananciosos” para a emissão de dinheiro são ideais não só para este caso, mas também para as denominações das moedas dos EUA (e também da União Europeia). Ou seja, se o caixa tiver moedas suficientes de qualquer valor, o algoritmo funcionará melhor, ou seja, emitirá o número mínimo de moedas de todos os casos possíveis. Então, qual é o número mínimo de moedas que precisamos para dar o troco? Esta é a nossa terceira tarefa. Crie um arquivo greedy.cem seu diretório ~/workspace/pset1. Dado: moedas em denominações de 25, 10, 5, 1 cêntimo O programa deve:
  1. Pergunte ao usuário quanto troco ele deve distribuir
  2. Calcule o número mínimo de moedas com as quais você pode fazer isso
Observação:Usaremos uma função GetFloatda biblioteca CS50 para entrada e printfda biblioteca de E/S padrão para saída. Além disso, o programa deve verificar a exatidão da entrada. Pedimos que você usasse GetFloat, para permitir que o usuário insira um valor em dólares e centavos separados por um ponto. Por exemplo, se devemos US$ 9,75, o usuário deverá inserir 9,75, mas não US$ 9,75 ou 975. Você deve garantir que o usuário insira um número que faça sentido. GetFloatDigamos que não seja negativo; a função em si não ajudará nisso . Caso o usuário faça uma entrada incorreta, é necessário pedir que ele repita e execute o programa apenas com os dados corretos. Cuidado com as imprecisões inerentes aos números de ponto flutuante. Por exemplo, 0,01 não pode ser representado diretamente como float. Tente usar saída formatada, por exemplo com 50 casas decimais, usando o código abaixo:
float f = 0.01;
printf("%.50f\n", f);
Aliás, antes de contar qualquer coisa, seria lógico converter o valor total em centavos (e ao mesmo tempo convertê-lo de floatpara int), o que ajudará a evitar muitos erros e dificuldades. Para garantir que nosso analisador automático de código possa verificar corretamente o seu problema, certifique-se de que a última linha da saída do seu programa não contenha nenhuma outra informação além do número mínimo de moedas: um número inteiro com um \n depois (aqueles que aprendem JavaRush estamos bem cientes do que estamos falando aqui =)). Abaixo está um exemplo de como deve ser o resultado do seu programa.
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
0.41
4
Dada a natureza dos números de ponto flutuante, você pode ignorar o zero e inserir esse número no formato .41. Obviamente, os usuários que desejam verificar o programa quanto à possibilidade de inserir dados incorretos por completo devem ver algo como:
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
-0.41
How much change is owed?
-0.41
How much change is owed?
foo
Retry: 0.41
4
Com base nesses requisitos e no exemplo que você viu acima, seu código provavelmente deverá conter algum tipo de loop. Se, ao testar a aplicação, você perceber que o loop não para, você pode interromper a execução do programa com a combinação ctrl-c (às vezes várias vezes). Você já sabe como compilar e executar um programa. Se quiser verificar se o seu programa está funcionando corretamente, através do utilitário check50, digite a seguinte linha no terminal:
check50 2015.fall.pset1.greedy greedy.c
E se quiser brincar com este programa feito pelos assistentes do curso, escreva o seguinte comando:
~cs50/pset1/greedy

Como validar seu código e obter notas

  1. Opção 1

    Se for importante para você verificar a correção do código, e não obter nota final, você pode verificar e corrigir usando o comando.

    check50 2015.fall.pset1.name name.c

    inserido na linha de terminal do CS50 IDE? onde nameestá o nome do seu arquivo de tarefa.

  2. opção 2

    Se você deseja obter notas (essencialmente o mesmo que executar o check50, mas lembrando do resultado e preenchendo alguns formulários em inglês), siga estas etapas:

    • Etapa 1 de 2

      1. Quando os aplicativos estiverem prontos, faça login no IDE CS50.
      2. No canto superior esquerdo do IDE CS50, dentro do navegador de arquivos, não na janela do terminal, clique com o botão esquerdo ou com o botão direito no arquivo hello.c (aquele localizado no diretório pset1) e clique em Baixar. Você deve descobrir que o navegador carregou hello.c.
      3. Repita para água.c.
      4. Repita para mario.c.
      5. Repita para ganancioso.c.
      6. Em uma guia ou janela separada, faça login no CS50 Submit .
      7. Clique em Enviar no canto inferior esquerdo da janela.
      8. Em Conjunto de problemas 1 na janela que aparece, clique em Carregar novo envio.
      9. Na janela que aparece, clique em Adicionar arquivos…. Uma janela chamada Abrir Arquivos deve aparecer.
      10. Navegue até o local onde o hello.c foi baixado. Geralmente está localizado na pasta Downloads ou na pasta atribuída a você por padrão para downloads. Depois de encontrar hello.c, clique nele uma vez para marcá-lo e clique em Abrir.
      11. Clique em Adicionar arquivos... novamente e a janela Abrir Arquivos aparecerá novamente.
      12. Agora encontre o arquivo water.c da mesma maneira. Clique nele e, em seguida, clique em Abrir (ou “Abrir”).
      13. Agora encontre mario.c. E também clique e abra da mesma forma.
      14. Tudo é igual com o arquivo ganancioso.c.
      15. Clique em Iniciar upload para começar a enviar seus arquivos para os servidores CS50.
      16. Na tela que aparece, você verá uma janela chamada Nenhum arquivo selecionado. Se você mover o cursor do mouse para o lado esquerdo da tela, verá uma lista de arquivos que baixou. Clique em cada um para confirmar o conteúdo de cada um. (Não há necessidade de clicar em outros botões ou ícones). Se você tem certeza de que está pronto para enviar o arquivo para verificação, considere que está pronto! Se você quiser verificar seu código novamente ou corrigir alguma coisa, volte para CS50 Submit e repita essas etapas. Você pode reenviar quantas vezes quiser; Somente a submissão mais recente será avaliada.
  3. Passo 2 de 2 (não é necessário para avaliação, se for =))

    Agora vá para https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x onde você encontrará formulários especiais. Neles você precisa responder a várias questões teóricas e, a seguir, clicar em Enviar abaixo delas.

Perguntas com asteriscos são obrigatórias:
  • Tudo bem, deveria ter previsto isso chegando! Em apenas algumas frases, o que é uma biblioteca? * (Descreva resumidamente o que é uma biblioteca)
  • Em apenas algumas frases, que papel desempenha #include <cs50.h> quando você escreve sobre algum programa? *(qual é a função da linha #include <cs50.h> que aparece no topo de alguns programas?)
  • Aproximadamente quantas horas você diria que gastou no Conjunto de Problemas 0: Scratch?
  • Aproximadamente quantas horas você diria que gastou no Conjunto de Problemas 1: C?
  • Qual a sua opinião sobre o CS50x até agora? *(Sua opinião sobre o CS50 no momento, escolha a opção gostei ou não gostei)
  • Você pediu ajuda a colegas ou funcionários por meio do Grupo CS50 no Facebook em http://www.facebook.com/groups/cs50? *(você pediu ajuda a outros alunos ou assistentes no grupo do Facebook)
  • Você pediu ajuda de colegas ou funcionários por meio do Subreddit CS50 em http://www.reddit.com/r/cs50 *(você pediu ajuda de outros alunos ou assistentes por meio do Subreddit)
  • Você pediu ajuda a colegas ou funcionários via Twitter usando @cs50 ou #cs50? *(você pediu ajuda a outros alunos ou TAs no Twitter usando @cs50 ou #cs50).
Amigos, se vocês tiverem alguma dúvida, escrevam nos comentários deste guia. Se você não atingiu o nível 5 do JavaRush para receber um convite para informações, recomendamos que o faça. É grátis, interessante e não muito difícil.

Recurso de código:

  1. Aula três

    http://cdn.cs50.net/2015/fall/lectures/1/w/src1w.zip

  2. Aula quatro

    http://cdn.cs50.net/2015/fall/lectures/1/f/src1f.zip

    http://cdn.cs50.net/2015/fall/lectures/1/f/src1f/

literatura adicional

http://cpp.com.ru/kr_cbook - Versão russa do livro clássico sobre C dos autores da linguagem - Brian Kernighan e Dennis Ritchie. Amplamente conhecido em círculos estreitos como K&R. A tradução, porém, não é da edição mais recente. Leia os três primeiros capítulos. Haverá um pouco mais de material do que você precisa, mas o suficiente para resolver problemas. https://computer.howstuffworks.com/c.htm é um recurso recomendado pelos autores do CS50. Em inglês. Página 1-7, 9 e 10.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION