JavaRush /Blogue Java /Random-PT /Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6)
Masha
Nível 41

Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6)

Publicado no grupo Random-PT
tarefas cs50 para as aulas 5 e 6 As palestras CS50 estão aqui: https://cdn.javarush.com/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngcs50.html . Este material contém 3 tarefas, informações teóricas sobre elas e um guia de ação.

Metas

• Aprofunde-se em funções e bibliotecas • Familiarize-se com criptografia, implemente algumas cifras simples

Materiais adicionais

https://reference.cs50.net/ - explicação das funções da biblioteca utilizadas durante o treinamento. Em inglês. http://computer.howstuffworks.com/c.htm páginas 11 – 14 e 39

Preparação

Faça login em cs50.io update50 para garantir que a versão do seu espaço de trabalho esteja atualizada. Se você fechar acidentalmente a janela do terminal, vá para o menu Exibir e certifique-se de que haja uma marca de seleção ao lado do item Console (marque se não estiver). Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 1 Clique em (+), dentro do círculo verde na moldura da janela do terminal, selecione Novo Terminal . Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 2 Crie um diretório de trabalho: mkdir ~/workspace/pset2 Observe que há um espaço entre mkdir e ~/workspace/pset2 . Para recapitular, ~ significa o diretório raiz, ~/workspace é uma pasta chamada workspace dentro do diretório raiz, ~/workspace/pset2 é um diretório chamado pset2 dentro de ~/workspace . Agora execute: cd ~/workspace/pset2 para mudar para o novo diretório. A linha de comando é mais ou menos assim: username:~/workspace/pset2 $ Se algo estiver errado, repita as etapas. Você também pode chamar um comando history para visualizar os últimos comandos em ordem cronológica. Você também pode colocar o cursor na linha de comando e pressionar a seta para cima no teclado para visualizar todos os comandos em ordem, do último ao primeiro digitado. Usando o botão para baixo você pode voltar. A propósito, em vez de digitar os mesmos comandos todas as vezes, você pode percorrer os comandos já digitados e executá-los novamente pressionando Enter. Você deve ter notado que David faz exatamente isso em suas palestras. As tarefas da segunda semana deverão ser salvas em pset2 .

Tarefa 0. Inicialização

Vamos dar uma olhada nas linhas. No arquivo iniciais.c , escreva um programa que solicite o nome do usuário (usando a função GetString obtemos o nome como uma string) e a seguir exiba as primeiras letras do nome (ou nomes) e sobrenome em letras maiúsculas sem espaços, pontos ou outros caracteres, apenas com avanço de linha ( \n ). Presumimos que os usuários insiram apenas letras (minúsculas ou maiúsculas, ou ambas) mais um espaço entre as palavras. Considere que caras chamados Joseph Gordon-Levitt, Conan O'Brien ou David J. Malan não usarão o programa. Para verificar o correto funcionamento do programa, ligue check50: Quer brincar com a implementação do programa elaborado pela equipe do CS50? Digite a linha: username:~/workspace/pset2 $ ./initials Zamyla Chan ZC username:~/workspace/pset2 $ ./initials robert thomas bowden RTBcheck50 2015.fall.pset2.initials initials.c~cs50/pset2/initials
Criptografia
Criptografia, a ciência de criptografar e decifrar informações... Na verdade, as mensagens criptografadas existem desde os tempos antigos e eram usadas pelos exércitos para transmitir mensagens secretas. Bem, agora suas senhas no Facebook e em outras redes são armazenadas de forma criptografada.

Tarefa 1. Salve, César!

