Титрование калькулятор химия


Это Perl-программа, предназначенная для моих занятий по химии. Так как я только учусь писать на Perl, который является моим первым языком, можете ли вы сказать мне, если вы думаете, что это хорошо написано? Если нет, не могли бы вы сказать мне, что случилось с ним или что можно улучшить?

## Name:Titration
## Beginning of Program

#Input Variables
system "clear";     # Clear the Screen

print "Milliliters Solute: ";
chomp ($milliliters_solute=<>);

print "Milliliters Solvent: ";
chomp ($milliliters_solvent=<>);

print "Molarity of Solvent: ";
chomp ($molarity_solvent=<>);

print "Moles of Solute: ";
chomp ($moles_solute=<>);

print "Moles of Solvent: ";
chomp ($moles_solvent=<>);

system "clear";     # Clear the Screen

#Calculate Answer
$liters_solute=$milliliters_solute/1000;
$liters_solvent=$milliliters_solvent/1000;
$molarity=($liters_solute/$liters_solvent)*($molarity_solvent/1)*($moles_solvent/$moles_solute);

#Print Answer
system "clear";     # Clear the Screen
print "Molarity is $molarity \n";

## End of Program


848
14
задан 26 мая 2011 в 11:05 Источник Поделиться
Комментарии
5 ответов

Одно предложение, использовать

использование предупреждений;

использовать строгие;

Заставит вас быть лучшим программистом на Perl, путем применения дополнительной жесткости, чтобы ваши скрипты, и intepreter поймать какие-то неприятные вопросы, которые могут быть трудно отлаживать.

13
ответ дан 26 мая 2011 в 11:05 Источник Поделиться

Используйте эти. Сначала они будут делать все сложнее, потому что вы получите несколько сообщений об ошибках, нужно объявлять все переменные с моейи т. д. Но очень быстро они сделают вашу жизнь лучше.

use strict;
use warnings;

Когда вы видите повторяющийся код, рекомендуется написать подпрограмму.

sub get_user_input {
my $message = shift;
print $message, ': ';
chomp(my $reply = <>);
return $reply;
}

Пример использования.

my $milliliters_solute  = get_user_input('Milliliters Solute');
my $milliliters_solvent = get_user_input('Milliliters Solvent');

Удачи вам в ваших исследованиях. Один из моих любимых учителей пошел по имени Крот человек -- вы можете сказать, какой предмет он преподавал.

11
ответ дан 27 мая 2011 в 11:05 Источник Поделиться

Помимо тех, что были упомянуты, то я могу рекомендовать следующие несколько правил форматирования, чтобы сделать вашу жизнь проще в долгосрочной перспективе:


  • Держать линии до разумной длины, вставка разрывов строки в логических точках, где это необходимо. Это помогает избежать необходимости прокрутки по горизонтали, а также для улучшения читабельности. 80 столбцов, как правило, рассматривается в качестве стандартной правое для большинства кода.

  • Вокруг вставки пробелов инфиксные операторы, чтобы повысить удобочитаемость:

    $liters_solute = $milliliters_solute / 1000;

  • Не ставьте лишние пробелы вокруг побегов в струны, потому что...ну, это за отдельную плату, и это важно, и в то время как это действительно не имеет значения здесь (в конце линии), это хорошая вещь, чтобы обратить внимание в будущем.

    print "Molarity is $molarity\n";

  • Не ставьте лишние пробелы перед аргументы функции:

    chomp($milliliters_solute = <>);

7
ответ дан 27 мая 2011 в 04:05 Источник Поделиться

Вы сделали отличный старт. Ваши комментарии понятны и ваши имена переменных-это хорошо.

Я сделал гораздо более хитрый вариант вашего кода, Вы могли бы найти полезным, чтобы посмотреть на.

Первое, что я сделал, было добавить она-бац строки: #!/бла/бла/бла. В системах Unix, это используется, чтобы идентифицировать переводчика. На окнах его практически бесполезно, но Windows Перлз может обнаружить параметры командной строки, которые могут быть указаны там.

Затем я положил в некоторых под описанием программы. Моя химия знание отстой, так что я наверное облажался описание ужасно.

Затем я добавил 'жесткие' и 'предупреждения' прагмы, который делает Perl намного разборчивее о вещах, которые часто являются индикаторами ошибок.

