Leggermente modificata specifica per un programma CS1

Il gestore di un fast food richiede un programma per aiutare le vendite pista. La presa serve solo hamburger con patatine, hamburger di un pasto costa 5,95 dollari. I clienti possono ordinare qualsiasi numero di pasti hamburger. Il programma è quello di aiutare il calcolo dei prezzi degli ordini, ed è anche di tenere un registro degli ordini totali e il più grande ordine unico. Il programma è quello di utilizzare un menu semplice loop in stile selezionare con le opzioni:

  

(1) Per Place

(2) Stampa totali finora

(3) Chiudere

L'opzione ordine dovrebbe sfociare in una richiesta per il numero dei pasti richiesti. Tutti i dati di input non validi (value <= 0) sono da scartare, il programma è di nuovo pronta l'utente con le opzioni. Dati di input valido dovrebbe portare negli aggiornamenti del totale delle vendite e, se del caso, l'aggiornamento del record del più grande ordine. Il programma dovrebbe inoltre rispondere con un numero d'ordine e il costo dell'ordine. L'opzione totali dovrebbe stampare i dettagli del totale delle vendite e più grande ordine. L'opzione quit termina il programma. Una selezione valida opzione è segnalato, quindi il programma si ripete la richiesta del ingresso. (La specifica originale inclusa una stampa che mostra i formati esatta richiesta per gli ingressi e le uscite.) Ovviamente, il programma Perl richiede un ciclo while contenente una se ... elsif ... altro costrutto.

#! / share / bin / perl-w $ costo = 5,95; $ orderNum = 0; $ maxorder = 0; $ totalsales = 0; while (1) (print 'Welcome to CS1 Burgers 1. Effettuare un ordine 2. Stampa totali 3. Chiudere Inserisci la tua scelta: '; $ ordine =  If ($ order == 1) (print "Quanti pasti do you want?"; $ Size =  If ($ size <= 0) (next;) $ orderNum + +; print "Sei il numero dei clienti: $ orderNum \ n"; $ ordercost = costo $ * $ size; print "devi: \ $ $ ordercost \ n" ; maxorder = $ ($ size> $ maxorder)? $ size: $ maxorder; $ totalsales + = $ ordercost;) elsif ($ order == 2) (print "Ci sono stati di $ orderNum clienti \ n";
importo "print Totale: \ $ $ totalsales \ n"; "Stampa il numero massimo di piatti ordinati in uno". "unico ordine: piatti maxorder $ \ n";) elsif ($ order == 3) (last;) else ( print "E 'stata una cattiva scelta. ... Try again";)) print "Bye! \ n";

(Ti ricordi indietro ai tempi in cui qualcosa di simile a questo è stato un compito difficile che ti è costato una settimana?) Caratteristiche notare nel codice sono: A 'per sempre', mentre loop; denuncia da parte l'ultima affermazione in opzione di selezione 3. L'uso di amulti definizione stringa della riga di semplificare la dichiarazione della stringa di prompt. L'uso di ingresso. La coercizione automatica di ingresso ad un valore numerico. un'istruzione if ... else ... elsif costrutto condizionale (probabilmente destinato ad essere una dichiarazione caso nella versione originale di questo compito). successivo e dichiarazioni ultima nel corpo del loop. prova che Perl ha mantenuto operatore ternario del C ()? ... : ... Interpolazione dei valori dei dati in stringhe.

Questo incarico è stato effettivamente da un soggetto ad alto livello, ma richiede anche solo la più elementare delle strutture di programmazione. Il programma è quello di leggere i dati relativi file e directory come quella ottenuta dal comando Unix ls-l. Ingresso è da leggere da STDIN (o tubo da ls-l o reindirizzare da un file prodotto tramite ls-l). Esempio di dati di input sono:

-RX - x - x 1 root bin 20.796 6 gennaio 2000 acctcom-Rx - x - x 37 root bin 5256 6 gennaio 2000 adb lrwxrwxrwx 1 root root 29 30 novembre 2000 cachefspack -> .. / lib / fs / cachefs / cachefspack drwxr-xr-x 2 root bin 512 10 Giugno 15:08 sparcv7

Il programma è quello di processo di linee in materia di semplici file e directory; voci di directory speciali, come i collegamenti, devono essere ignorati. Il programma è quello di generare una linea di output per ogni linea di trasformazione di input. Questa linea di uscita è quella di riscrivere i permessi dei file sotto forma di codice ottale utilizzato per le autorizzazioni di Unix, ed è per indicare se la linea si riferisce a un file o una directory, ed è per stampare il nome di voce. Quando tutte le linee di ingresso sono stati trattati, il programma è quello di stampare conta del numero di file e directory e poi terminare. L'output per i dati di cui sopra dovrebbe essere:

511 acctom file 511 adb file di 755 directory sparcv7

La prima versione di una soluzione per questo compito è ancora basato su un ciclo while in cui tutta l'elaborazione viene eseguita. Il ciclo legge una riga da STDIN, e termina quando una riga vuota viene ricevuto (end-of-condizione di file). Il trattamento dipende dai caratteri specifici che sono in ingresso, la funzione del Perl substr standard viene utilizzato per selezionare i caratteri dalla linea di ingresso.

#! / share / bin / perl-w $ file = 0; $ directory = 0; while ($ str =  ) (Chomp ($ str); $ char = substr ($ str, 0,1); if ($ char eq "-") ($ type = "file"; $ files + +;) elsif ($ eq char 'd' ) ($ type = "directory"; $ directory + +;) else (next;) $ Codice1 = 0; # comporre il codice ottale per il proprietario, se ( "r" eq substr ($ str, 1,1)) ($ Code1 + = 4;) if ( "w" eq substr ($ str, 2,1)) ($ Codice1 + = 2;) if ( "x" eq substr ($ str, 3,1)) ($ Codice1 + = 1; ) $ code2 = 0; # comporre il codice ottale per il gruppo se ( "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; # comporre il codice ottale per gli altri 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; # estrae il nome del file alla fine della linea $ nome = substr ($ str, $ pos +1);
print "$ (codice) \ t $ (type) \ t $ (nome) \ n";) print "$ file file e le directory $ directory \ n";

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

Nella dichiarazione printf,% il primo argomento 'o% s' è la stringa di formato; questa specifica produzione di un valore numerico in ottale, seguita da una stringa. Gli altri argomenti sono il codice, e una stringa con il tipo (file o directory) e il nome del soggetto. Naturalmente, c'è un altro modo di farlo. Dal momento che una stringa di formato è una stringa Perl doppiamente citato, si può interpolare i valori. Il seguente variante sarebbe come bene:

printf "% o \ t $ (type) \ t $ (nome) \ n", $ code;
un articolo presentato da Ronald Smith


Disclaimer:Il nostro sito non è responsabile per il contenuto di questo articolo. Webarticles è una risorsa gratuita di informazioni.
Importante: Questo articolo è "leggermente modificata specifica per un programma CS1" è stato tradotto da un software automatico. Ci dispiace per eventuali errori di ortografia che possono essersi verificati. Grazie per la vostra comprensione.


Online: 231 users browsing the articles directory