FAQ da CRIATURA =============== PERGUNTAS FREQUENTES - FREQUENTLY ASKED QUESTIONS >>>>>>>>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<< QUESTÂO 1: Quebrando uma linha de texto nos espaços em branco QUESTÂO 2: Tamanho do nome das variáveis - 4 letras? QUESTÂO 3: Comandos e nomes de variáveis - minúsculo ou maiúsculo? >>>>>>>>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<< QUESTÂO 1: Caro "colega" Osório, > From: Moreno Cruz Osório > To: > Subject: Dúvida > Date sent: Thu, 5 Sep 2002 23:33:34 -0300 > > Professor, > Como que eu leio duas variáveis separadas por um espaço? Eu só > consegui fazer isso com duas variáveis tipo integer. Com uma string >e uma integer eu não consegui. > > Moreno > O espaço em branco serve como separador da mesma forma que um "enter" quando estamos lendo variáveis numéricas. Sendo assim, se for feito o seguinte: readln(a,b); {a e b do tipo integer} neste exemplo vamos poder digitar dois números separados por espaço, ou mesmo, digitar um nro depois enter e depois o outro e enter. Se a leitura for de uma string, o espaço "faz parte" da string e não é considerado um separador. Sendo assim: Números terminam no "enter" ou no "espaço" String terminam só no "enter" Se quiseres ler um número e uma string basta ler nesta ordem: readln (var_numerica, var_string); e neste caso basta um espaço entre o numero e o restante da linha. Se quiseres ler uma string e depois um número: readln (var_string, var_numerica); neste caso tem que digitar um texto seguido do enter e depois o numero e outro enter. O espaço em branco não vai servir para separar as duas variáveis... E a solução mais "avançada": => Ler a linha inteira como um string e depois quebrar ela nos lugares onde tiver um espaço... Exemplo: program quebra_string; var linha:string; palavra1,palavra2:string; posic:integer; begin linha:='hello world'; posic:=pos(' ',linha); { Acha a posicao do caracter espaco em branco } if posic<>0 then begin palavra1:=copy(linha,1,posic-1); { do inicio ate antes do espaco } palavra2:=copy(linha,posic+1,length(linha)-posic); { 2a. parte: ate o fim } writeln(palavra1); writeln(palavra2); end else writeln('Nao tem espaco em branco na linha!'); readln; end. Se você quiser pode melhorar este programa para quebrar a string em vários pedaços, converter uma das strings para um valor numérico (função VAL do pascal) e assim por diante. E se a string tiver um tamanho fixo em seus pedaços, fica mais fácil ainda... Boa programação... Osório (o prof.) >>>>>>>>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<< QUESTÂO 2: From: Fernando Santos Osorio To: "Licaro Franklin Girardi Dorneles" Subject: Re: Trabalho Super-Criatura Date sent: Mon, 9 Sep 2002 18:05:21 -0300 Oi Licaro, > Prof. Osorio > > > Sou aluno de lab2, turma 51, e tenho uma dúvida sobre o trabalho e de > repente o senhor poderia me ajudar. No trabalho da Super-Criatura, o > senhor defini que cada comando do simulador possui 4 letras seguidas de > um espaço, gostaria de saber se o mesmo vale para as variáveis. Pode-se > basear que elas possuim no máximo 4 letras? A idéia é usar 4 letras nos programas de teste da Criatura... (vide exemplo que tem na definição do trabalho), mas não seria nada complicado (em termos de implementação) deixar o usuário usar nomes de variáveis maiores. Se aceitar 4 está bom... se aceitar mais, melhor pois teus programas na linguagem da Criature vão ser mais legíveis. > e o valor dessas > variáveis, pode-se definir que vai ao máximo o valor dos integers > (32767) ou dos longints? Eu havia pensado em Integer. A Criatura é poderosa mas nem tanto. O fatorial vai ficar limitado, mas o nosso objetivo é só provar que funciona. >>>>>>>>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<< QUESTÂO 3: >From: Vitorio Sassi >To: osorio@exatas.unisinos.br >Subject: Trabalho GA >Date sent: Mon, 9 Sep 2002 22:00:41 -0300 > Bom, vamos as perguntas: > > 1- A forma como as instruções serão armazenadas no arquivo texto é igual > a que consta no enunciado? Quero dizer, primeiro vai existir a cláusula > VAR com os dados, e depois a cláusula PROGRAM com as instruções e seus > devidos argumentos? Ou não vai haver as cláusulas? Ou ainda vai ser tudo > bagunçado? > Os arquivos serão exatamente iguais ao exemplo colocado no texto da especificação do trabalho. Primeiro começa com o VAR, seguem as variáveis e depois vem o PROGRAM e segue o programa. Exatamente desta forma. Não haverá comentários no texto dos programas, apenas o VAR e suas variáveis e o PROGRAM e seus comandos. Tudo extremamente organizado. Sempre com comandos e variáveis de 4 letras separados por um único espaço em branco da parte complementar (parâmetro ou valor relativo ao comando). > 2- Tanto a memória de programa quanto a de dados deverão ser > implementadas com listas circulares, eu pressumo. Correto? Posso > utilizar as rotinas de listas circulares em units? Evidentemente que o > source das untis serão entregues junto com o trabalho. > É possível. Na realidade não vamos apagar nem comandos, nem variáveis, o que simplifica o trabalho. Isso quer dizer que a memória de comandos e de variáveis podem ser implementadas como listas sequenciais simples (não necessariamente circulares visto que não tem remoção). Em relação a pilha, também podem ser usadas listas, e como nas pilhas a base não se move, não é necessária uma lista circular. Apesar disto, é claro que TUDO pode ser implementado com rotinas genéricas de lista circular, pois elas permitem criar todas as estruturas de dados citadas acima (listas e pilhas). Se quiseres podes até usar alocação dinâmica... será aceito no trabalho, desde que use rotinas genéricas de manipulação das estruturas de dados. > 3- Os comandos que poderão ser utilizados pela Super-Criatura, deverão > ser validados com o CASE ou algo do tipo? Ou eu devo utilizar a tabela > ASCII da máquina? Ou ainda, utilizar ionstruções assembler? Por favor, > diga que assembler não é escopo do trabalho... Todos os comando estão em > letras maiúsculas? Ou não deverá existir distinções (case sensitive)??? > Sim todos os comando estarão em letras maiúsculas. Não precisa transformar de minúscula para maiúsculas. Vide exemplos de programa especificados no trabalho. Se quiser converter de minúscula para maiúscula não tem problema... desde que aceite as MAIÚSCULAS (se já estiver em maiúsculas esta conversão a mais não vai afetar o resto do programa). > 4- Não ficou muito claro o conceito de como implementar os registradores > REG_A, Entrada e Saida. Pode me esclarecer?? O Reg_A, Input e Output deverão ser "simulados" por 3 variáveis do tipo integer... servem apenas para armazenar um valor inteiro de modo temporário. Este é um conceito muito usado nos processadores atuais, registradores temporários, e que vai ser facilmente implementado, pois basta criar variáveis para guardar os valores nela armazenados. > 5- É realmente necessário montar aquele tela bonitinha? > Não exatamente, mas uma tela que bonitinha que permita acompanhas a simulação vai ser bem importante. Para que eu possa corrigir o trabalho é importante que eu possa VER a simulação funcionando! > Bem... por enquanto tenho apenas estas dúvidas. Mas pode ter certeza de > que não serão as únicas... > >>>>>>>>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<< QUESTÂO 4: Certamente vem mais por aí...