Ligeiramente modificada para a especificação de um programa CS1

O gerente de um restaurante de fast food exige um programa para ajudar a controlar as vendas. A saída só serve hambúrgueres com fritas, um hamburguer refeição custa R $ 5,95. Os clientes podem encomendar qualquer número de refeições hambúrguer. O programa é para ajudar a calcular os preços de encomendas, e é também manter registos de encomendas totais ea maior encomenda individual. O programa é usar um menu simples loop estilo selecione com as opções:

  

(1) a fim Place

(2) Imprimir totaliza até agora

(3) Feche

A opção de ordem deve resultar em um prompt para o número de refeições necessárias. Qualquer entrada de dados inválidos (valor <= 0) deve ser descartado, o programa é novamente ao usuário com as opções. Dados de entrada válidos deve resultar em atualizações do total de vendas e, quando necessário, à actualização do registo da maior ordem. O programa também deve responder com um número de ordem e os custos da ordem. A opção de totais deve imprimir detalhes das vendas totais ea maior ordem. A opção de sair encerra o programa. Uma seleção de opção inválida é relatado e, depois, o programa repete os comandos para entrada. (A especificação original incluía uma cópia impressa que mostra o formato exato necessário para entradas e saídas.) Obviamente, o programa Perl exige um loop enquanto contendo um se ... elsif ... else const.

#! / share / bin / perl-w $ custo = 5,95; $ OrderNum = 0; $ MaxOrder = 0; $ totalSales = 0; while (1) (print 'Bem vindo ao CS1 Burgers 1. Faça uma Ordem 2. Imprimir totaliza 3. Saia Digite sua escolha: ', $ order =  If ($ order == 1) (print "Quantas refeições você quer?"; $ Size =  If ($ size <= 0) (next;) $ OrderNum + +; print "Está número de cliente: $ OrderNum \ n"; $ ordercost custo = $ * $ size; print "Você deve: \ $ ordercost \ n" ; $ MaxOrder = ($ size> $ MaxOrder)? $ size: $ MaxOrder; $ totalSales + = $ ordercost;) elsif ($ ordem == 2) (print "Não foi de US $ OrderNum clientes \ n";
quantidade de impressão "Total: \ $ $ totalSales \ n"; print "Número máximo de pratos encomendados em um". "ordem única: pratos MaxOrder $ \ n";) elsif ($ ordem == 3) (last;) else ( print "Essa foi uma má escolha. ... Tente novamente";)) print "Tchau! \ n";

(Lembra-se de volta para os momentos em que algo como isto era uma tarefa difícil que você levou uma semana?) Características notar no código são: A 'para sempre', enquanto loop; rescindido pela última declaração de opção de seleção 3. A utilização amulti de alta definição cadeia da linha de simplificar a declaração da seqüência de comandos. O uso de de entrada. A coerção automática de entrada para um valor numérico. Um se ... elsif ... else construção condicional (provavelmente destinado a ser uma exposição do caso na versão original desta tarefa). próximas e últimas declarações no corpo do loop. Prova de que o Perl tem mantido operador ternário C's ()? ... : ... Interpolação de valores de dados em cordas.

Essa atribuição era realmente de um assunto de nível superior, mas também exige que apenas a mais básica das estruturas de programação. O programa é para ler os dados sobre arquivos e diretórios, obtidos a partir do comando ls-l do Unix. Entrada é para ser lido a partir do STDIN (tubulação, quer de ls-l ou redirecionar a partir de um arquivo produzido por ls-l). Exemplo de dados de entrada são:

-rx - x - x 1 root bin 20796 6 de janeiro de 2000 acctcom-rx - x - x 37 root bin 5256 Jan lrwxrwxrwx adb 6 2000 1 root root 29 30 de novembro de 2000 cachefspack -> .. / lib / fs / cachefs / cachefspack drwxr-xr-x 2 root bin 512 10 de junho 15:08 sparcv7