Затем я положил в некоторые вещи, чтобы ручка печать использование сообщение, когда кто-то пишет сценарий --помочь или скрипт?. Теперь скрипт будет печатать какую-то полезную информацию.

Затем я взял кучу повторяющихся материалов (печать/грызть сбора исходных) и завернула его в подпрограммы.

Я также завернутый в расчет, но используется распространенный фразеологизм, который дает подпрограммы по имени, а не позиционные параметры. Это хорошая вещь, чтобы сделать, когда у вас есть много параметров для передачи.

Наконец, я выскользнула в подпрограмму для вывода результатов. Я использовал кое-что интересное относительно передовые технологии для форматирования выходных данных.

#!/usr/bin/perl

=head1 Name

titration

=head1 SYNOPSIS

A simple titration calculator.

Interactively requests information from the user and
calculates the molarity of a solution.

=cut

use strict;
use warnings;

use Pod::Usage;
use Getopt::Long;

# Handle command line args / help requests.
my $help;

GetOptions( 'help|?' => \$help )
or pod2usage(2);

pod2usage(0) if ($help);

# The real program. I go back and forth over having a 'main' sub like a C program.

my %raw_data = collect_user_data();

my $molarity = calculate_molarity(
ml_solvent => $raw_data{'Milliliters Solvent'},
ml_solute => $raw_data{'Milliliters Solute'},
molarity_solvent => $raw_data{'Molarity Solvent'},
moles_solvent => $raw_data{'Moles Solvent'},
moles_solute => $raw_data{'Moles Solvent'},
);

display_result( "Molarity is $molarity" );

exit;

# Subroutines ------------------------------------------

# Print an message and get a response.
sub get_user_response {
my $question = shift;

chomp $question; # Make sure we don't have any messy newlines.
print "$question: ";

my $answer = <STDIN>;
chomp $answer;

return $answer;
}

# Ask for all the user data and store them in a hash.
sub collect_user_data {

system "clear"; # Clear the Screen

my %data;

for my $unit (
'Milliliters Solute', 'Milliliters Solvent',
'Molarity Solvent',
'Moles Solute', 'Moles Solvent'
) {
$data{$unit} = get_user_response( "Please enter the $unit" );
}

system "clear"; # Clear the Screen

return %data;
}

sub display_result {

system "clear"; # Clear the Screen

# this is confusing magic that prints each argument with a trailing "\n".
# Understand this and you have learned MUCH.
print map "$_\n", @_;
}

# Do the molarity calculation
# Expects name / value pairs of arguments.
#
# Arguments must include:
# molarity_solvent
# ml_solute
# ml_solvent
# moles_solvent
# moles_solute

sub calculate_molarity {
my %arg = @_;

my $molarity = $arg{molarity_solvent}
* ( $arg{ml_solute} / $arg{ml_solvent} )
* ( $arg{moles_solvent} / $arg{moles_solute} )
;

return $molarity;
}

"Ох, спасибо, но как, черт возьми, я собираюсь понять это?" вы можете думать. Ну, perldoc-это большая помощь. Как задавать вопросы. perldoc.perl.org это отличный ресурс для поиска и чтения документации на Perl.

Проверьте perlvar статьи для получения информации о специальных переменных. Из многих существующих, четыре стоит обучение ИМО. ($_, @_, $! и $@, если вы заботитесь) для всего остального, есть perlvar.

perlfunc-это ссылка на функцию. Мой любимый раздел как новичок в Perl был функций по категории.

Не забывайте о переполнение стека, и особенно Perlmonks.org. Эти места являются прекрасным местом, чтобы обратиться за помощью. Perlmonks-великий Гранд-папа так, и таких сайтов, это десятилетие-плюс библиотеки Q и имеет много, чтобы предложить, плюс народ там очень дружелюбный и услужливый.

6
ответ дан 28 мая 2011 в 02:05 Источник Поделиться

Там не так много, но как первая программа на любом языке это выглядит нормально - разумное использование комментариев (может быть немного более многословен с ними, но это не действительно необходимо для такого короткого применения), код легко читается.

Если я предложу одно изменение было бы научиться укладывать вещи в функции, а не чисто линейном потоке кода. Это позволит сделать код более удобным для повторного использования и для более сложных программ, упростить повторное использование частей в них.

1
ответ дан 26 мая 2011 в 11:05 Источник Поделиться