Страница 1 из 1

Первая прога на Перле не пашет (( Нужен хелп

Добавлено: 2008-06-10 5:05:37
Gnix
Начал читать книгу по Перлу("Программирование на Перл - Уолл") и первый код неработает :?
Нужно сложить две оценки для каждого ученика из файла (которые размещены через пробел), посчитать общее количество(учеников) и общее количество баллов, разделить второе на первое и получить средний балл.
Файл grades, ученики тут в виде ??????:

Код: Выделить всё

???1130 23 16
???1180 19 16
???1454 19 13
???1477 0 0
???1988 25 22
???2195 19 13
???3010 19 13
???3269 0 0
???3362 19 18
???3609 0 0
???3624 23 17
???3878 22 13
???4277 19 13
???4490 30 19
???4594 19 18

Код: Выделить всё

#!/usr/bin/perl  
 
open(GRADES,"grades") or die "Error: $!\n";
while ($line=<GRADES>){
  ($student, $grade1, $grade2) = split(" ", $line);
  $grade=$grade1+$grade2;
  $grades{$student} .=$grade . " "; 
}

foreach $student (sort keys %grades){
  $scores=0;
  $total=0;
  @grades=split(" ", $grades{$student});
  foreach $grade (@grades) {
   $total+=$grade;
   $scores++;
}
$average=$total/$scores;
print "$student: $grades{$student}\tRESULTS: $averege\n";
}
результат

Код: Выделить всё

???1130: 39     RESULTS: 39
???1180: 35     RESULTS: 35
???1454: 32     RESULTS: 32
???1477: 0      RESULTS: 0
???1988: 47     RESULTS: 47
???2195: 32     RESULTS: 32
???3010: 32     RESULTS: 32
???3269: 0      RESULTS: 0
???3362: 37     RESULTS: 37
???3609: 0      RESULTS: 0
???3624: 40     RESULTS: 40
???3878: 35     RESULTS: 35
???4277: 32     RESULTS: 32
???4490: 49     RESULTS: 49
???4594: 37     RESULTS: 37
а мне нужно чтобы в RESULTS стоял средний балл от всех баллов, не понимаю в инструкциях :st: :st:

буду благодарен если кто поможет :(

Re: Первая прога на Перле не пашет (( Нужен хелп

Добавлено: 2008-06-10 7:22:26
zg
Gnix писал(а):$average=$total/$scores;
Gnix писал(а):print "$student: $grades{$student}\tRESULTS: $averege\n";

Re: Первая прога на Перле не пашет (( Нужен хелп

Добавлено: 2008-06-10 7:27:22
zg
Gnix писал(а):@grades=split(" ", $grades{$student});
не надо давать разным переменным одинаковые имена :el:

Re: Первая прога на Перле не пашет (( Нужен хелп

Добавлено: 2008-06-10 9:25:07
zg
Gnix писал(а): и первый код неработает
что-то код сложноватый для хелловорлд.

прочитай главу про работу с файлами, затем нумерованные массивы, затем ассоциативные, тогда будет понятней

Re: Первая прога на Перле не пашет (( Нужен хелп

Добавлено: 2008-06-13 5:01:28
Gnix
упростил код до такого: :smile: :fool:

Код: Выделить всё

#!/usr/bin/perl  
 
$scores=0;
$total=0;
open(GRADES,"grades") or die "File did not open: $!\n";
while ($line=<GRADES>){
  ($student, $grade1, $grade2) = split(" ", $line);
  $grade=$grade1+$grade2;
  $total+=$grade;
  $grades{$student} .=$grade . " "; 
  $scores++
  }
 
foreach $student (sort keys %grades){

 $average=$total/$scores;
 print "$student: $grades{$student}\n";
}
 print "RESULTS: $average\tUsers: $scores\n";


и получил свои средние значения ;-)

Код: Выделить всё

???1130: 39
???1180: 35
???1454: 32
???1477: 0
???1988: 47
???2195: 32
???3010: 32
???3269: 0
???3362: 37
???3609: 0
???3624: 40
???3878: 35
???4277: 32
???4490: 49
???4594: 37
RESULTS: 29.8   Users: 15

Спасибо zg

Re: Первая прога на Перле не пашет (( Нужен хелп

Добавлено: 2008-06-13 5:49:37
Gnix
А как сделать сортировку $grades{$student} по убыванию, или возрастанию ?? :unknown:

Re: Первая прога на Перле не пашет (( Нужен хелп

Добавлено: 2008-06-13 10:16:24
zg
Gnix писал(а):foreach $student (sort keys %grades){
тут и идёт сортировка, как я понял. Ну можешь мануал почитать http://perldoc.perl.org/functions/sort.html для меня это набор букв :cf:

Re: Первая прога на Перле не пашет (( Нужен хелп

Добавлено: 2008-06-13 18:30:35
ProFTP
Gnix писал(а):А как сделать сортировку $grades{$student} по убыванию

Код: Выделить всё

foreach $student (reverse sort  keys %grades){