O programa é processar linhas relativos a processos simples e diretórios; Diretório entradas especiais, como links, devem ser ignorados. O programa é para gerar uma linha de saída para cada linha de entrada processada. Esta linha de saída é reescrever as permissões de arquivos no formato do código octal usado para permissões do Unix, é para indicar se a linha se refere a um arquivo ou diretório, e é para imprimir o nome de entrada. Quando todas as linhas de entrada foram processados, o programa deve imprimir a contagem do número de arquivos e diretórios e, em seguida, finalizar. A saída para os dados acima, deverá ser:

511 acctom arquivo ADB 511 diretório 755 arquivo sparcv7

A primeira versão de uma solução para esta atribuição é novamente baseada em um loop while em que todo o processamento é realizado. O loop lê uma linha do STDIN, e termina quando uma linha em branco é recebido (fim-de-estado de arquivo). O tratamento depende dos caracteres específicos que são de entrada; função do Perl substr padrão é usado para selecionar os caracteres da linha de entrada.

#! / share / bin / perl-w $ files = 0; $ directories = 0; while ($ str =  ) (Chomp ($ str); $ char = substr ($ str, 0,1); if (eq $ char "-") ($ type = "file"; $ files + +;) elsif eq ($ char 'd' ) ($ type = "Diretório"; $ diretórios + +;) else (next;) $ code1 = 0; # compor código octal para o proprietário se ( "r" eq substr ($ str, 1,1)) ($ code1 + = 4;) if ( "w" eq substr ($ str, 2,1)) ($ code1 + = 2;) if ( "x" eq substr ($ str, 3,1)) ($ code1 + = 1; ) $ ID2 = 0; # compor código octal para o grupo caso ( "r" eq substr ($ str, 4,1)) ($ code2 + = 4;) if ( "w" eq substr ($ str, 5,1 )) ($ code2 + = 2;) if ( "x" eq substr ($ str, 6,1)) ($ code2 + = 1;) $ code3 = 0; # compor código octal para outros se ( "r" eq substr ($ str, 7,1)) ($ code3 + = 4;) if ( "w" eq substr ($ str, 8,1)) ($ code3 + = 2;) if ( "x" eq substr ($ str, 9,1)) ($ code3 + = 1;) $ code = $ code1. $ code2. $ code3; # extrai nome do arquivo no final da linha $ nome = substr ($ str, $ pos +1);
print "$ (code) \ t $ (type) \ t $ (nome) \ n";) print "$ files arquivos e diretórios $ diretórios \ n";

while ($ str =  ) (Chomp ($ str); $ char = substr ($ str, 0,1); if (eq $ char "-") ($ type = "file"; $ files + +;) elsif eq ($ char 'd' ) ($ type = "Diretório"; $ diretórios + +;) else (next;) $ code = 0;
for ($ i = 1; $ i <10; $ i + +) ($ code *= 2; se o código ( "- substr" ne ($ str, $ i, 1)) ($ + +;)) $ pos = rindex ( nome $ str, ""); $ = substr ($ str, $ pos +1); printf "% o% s", $ code, "\ t $ (type) \ t $ (nome) \ n";)

Na instrução printf, o primeiro argumento% 'O% s' é a seqüência de formato, o que especifica a saída de um valor numérico em octal, seguido por uma corda. Os outros argumentos são o código, e uma string com o tipo (arquivo ou diretório) eo nome da entidade. Evidentemente, há uma outra maneira de fazê-lo. Desde uma string é uma seqüência duplamente citado Perl, pode interpolar valores. A seguinte variante seria tão bom:

% o printf "\ t $ (type) \ t $ (nome) \ n" código, $;
um artigo submetido por Ronald Smith


Isenção de responsabilidade:O nosso site não se responsabiliza pelo conteúdo deste artigo. Webarticles é uma fonte de informação livre.
Importante: Este artigo "Ligeiramente pela especificação de um programa CS1" foi traduzida por um software automático. Nós sentimos muito por quaisquer erros de ortografia que pode ter ocorrido. Obrigado pela sua compreensão.


Online: 135 users browsing the articles directory   


  

|