Hol vannak hibák a linken található feladatra készített megoldásban?
#!/usr/bin/perl -w
use strict;
sub LoadData {
open (CSV, "termek.csv")
or die "nem található a fájl";
my @sorok;
my $i=0;
my $j=0;
while (<CSV>){
chomp;
my @sor = split /;/;
if (defined $sor[1]){
@sor = split /;/ ,$sor[1];
my @arak = split /;/,$sor[3];
if(defined $sor[0]){
$sorok [$i][0]=$sor[2];
$sorok[$i][1]=$arak[0];
$sorok [$i][2]=$sor[1];}
$i++}
}
return @sorok;
}
sub Listdata {
my @adat=@_;
my %lista;
my $i=0;
foreach(@adat){
my $kulcs = $adat[$i][0];
if (exists $lista{$kulcs}){
$lista{$kulcs}[0] += $adat[$i][1];
$lista{kulcs}[1] += 1;
}
else
$lista{$kulcs} = = ['0','0' ];
$lista{$kulcs} [0] += $adat[$i][1];
$lista{$kulcs}{1} += 1;
}
$i++
}
foreach my $kulcs(keys %lista){
$lista{$kulcs}[0] = $lista{$kulcs} [0]/
$lista{$kulcs}[1];
delete $lista{$kulcs} [1];
}
print '
Termékek átlag szerinti sorrendje:
<!DOCTYPE XHTML>
<html>
<head>
</head>
<body>
<table border=1>
<tr>
<td>Termék</td> <td>Átlagos eladási ár</td>
<tr>'."\n";
foreach my $kulcs (sort {$lista{$a}[0] <=>
$lista{$b}[0]} keys %lista){
printf ("\t<tr>\n\t\t<td align='center'>
%s</td><td align='right'>%.2f</td>\n\t</tr>\n",
$kulcs,$lista{$kulcs}[0]);
}
print "</table>\n</body>\n</html>\n";
}
sub MaxMonth {
my @adat=@_;
my %lista;
my $i=0;
my $ho;
my @honap;
foreach(@adat){
my $kulcs = $adat{$i]{0];
$ho=$adat[$i][2];
@ho = split /\./,$adat[$i][2];
if ($honapos[1] <= 12){
$ho} = 1;}
$lista{$kulcs}{$ho} +=1;
$i++;
}
printf ("\nEredmény\n");
foreach my $kulcs (keys %lista){
my ($max);
my @sort;
$sort[0][0] =$lista{$kulcs}{1};$sort[0][1]=1;
my @sorted = sort { $a->[0] <=> $b->[0] @sort;
$max =$sorted[0][1];
printf ("$kulcs,$max");
}
}
my @adatok=&LoadData;
&ListData(@adatok);
&MaxMounth(@adatok);
Figyyu, ez így nem fog menni.
1. Tedd fel valami rendes kód megosztó oldalra a scripted.
2. Vedd a fáradtságot, hogy legalább leírd a feladatot, és ne egy bemozdult mobilos képet likelj.
3. Ha nem úgy működik a scripted, mint ahogy kellene, írd le, hogy hol akad le, hogy kapsz más eredményt, mint ahogy várod, illetve, ha van, mi a hibaüzenet.
1. Használj valami kódmegosztót a forráskódod közlésére.
A fényképre meg engedj rá automatikus fehéregyensúlyt (az ingyenes Gimpben is van ilyen).
2. Az előző kérdésedben ( http://www.gyakorikerdesek.hu/szamitastechnika__programozas_.. ) leírtuk, hogyan olvass be, és bonts részekre egy állományt - te megint nem úgy csinálod, ahogy azt javasoltuk.
A szétbontott részekből az 1. (dátum és idő - a 3. feladathoz), a 2. (terméknév) és 3. (ár) oszlop kell.
3. A ListData nevú függvényben a tömbből a termékneveket és árakat felhasználva készíts egy hash-t, ahol a kulcs a terméknév, az érték meg egy két elemű tömb: az első tömbelem az adott termék árának összessége a másik meg a adott termék száma.
4. Az XHTML dokumentum így kezdődik:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " [link]
<html xmlns=" [link]
A <head>-ből hiányzik a dokumentum címe:
<title>Átlagárak</title>
A táblázat kialakítására/formázására előző kérdésedben már mutattam példát:
5. A Maxmonth függvénynél a Loaddata által adott tömbből a terméknevet és a dátumot használd fel. A dátumot bontsd szét a .-tok mentén - ebből a második (a hónap) kell.
Készíts egy hash-t, ahol a kulcs a terméknév, az érték egy 12 elemű, egydimenziós, kezdetben csak nullákat tartalmazó tömb (a hónapok).
Ha az adott termékhez találsz egy hónapot, akkor annak a hónapnak az értékét megnöveled eggyel.
Tehát tegyük fel, hogy kezdetben van egy ilyened:
$monthstat('Eper') = (0,0,0,0,0,0,0,0,0,0,0,0)
és a bemeneti tömbben van egy ilyened:
('2004. 01.17 13:19','Eper',5997.35 )
akkor ugye az első oszlopból kibányászott hónap a 01, vagyis az eredmény:
$monthstat('Eper') = (1,0,0,0,0,0,0,0,0,0,0,0)
Majd a végén minden egyes terméknél végzel a tömbbön egy maximumkeresést.
@4: Hozzáfűzök a válaszodhoz egy apróságot, ami megmutatja, hogy miért szeretem annyira a perl-t:
"$monthstat('Eper') = (0,0,0,0,0,0,0,0,0,0,0,0) "
Nagyon jó a perl-ben, hogy nem kell előre definiálni a változókat, simán létre lehet hozni elsőre egy sor 12. elemét, anélkül, hogy a többivel törődni kellene. Sőt, összetett változók esetén sem kell azzal babrálni, hogy a komponenseket típusait definiálnánk. Ezen a példán:
"2004. 05.17 13:19;Eper;5997.35"
perl -MData::Dumper -e '$item = "Eper"; $month=5;
%hash = (); $hash{$item}->[$month] ++; print Dumper %hash;'
A létrehozott hash Eper kulcsához tartozó érték automatikusan egy sor referencia, aminek az 5 eleme 1. A 0 -> 4 elem is létre lett hozva automatikusan 'undef' értékkel. Szép. Ez egy olyan feature, ami rettenetesen hatékonnyá teszi Perl-t, persze sok, magukat komolynak tartó programozók pont ezért, a szerintük hanyagság miatt utálják.
Python-ban egy kis tesztet kell írni, hogy létre lett-e már hozva az Eper kulcs, mert, ha nem initializálni kell a 12db nullával. :D
(Aztán gondolom annyi lesz a komplikáció a feladatban, hogy fel kell készülni arra, hogy több hónapban is lehet maximális számú vásárlás)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!