UFRJ/ECO/SI - Prof. Luiz Carlos Paternostro - Exercícios preparatorios para o trabalho obrigatorio -Supondo que o texto em `arquivo.txt' será a entrada para o programa do modelo em C; -Supondo que o texto em `arquivop.txt' será a entrada para o programa do modelo em Pascal; -Modifique os programas segundo as indicações abaixo e explique o que ocorrerá; -Experimente com textos de entrada diferentes. Considere: ========================================================================================== x nlinha codigo1 > codigo2 =trocar na linha nlinha codigo1 por codigo2 - nlinha =eliminar linha nlinha + nlinha1/nlinha2 codigo1 =acrescentar codigo1 em nova linha entre nlinha1 e nlinha2 ========================================================================================== Voce pode testar, se quiser, os exercícios em casa, compilando o código modificado para cada caso. Os arquivos-texto de entrada sempre serão os mesmos: arquivo.txt para o C, arquivop.txt para o Pascal. O conteúdo de cada arquivo-texto corresponde, respectivamente, ao código dos modelos distribuídos em sala. Sugestão: copie, com nomes diferentes, seis arquivos-fonte idênticos ao modelo em Pascal e doze arquivos-fonte idênticos ao modelo em C. Por exemplo, c0.c, c1.c, c2.c, etc., com conteúdos idênticos ao modelo em c; e p0.pas, p1.pas, p2.pas, etc., com conteúdos idênticos ao modelo em pascal. Aplique as mudanças propostas no exercício, um arquivo-fonte para cada caso, compile, execute, verifique as mensagens e o arquivo-texto de saída. Para cada caso, experimente com arquivos-texto de entrada diferentes, analisando os efeitos nas saídas. VEJA AO FINAL DESTE TEXTO ALGUMAS SUGESTOES PARA FAZER OS EXERCICIOS PROPOSTOS CASOS EM PASCAL ================================================== caso 1 PASCAL -------------------------------------------------- x 06 'ABCDE'; > 'Programa'; -------------------------------------------------- caso 2 PASCAL -------------------------------------------------- x 09 6; > 3; -------------------------------------------------- caso 3 PASCAL -------------------------------------------------- x 15 difere: boolean; > difere: integer; x 33 difere:=FALSE; > difere:=0; x 40 difere:=TRUE; > difere:=difere+1; x 41 if difere then > if difere > 1 then x 44 difere:=FALSE; > difere:=0; -------------------------------------------------- caso 4 PASCAL -------------------------------------------------- x 33 difere:=FALSE; > difere:=TRUE; -------------------------------------------------- caso 5 PASCAL -------------------------------------------------- - 37 x 38 i=N > i=N-1 x 52 end > end else i:=i+1 ================================================== CASOS EM C ================================================== caso 1 C -------------------------------------------------- x 07 "ABCDE" > "total" -------------------------------------------------- caso 2 C -------------------------------------------------- x 16 total=0 > total=1 -------------------------------------------------- caso 3 C -------------------------------------------------- x 15 letra[N]="" > letra[N]="12345" x 16 i=0 > i=4 -------------------------------------------------- caso 4 C -------------------------------------------------- x 16 j=0 > j=999 -------------------------------------------------- caso 5 C -------------------------------------------------- x 16 difere=0 > difere=1 -------------------------------------------------- caso 6 C -------------------------------------------------- + 16/17 int contador=0; + 28/29 { + 39/40 contador++;} -------------------------------------------------- caso 7 C -------------------------------------------------- - 41 -------------------------------------------------- caso 8 C -------------------------------------------------- x 28 letra[i] > letra[i++] x 29 i++==(N-1) > i==N -------------------------------------------------- caso 9 C -------------------------------------------------- x 31 (difere) > (difere > 1) -------------------------------------------------- caso 10 C -------------------------------------------------- - 33 -------------------------------------------------- caso 11 C -------------------------------------------------- x 36 dfPtr); > dfPtr);} - 38 ================================================== ==================================================== ALGUMAS SUGESTOES PARA FAZER OS EXERCICIOS PROPOSTOS ==================================================== (...) CASOS EM PASCAL ================================================== caso 1 PASCAL -------------------------------------------------- x 06 'ABCDE'; > 'Programa'; -------------------------------------------------- etc. Os exercicios supoem que voce ja baixou os arquivos de entrada arquivop.txt e arquivo.txt. Eles estao em https://pater.web.cip.com.br/SI2024/arquivop.txt https://pater.web.cip.com.br/SI2024/arquivo.txt Se nao baixou, baixe dentro do terminal para o diretorio que escolheu para fazer os exercicios, assim wget --no-check-certificate https://pater.web.cip.com.br/SI2024/arquivop.txt wget --no-check-certificate https://pater.web.cip.com.br/SI2024/arquivo.txt Agora baixe os modelos de codigo em C e em Pascal, assim wget --no-check-certificate https://pater.web.cip.com.br/SI2024/exemploc.txt wget --no-check-certificate https://pater.web.cip.com.br/SI2024/exemplop.txt Mude as extensoes de txt para as correspondentes aos codigos-fonte, assim mv exemploc.txt exemploc.c mv exemplop.txt exemplop.pas Agora voce deve ter no seu diretorio os arquivos de entrada e os arquivos com os codigos-fonte. Baixe tambem o arquivo exercici.txt com as instrucoes para os exercicios, assim wget --no-check-certificate https://pater.web.cip.com.br/SI2024/exercici.txt --- Obs: Se quiser, voce pode consultar o exercici.txt em outra aba de terminal, de modo a manter livre o prompt para novos comandos, apertando as teclas para abrir a nova aba, e depois, no novo terminal, digite less exercici.txt (para sair do less aperte a tecla ) --- Compile, para testar, exemplop.pas e exemploc.c, assim como fez com pprimeiro.pas e cprimeiro.c, digitando fpc -oexemplop exemplop.pas gcc -oexemploc exemploc.c Agora, como voce tem o arquivop.txt e o arquivo.txt presentes no seu diretorio, experimente executar exemplop e exemploc, digitando ./exemplop ./exemploc Veja que foram gerados dois novos arquivos, o novoarqp.txt e o novoarq.txt, que sao iguais a arquivop.txt e arquivo.txt, exceto pelas cadeias 'ABCDE' , que aparecem nos arquivos de saida (novoarqp.txt e novoarq.txt) substituidas por cadeias 'abcdef'. Examine tambem as mensagens de tela. Voce pode inspecionar os arquivos de entrada e saida digitando cat substituindo pelo nome do arquivo que deseja inspecionar. Se o arquivo for grande, para inspecionar eh util usar o less, como comando ou como filtro, assim less ou entao, cat | less Agora pode comecar a fazer as modificacoes propostas em exercici.txt. Para isso, foi sugerido que voce crie varias copias de exemplop.pas e de exemploc.c para poder trabalhar cada item do exercicio de forma independente. Voce pode copiar manualmente, por exemplo, assim cp exemplop.pas p0.pas cp exemplop.pas p1.pas cp exemplop.pas p2.pas cp exemplop.pas p3.pas cp exemplop.pas p4.pas cp exemplop.pas p5.pas cp exemplop.pas p6.pas cp exemplop.pas p7.pas cp exemploc.c c0.c cp exemploc.c c1.c cp exemploc.c c2.c cp exemploc.c c3.c cp exemploc.c c4.c cp exemploc.c c5.c cp exemploc.c c6.c cp exemploc.c c7.c cp exemploc.c c8.c cp exemploc.c c9.c cp exemploc.c c10.c cp exemploc.c c11.c cp exemploc.c c12.c ===================== [NOTA: voce pode querer gerar as sequencias acima, e executa-las, sem precisar copiar uma a uma] for i in {0..7}; do echo cp exemplop.pas p$i.pas; done [isso gera as linhas do tipo 'cp exemplop.pas etc.'] for i in {0..12}; do echo cp exemploc.c c$i.c; done [isso gera as linhas do tipo 'cp exemploc.c etc.'] [Para executar as linhas impressas, voce pode omitir o comando 'echo' dentro do laco 'for' das linhas de comando acima] for i in {0..7}; do cp exemplop.pas p$i.pas; done for i in {0..12}; do cp exemploc.c c$i.c; done ===================== Agora voce tem sete arquivos iguais ao exemplop.pas e doze arquivos iguais ao exemploc.c para trabalhar em cada item dos exercicios em exercici.txt As modificacoes propostas se referem ao codigo impresso com linhas numeradas. Assim, por exemplo: caso 1 PASCAL -------------------------------------------------- x 06 'ABCDE'; > 'Programa'; -------------------------------------------------- x significa trocar (veja as legendas ao inicio das instrucoes); 06 eh o numero da linha que deve ser trocada; 'ABCDE'; eh o que existe na linha e deve ser trocado por 'Programa'; Entao, apos modificar o codigo que estah no arquivo p0.pas (uma das copias que voce fez do modelo exemplop.pas), voce deve compilar fpc -op0 p0.pas e executar ./p0 assim como fez com pprimeiro.pas e com exemplop.pas. Cada um dos casos Pascal e C ilustra alteracoes que produzem resultados diferentes nos arquivos de saida novoarqp.txt e novoarq.txt, alem das mensagens de tela. A ideia eh examinar os resultados e procurar uma explicacao para as mudancas. Algumas sao faceis e fazem muito sentido, outras nem tanto.