Informação teórica
Estudaremos uma das cifras mais simples - a cifra de César, em homenagem ao imperador romano. Nessa cifra, cada letra do texto é substituída por outra, que é um número fixo de letras inferiores no alfabeto. Esse número fixo de letras é chamado de chave . Assim, a chave 1 transforma a letra latina C na letra D e Z através do ciclo em A. Se a chave for 3, a letra C se transformará em F e Z em C. Exemplos: usamos a cifra de César com tecla 5 na palavra gato. c -> h a -> f t -> y Caesar (cat, 5) = hfy Chave = 7, palavra = computador c->j o->v m->t p->w u->b t->a e->l r->y Caesar(computer,7) = jvtwbaly Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 3 A cifra de César é simples, mas, infelizmente, não confiável (são coisas interligadas!): para o alfabeto inglês existem apenas 25 opções de criptografia, é fácil passar por todas as opções mesmo sem um computador. No entanto, a cifra de César é frequentemente usada como um passo em outras cifras, como a cifra de Vigenère (mais sobre isso no próximo parágrafo). Vamos “matematizar” a cifra de César. Vamos denotar o texto simples pela letra p, pi é a letra do texto p que está na posição número i. Vamos chamar a chave secreta de letra k, c de texto cifrado e ci de letra do texto cifrado que está na posição i. Depois você pode calcular cada letra da cifra usando a fórmula: ci = (pi + k) % 26 Acostume-se com essa formalização, ela permite programar o algoritmo e expressa o significado da cifra de forma precisa e concisa. Se a chave k = 13 e o texto original p for "Certifique-se de beber seu Ovomaltine!", esta é a cifra que obtemos: Or fher gb qevax lbhe Binygvar! Observe que O (a primeira letra do texto cifrado) é deslocada 13 posições da letra B (a primeira letra do texto original). O mesmo acontece com a letra r (a segunda letra na criptografia) é deslocada 13 letras de e (a segunda letra no original). A terceira letra da criptografia, f, é deslocada em 13 letras de s (a terceira no original), aqui vamos em um círculo de z a a. Uma cifra de César com chave 13 tem o nome especial ROT13 . É simétrico: aplicando-o duas vezes voltamos ao texto original. Claro, também existe o ROT26, este geralmente é superseguro, mas só se você não expressar seus pensamentos com clareza =).
Doença
Escreva no arquivo caesar.c um programa que criptografa texto usando a cifra de César. Forneça um argumento de linha de comando como entrada para o programa: um número inteiro não negativo. Para simplificar, vamos chamá-lo de k. Se o usuário executar o programa sem argumentos de linha de comando ou com mais de um argumento, o aplicativo deverá reclamar e retornar o valor 1 (é assim que os erros geralmente são indicados): return 1; Em todos os outros casos, o programa solicita ao usuário o texto para criptografar e, em seguida, exibe o texto criptografado com a chave k (ou seja, deslocado k posições para a direita ao longo do ciclo). Se o texto contiver caracteres fora do alfabeto inglês, o programa não os alterará. Depois de imprimir o texto cifrado, o aplicativo sai, main retorna 0: return 0; Se main não retornar zero explicitamente, ele o retorna automaticamente (int é na verdade o tipo de retorno de main, mas falaremos mais sobre isso em outra ocasião). De acordo com a convenção (as regras de boa forma em programação), se você retornar explicitamente 1 para indicar um erro, também deverá retornar 0 como um ponteiro para a conclusão bem-sucedida do programa. Embora existam apenas 26 letras no alfabeto inglês, k pode ser maior que 26. Essencialmente, a chave k = 27 dará o mesmo resultado que k = 1, mas você precisa permitir que o usuário insira qualquer número não negativo, não excedendo 2^31 – 26 (deve caber em int). O programa também deve levar em consideração que as letras minúsculas são criptografadas em minúsculas e as letras maiúsculas são criptografadas em maiúsculas. Por onde começamos? Como a aplicação deve aceitar o valor de k diretamente na string do argumento, o cabeçalho da nossa função principal se parece com isto: int main(int argc, string argv[]) No Capítulo 6, você sabe que argv é um array de strings. O conjunto pode ser visto como uma fileira de armários em uma academia. Cada um deles tem algum significado oculto. No nosso caso, dentro de cada célula existe um argumento como string Para abrir o primeiro armário, usamos argv[0], o segundo - argv[1], e assim por diante. Se tivermos n bloqueios, então precisamos parar em argv[n - 1], já que argv[n] não existe mais (ou existe, mas pertence a outra pessoa, é melhor não tocá-lo). Então você pode acessar o argumento k assim: string k = argv[1]; Acreditamos que realmente há algo lá! Lembre-se de que argc é uma variável int igual ao número de linhas em argv. Isso significa que é melhor verificar o valor de argc antes de tentar abrir a célula, pois pode acontecer que ele não exista. Idealmente argc = 2. Por que isso acontece? Dentro de argv[0] geralmente está o nome do programa. Ou seja, argc é sempre pelo menos 1. Mas nosso programa precisa que o usuário forneça um argumento de linha de comando k, portanto, argc = 2. Naturalmente, se o usuário inserir mais de um argumento na linha de comando, argc também cresce e pode ser maior que 2 Se o usuário inserir um número inteiro em uma string, isso não significa que o valor inserido será automaticamente armazenado como um int. Mais precisamente, NÃO. Será uma string, mesmo que pareça exatamente com um int! Portanto, precisamos converter string em int nós mesmos. Felizmente, existe uma função chamada atoi projetada para essa finalidade. Sua sintaxe é: int k = atoi(argv[1]); Observe que k é do tipo int, então você pode fazer aritmética com ele. Com esta função, você não precisa se preocupar se o usuário digita um número inteiro ou, digamos, foo: nesse caso, atoi retornará 0. A função atoi é declarada na biblioteca stdlib.h , então certifique-se de # inclua-o no início do programa. O código será compilado sem isso, pois já incluímos esta função na biblioteca cs50.h. No entanto, é melhor confiar nas bibliotecas nativas. Então você armazenou k como um int. Agora vamos pedir entrada de texto. Se você fez as tarefas da primeira semana, já está familiarizado com a função da biblioteca CS50 chamada GetString. Ela nos ajudará. Depois de receber k e o texto inicial, vamos iniciar a criptografia. Para recapitular, você pode iterar todos os caracteres de uma string e imprimi-los usando o seguinte loop: for (int i = 0, n = strlen(p); i < n; i++) { printf("%c", p[i]); } Em outras palavras, assim como argv é um array de strings, string é um array de caracteres. Portanto, podemos usar colchetes para acessar elementos de string individuais da mesma forma que obtemos strings individuais em argv. Claro, não há nada criptográfico na impressão de cada um dos caracteres. Ou, tecnicamente, quando k = 0. Mas devemos ajudar César a criptografar seu texto! Granizo caesar! Para usar strlen, você precisa incluir outra biblioteca . Como estamos automatizando alguns testes de validação, o programa deve se comportar exatamente assim: username:~/workspace/pset2 $ ./caesar 13 Be sure to drink your Ovaltine! Or fher gb qevax lbhe Binygvar! Além de atoi , você pode encontrar outras funções interessantes nas bibliotecas ctype.h e stdlib.h . Para fazer isso, siga o link e vasculhe um pouco por lá. Por exemplo, isdigit é claramente algo interessante =). Ao passar de Z para A (ou de z para a), não se esqueça do operador módulo %em linguagem C. Estude também a tabela , ela mostra caracteres ASCII não apenas para letras. Para verificar se o programa está funcionando corretamente com check50 , faça o seguinte: check50 2015.fall.pset2.caesar caesar.c E se tiver interesse em brincar com o código feito pelo pessoal do CS50, execute o comando: ~cs50/pset2/caesar A propósito, uggc://jjj.lbhghor.pbz/jngpu ?i=bUt5FWLEUN0 .
Análise da tarefa
  1. Pegue a chave
  2. Obter texto
  3. Criptografar
  4. Exibir uma mensagem criptografada
1. Formamos a função principal para que o usuário insira a chave na linha de comando e verifique se a chave está correta. int main(int argc, string argv[]) argc: • int • número de argumentos inseridos na linha de comando • se argc = 2 está tudo bem. Caso contrário, imprima a instrução e feche o programa. • Se argc = 2 verificamos se a chave é um número inteiro. • Argv é um array de strings, uma lista com argumentos inseridos nele. Array é uma estrutura de dados contendo dados diferentes do mesmo tipo em células diferentes. Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 4 Por exemplo, o usuário digitou a string blastoff Team Rocket, então: Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 5 Usando a função atoi(), convertemos o número resultante em um número inteiro. Se isso não for possível, a função retornará 0. Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 6 2. Solicita texto ao usuário. É simples: tudo o que o usuário digita é uma string. 3. Criptografia. O algoritmo é simples, mas como explicar ao computador quais letras vêm uma após a outra? É hora de lembrar a tabela ASCII! Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 7 No entanto, pode haver mais do que apenas letras em uma string... Antes de prosseguir com a alteração de strings, imagine que você só precisa alterar um caractere. Queremos alterar as letras do texto inicial, não os sinais ou números. O que deveríamos fazer? Primeiro precisamos verificar se esse caractere está no alfabeto. Isso pode ser feito usando a função isalpha() . Se o caractere estiver no alfabeto, esta função retornará verdadeiro e falso caso contrário. Mais duas funções úteis - isupper() e islower() retornam true se a letra for maiúscula ou minúscula, respectivamente. Assim: Isalpha(‘Z’) -> true Isalpha(‘;’) -> false Isupper(‘Z’) ->true Isupper(‘z’) -> false Islower(‘Z’) -> false Islower(‘z’)->true Se isalpha retornar verdadeiro, precisamos alterar este caractere usando a chave. Consideremos e analisemos como exemplo o programa do Zamili, o assistente CS50. Você deve estar se perguntando por que 'A' é um número inteiro quando é claramente uma letra. Acontece que símbolos e inteiros são intercambiáveis. Colocando a letra A entre aspas simples você pode obter seu código ASCII em int. Tenha cuidado: você precisa de aspas simples; sem elas, o compilador procurará uma variável chamada A, não um símbolo. Então, em linha, adicionamos o valor da chave ao código ASCII da letra e os armazenamos em uma variável inteira. Mesmo que o resultado seja um int, a instrução printf usa o espaço reservado %c para caracteres. Assim, o programa imprime o caractere associado ao resultado inteiro. No segundo caso, exibimos o número usando o espaço reservado %d. Você pode inserir este código no IDE cs50 e brincar com ele. Vamos verificar como o asciimath funciona para diferentes chaves. Vamos pegar o valor 25, veremos a seguinte imagem: E agora deixe a chave ser 26: Obtivemos [, e não a letra A. É apenas o próximo caractere ASCII depois de Z. Portanto, simplesmente adicionar a chave não trabalhar. Precisamos usar uma fórmula cifrada para retornar ao início do alfabeto assim que ficarmos sem letras. Lembre-se, já escrevemos acima: /* * asciimath.c * by Zamyla Chan * * Calculates the addition of a char and an integer, * and displays both the resultant character and its * ASCII value. * * Usage: ./asciimath key [char] * */ #include #include #include int main(int argc, string argv[]) { if (argc != 2) { printf("print the key next time \n"); return 1; } // key is the second command line argument int key = atoi(argv[1]); //преобразование строки в int int letter = 'A'; printf("\nCalculating '%c' + %d...\n", letter, key); int result = (letter + key); printf("The ASCII value of %c is %d.\n\n", result, result); return 0; } int result = (letter + key);Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 8Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 9ci = (pi + k) % 26 Onde ci é a letra número i no texto cifrado, pi é a letra número i no texto simples, k é a chave e% 26 é o restante da divisão por 26 (ou “módulo 26”). Vamos aplicar esta fórmula à letra Y. Tome k = 2. Calcule ('Y' + 2)% 26 Código ASCII da letra 'Y' = 89. Então ('Y' + 2)% 26 = (89 + 2 )% 26 = 91%26 = 13 Mas este não é o valor ASCII da letra A que precisamos, que é 65. Agora vamos dar a cada letra do alfabeto um valor de 0 a 25 em ordem. Neste caso, Y = 24. (24+2)%26 = 0 A letra A possui exatamente esse índice. Assim, esta fórmula refere-se ao índice alfabético das letras, não aos seus valores ASCII. Para imprimir um caractere criptografado você precisará de seu valor ASCII. E descubra como alternar entre um valor ASCII e um número do alfabeto. Depois de descobrirmos a fórmula para um caractere, precisamos aplicá-la a cada letra da string inserida no teclado. Mas só se forem cartas! E lembre-se, letras maiúsculas e minúsculas requerem significados diferentes. É aqui que as funções isupper e islower são úteis. Você pode ter duas fórmulas, uma para letras maiúsculas e outra para letras minúsculas, as funções o ajudarão a escolher qual delas aplicar. Como aplicar uma fórmula a cada caractere de uma string? Lembre-se de que uma string é apenas um array de caracteres. A função strlen (comprimento da string) ajudará você a determinar o número de iterações em um loop .Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 10

Tarefa 2. Parlez-vous français?

Teoria
A cifra de Vigenère é um pouco mais segura que a cifra de César: ela usa uma palavra como chave e é difícil de decifrar manualmente usando apenas análise de frequência ou força bruta. Cada letra da chave gera um número e, como resultado, obtemos várias teclas para mudar as letras. Exemplo: p = Meet me in the park at eleven am В качестве ключевого слова возьмем k = bacon Длина messages p = 25 В то время How длина k = 5 Поэтому его нужно повторять 5 раз. Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 11 Se o número de letras da mensagem não for divisível pela chave, utilizamos apenas parte dela na última aplicação da chave: Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 12 Para encontrar o valor do deslocamento, utilizamos as posições de cada letra da nossa chave bacon no alfabeto (de a a z). Contamos do zero, como verdadeiros programadores. E cada letra do texto original é deslocada por um determinado número, como na cifra de César, retornando, se necessário, depois de Z ao início do alfabeto. Portanto, M se moverá 1, o primeiro e não se moverá e o segundo se moverá 2 posições. Abaixo você vê a mensagem original, a chave escrita e o resultado de sua aplicação. Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 13 A cifra de Vigenère é, obviamente, mais forte, mas se você souber o comprimento da chave, é muito fácil quebrá-la. Como identificá-lo? Se o texto original for longo o suficiente para que algumas palavras apareçam várias vezes nele, você verá algumas repetições: Você Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 14 também pode usar força bruta, mas há muitas opções: 26^n – 1 onde n é o comprimento da chave desconhecida . Mas geralmente isso é muito. É verdade que isso não é um problema para um computador. E agora a matemática da cifra: seja p algum texto, k seja a palavra-chave, kj seja a j-ésima letra da chave, pi seja a letra número i no texto original, ci seja a letra número i na criptografia . Então: ci = (pi + kj) % 26
Exercício
Condição Escreva um programa vigenere.c que criptografe uma mensagem usando a cifra Vigenere. Fornecemos um argumento de linha de comando para a entrada do programa: a palavra-chave k, que consiste em letras do alfabeto inglês. Caso a aplicação seja iniciada com mais de um argumento ou com argumento não incluído no alfabeto, é necessário exibir informações de erro e encerrar o programa. Ou seja, main retornará 1 - neste caso, nossos testes automáticos entenderão que está tudo bem aqui, e essa condição será levada em consideração. Se tudo estiver bem, o programa deverá proceder à solicitação de uma string de texto p, que criptografamos com a chave k obtida acima, imprimir o resultado e completar o programa, retornando o valor 0. Esclarecimento É necessário ter certeza de que na chave k os caracteres A e a são designados como 0, B e b como 1, ..., Z e z como 25. O programa deve aplicar a cifra de Vigenère apenas às letras do texto p. Os caracteres restantes (números, sinais de pontuação, espaços) devem ser exibidos sem alterações. Se o algoritmo for aplicar o j-ésimo caractere k ao i-ésimo caractere p que não está no alfabeto, aplique esse j-ésimo caractere-chave ao próximo caractere alfabético do texto; você não pode simplesmente sair e passar para outro personagem em k. Finalmente, o programa deve preservar a caixa de cada letra em p .
Não sabe por onde começar?
Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 15
Aqui estão algumas dicas de Zamilya, assistente do curso CS50
Felizmente, o programa é muito semelhante à cifra de César, apenas a chave é uma string em vez de um número inteiro. Se você implementou com sucesso a cifra do nome do governante romano, pode ser um ótimo começo para a segunda tarefa. Você provavelmente já percebeu que a cifra de Vigenère com uma letra como chave é igual à cifra de César. O algoritmo de Vigenère usa as mesmas etapas de César:
  1. Pegue a chave
    • codeword é o segundo argumento da linha de comando argv[1]
    • deve estar no alfabeto: função isalfa
  2. Obter texto
  3. Criptografar
  4. Imprimir texto cifrado
Então, vamos verificar o segundo argumento da linha de comando argv[1] para ver se ele pertence a caracteres alfabéticos. Fazemos isso usando o já familiar isalpha . Se a chave estiver correta, recebemos uma string do usuário e iniciamos a criptografia. A fórmula da cifra de Vigenère é semelhante à fórmula da cifra de César. Como você converte uma letra no deslocamento de cifra correspondente? Tente comparar os valores usando a tabela ASCII. Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 16 Muito provavelmente, você conseguirá encontrar um padrão entre as letras e seus índices alfabéticos usando as sequências da tabela. Você descobriu como subtrair uma letra da outra para obter o resultado desejado? Os deslocamentos para letras maiúsculas e minúsculas são iguais, portanto você terá que definir duas fórmulas semelhantes para determinar o deslocamento para letras minúsculas e separadamente para letras maiúsculas. Lembre-se também de que o loop de texto deve ignorar caracteres que não sejam do inglês. E não se esqueça de preservar a caixa das letras. Se você observar a fórmula cifrada: ci = (pi + kj) % 26 verá duas variáveis ​​de índice, i e j. Um salva a posição no texto fonte, o outro na chave. Se o seu texto for maior que a chave, o índice da chave vai do final da chave até o início. Como fazer isso? Usando a operação de divisão de módulo! O resultado da operação é o resto da divisão de dois números. Os benefícios práticos desta operação na programação são simplesmente enormes! Imagine que um grande grupo de pessoas precise ser dividido em três subgrupos. Uma maneira de fazer isso é pedir-lhes que paguem pelo primeiro, segundo, terceiro. Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 17 Ou seja, a primeira pessoa pertence ao primeiro grupo, a segunda ao segundo, a terceira ao terceiro, a quarta ao primeiro novamente e assim por diante. Você pode usar a divisão de módulo para realizar a mesma operação. Vamos numerar os mesmos três grupos do zero. Veja como fazer isso: Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 18 se você pegar um índice e dividi-lo pelo módulo pelo valor máximo, o resultado resultante nunca será maior ou igual a esse valor. Experimente este princípio para retornar uma palavra-chave ao início! Somente em vez de classificar por grupo você precisa do índice da palavra-chave para poder deslocar a letra correta sem ultrapassar o comprimento da chave. Como estamos automatizando alguns testes do seu código, o programa deve se comportar conforme mostrado abaixo: jharvard@appliance (~/Dropbox/pset2): ./vigenere bacon Meet me at the park at eleven am Negh zf av huf pcfx bt gzrwep oz De que outra forma você pode testar o programa além de calcular manualmente o texto cifrado? Somos gentis: para isso escrevemos o programa devigenere . É necessário um e apenas um argumento de linha de comando (palavra-chave) e sua função é receber texto cifrado como entrada e retornar texto simples. Execute-o: ~cs50/pset2/devigenere k onde k é a palavra-chave. Se você quiser verificar a exatidão do seu programa usando check50, execute: check50 2014.fall.pset2.vigenere vigenere.c E se quiser avaliar nossa implementação do vigenere, digite: ~cs50/pset2/vigenere

Como validar seu código e obter notas

Atenção! Se for importante verificar apenas a exatidão das tarefas, use cs50check. Se você deseja obter notas na plataforma edx, siga o procedimento descrito a seguir. Lembre-se de que este procedimento usa o mesmo cs50check para verificar tarefas. A única diferença é que ele lembra os resultados e calcula a pontuação geral.
  1. Faça login no CS50 IDE
  2. Próximo ao canto superior esquerdo do CS50 IDE , onde seu navegador de arquivos está localizado (não na janela do terminal), clique com o botão direito no arquivo iniciais.c localizado no diretório pset2 e clique em Download . Você deverá ver que o navegador carregou iniciais.c .
  3. Repita para caesar.c .
  4. Repita para vigenere.c .
  5. Em uma janela ou guia separada, faça login no CS50 Submit
  6. Clique no ícone Enviar no canto superior esquerdo da tela. Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 19
  7. Na lista de pastas à esquerda, clique no diretório Conjunto de problemas 2 e, em seguida, clique no botão Carregar novo envio . É à direita. Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 20
  8. Na tela que aparece, clique no botão Adicionar arquivos .... Uma janela para selecionar arquivos do seu computador será aberta. Harvard CS50: Tarefas da Semana 2 (Aulas 5 e 6) - 21
  9. Navegue até a pasta onde você guarda iniciais.c . Provavelmente está localizado na pasta Downloads ou onde quer que seu navegador coloque os arquivos por padrão. Ao encontrar iniciais.c , clique nele uma vez para selecioná-lo e clique em Abrir.
  10. Clique em Adicionar arquivos novamente.
  11. Encontre caesar.c e abra-o.
  12. Faça o mesmo para o arquivo vigenere.c .
  13. Clique em Iniciar upload. Seus arquivos serão enviados para servidores CS50 .
  14. Na tela que aparece, você deverá ver a janela Nenhum arquivo selecionado . Se você mover o cursor do mouse para a esquerda, verá uma lista de arquivos baixados. Para confirmar, clique em cada um deles. Se não tiver certeza sobre algo, você pode reenviar os arquivos repetindo as mesmas etapas. Você pode fazer isso quantas vezes quiser até o final de 2016.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION