C++, Delphi, JAVA és egyéb programnyelvek

Started by ignus, 2007-06-05, 15:03:45

Previous topic - Next topic

Kuroi Tenshi

#240
Adott egy rakás kép, book.gif - book (1).gif ~ book (268).gif
nevekkel, amiből már gondolom sejtitek is, hogy mi lesz a
probléma: a képnéző programok book - book1 - book10 -
book100 - book101 sorrendben nyitják meg. Próbálok
összerakni egy batch file-t, amivel a book (?).gif fájlokat
book (00?).gif-fé, book (??).gif-eket pedig book (0??).gif-fé
tudom átnevezni, elvileg egyszerű lenne 1 for és 2 if
ciklussal, de miután egy fél órája bújom a cmd.exe
tutorialokat, azután sem akar a szintaxis összeállni; meg
hát sosem tanítottak programozni, attól félek, hogy valamit
jól elszúrok benne.
Valaki ki tudna segíteni?

Szerk: nevermind, irfanview batch rename-mel egyszerűbb
volt végül megoldani, mint a szintaxist megtanulni.

kikuchiyo

Akartam mondani, hogy a batch semmire se jó, csak szívnál vele (még a legegyszerűbb dolgokat is csak nagyon nehézkesen lehet megcsinálni benne), és többre mennél valami átnevező eszközzel, én a Total Commander multi-rename toolját ajánlottam volna. Dehát rájöttél te is.

Különben ha lenne perled :), akkor íme egy pazarló, szájbarágós megoldás:
#!/usr/bin/perl
use strict;
use warnings;

my $fn = $ARGV[0] || "book";
my $ext = $ARGV[1] || "gif";
my $op = " (";
my $cp = ").";
my @files = glob($fn.$op."*".$cp.$ext);

my $padding = $ARGV[2] || int(log(@files)/log(10) + 1);

foreach my $file (sort @files) {
my ($num) = $file =~ /$fn$op(\d*)$cp$ext/;
my $newname = $fn.$op.sprintf("%0".$padding."d", $num).$cp.$ext;
print "$file, $newname\n";
rename $file, $newname;
}
rename $fn.'.'.$ext, $fn.$op.sprintf("%0".$padding."d", 0).$cp.$ext if -e $fn.'.'.$ext;
Failure is the default option

Kuroi Tenshi

Quote from: kikuchiyo on 2009-08-26, 14:33:22
Akartam mondani, hogy a batch semmire se jó, csak szívnál vele (még a legegyszerűbb dolgokat is csak nagyon nehézkesen lehet megcsinálni benne), és többre mennél valami átnevező eszközzel,

, de abból legalább többet tanultam volna, mint f1, olvas,
klikk-klikk-klikk :)

Perl pedig linux-partíción biztos van, csak szinte sosem használom :D
Mindenesetre kösz, nagyjából értem/ki tudom következtetni, hogy
mit írtál, de ezt saját magam nem tudtam volna összehozni a
tutorialok alapján. (Kicsit másképp is csináltam volna, opcionális
padding helyett fájlnév-hossz alapján egy if-fel kétfelé ágaztatva)

kikuchiyo

Tanácskérés következik.

Akarok írni egy interaktív prezentáció-megjelenítőt. Ennek apropóját az adja, hogy megint tartanom kell a munkahelyen előadásokat, és emiatt elgondolkodtam egy kicsit, hogy hogyan akarom csinálni. Az interneten keresgélve ráakadtam a Takahashi-módszerre, aminek a lényege, hogy egy slide-on csak nagyon kevés szöveget használ, szinte csak egy-két szót, de azt hatalmas betűkkel (így persze sokkal több slide van, amik egyenként csak pár másodpercig jelennek meg). Ezt az elvet persze többen is felfedezték, így más neveken is ismert (stfg Dick Hardt, Lessig-method). Az eredeti módszer képeket nem is használ, nekem viszont tudományos jellegű előadásokhoz kell, így ábrákat és képleteket is használni akarok. Ezt a latex-beamer segítségével elég jól meg lehet csinálni.

Azonban visszaemlékezve az egyetemi előadásokra, világos, hogy a tanárokat két csoportba lehetett osztani: azokra, akik használtak PowerPointos/írásvetítős diákat, és azokra, akik nem. Ez a felosztás elég jól korrelált a nem jó tanár/jó tanár kategóriákkal. Az az elméletem, hogy azért voltak jobbak azok az előadások, ahol nem volt vetítés és a tanár maga rajzolta/írta fel az anyagot a táblára, mert ezzel kétségtelenné tette, hogy tökéletesen érti, amit elmond, és tiszteletet vívott ki azzal, hogy erőfeszítést tesz a levezetéssel; továbbá egy lépésről lépésre felrajzolt ábra is előnyösebb didaktikai szempontból, mintha egyszerre megjelenne egy PPT dián magyarázattal együtt.

Én ötvözni szeretném a két megoldás előnyeit. Azaz a prezentáció szöveges része előre lenne definiálva, de lehetne rajzolni, a már megjelenített elemeket áthelyezni stb.

Nem találtam olyan rendszert, ami ezt készen tudná, ezért akarom én megírni. A kérdés, hogy miben.
Perl/Gtk2-ben van annyi tapasztalatom, hogy aránylag gyorsan össze tudnám ütni, csak az a baj, hogy olyan rendszer kéne, ami mindenhol elfut, bonyodalmas telepítgetés nélkül. Tehát valamilyen böngészőalapú megoldás jöhet szóba. Java applet? Az olyan ódivatú. Javascript + HTML canvas? Modern és elegáns megoldás lenne, de pl. Exploderben nem is működik? Vagy hagyjam a fenébe, kicsi vagyok én ehhez?
Failure is the default option

Solid Snake

Tanácskérés következik (egy egyszerűbb problémára).

Idei félévem egyik tárgya a Számítógépi grafika, ahol az aláírásért beadandót kell csinálni, ami egy 3D-s térben mozgatható animáció elkészítése C v. C++ alappal, OpenGL könyvtárakkal. Ti milyen fejlesztőkörnyezetet tudtok ajánlani? Visual C++ jár eddig főként a fejemben, de bármilyen alternatív tapasztalatot szívesen meghallgatok és megköszönök.  :smile:

Theon

Én anno Dev-C++-szal próbálkoztam, bár azt egy picit körülményes volt belőni (nem látta az OpenGL könyvtárakat). Aztán áttértem Visual Studio 2005-re, ami működött jól, de 50MB helyett pár gigát foglalt (csak C++ fejlesztői eszközökkel), meg egyébként is egy szörnyeteg. Ha nagymenő vagy C++-ban, akkor ajánlom a Notepad++-t, kis munkával egy majd' teljesértékű fejlesztőkörnyezetté varázsolható, és ugyan ki nem szereti? :D
"Chaos is the score upon which reality is written."
"I don't need a scabbard to sheath my mind."
"One foot in the grave and the other in hell."

Member

Vki adna egy kis C++ kódot, amiben megadod a virágszirmok számát és végül kidobja, hogy szeret vagy nem szeret? Egy ökörséghez kellene. :)
(Basic-ben meg tudnám csinálni, nade 2009-ben? :))

Darkstar

Most nem tudok kódot írni, de sztem egy sima x mod 2 vel meg tudod oldani, és attól függően sz/nsz, hogy melyikről indulsz.
小野寺梓のラブリーすきぴちゃん

Member

Csak a programsor kell, nem maga a progi. ;)

kikuchiyo

részletesebb specifikáció híján:

cout << (number & 1 ? "szeret" : "nem szeret") << endl;

Lehet, hogy nem jó...
Failure is the default option

Member


Xzone

Quote from: kikuchiyo on 2009-11-25, 13:48:24
részletesebb specifikáció híján:

cout << (number & 1 ? "szeret" : "nem szeret") << endl;

Lehet, hogy nem jó...

És milyen elegáns :)

motifator

Quote from: Xzone on 2009-11-25, 15:19:31
Quote from: kikuchiyo on 2009-11-25, 13:48:24
részletesebb specifikáció híján:

cout << (number & 1 ? "szeret" : "nem szeret") << endl;

Lehet, hogy nem jó...

És milyen elegáns :)
:tezsvir:
Nothing amazing happens here, and you get used to that: used to a world where everything is ordinary.
Every day we spend here is like a whole lifetime of dying slowly.

Darkstar

小野寺梓のラブリーすきぴちゃん

kikuchiyo

Inspired moments in programming, today's edition

Néha órákat eltölt az ember egy megmagyarázhatatlannak látszó hibával, aminek elvileg nem is szabadna előfordulnia, de mégis előforul. Ma pl. egy vacak plottoló programot hegesztettem, és nem értettem, hogy ha egy második fájlt töltök be, akkor miért nem törli le az ablak tartalmát, és miért fűzi hozzá a második fájlban lévő adatokat az elsőhöz. Hatszor átnéztem és átírtam a plottoló függvényt, áttúrtam a toolkit doksiját... aztán végül rájöttem, hogy amikor beolvasom a fájlt, akkor elfelejtettem kinullázni a tömböt, ami a pontokat tárolja.

Kikuchiyo::Facepalm->new('fail_level' => 9001);
Failure is the default option

Próféta


kikuchiyo

Mára elegem van... tanulság, hogy nálam bölcsebbek tényleg nem viccből mondták, hogy "don't reinvent the wheel".
Napokat szopok olyannal, amit igazából tízféleképpen meg lehetne egyszerűbben csinálni.
Shit.get_instance(this).fuck();
Failure is the default option

Nakedape

Quotefor (int i = 0; i < vEgyedek.size(); ++i)
        {
                                double         RCurr = 0;
                             int        iRang = -1;
                              do
                              {    iRang= iRang +1;
                               RCurr = RCurr + 0.1;
                                }
                            while (RCurr <= vEgyedek.rang);
                            vRangsor[iRang].rnum +=1;
                            
       }
miért is nem tanultam meg inkább a növények latin nevét...
azaz
a fent látható programkód
arra szolgálna hogy van egy vektor egyedek, amelynek a rang helyén 0 és 1 közti érték van
és ezeket sorolnám 10 kategóriába 0-0,1 0,1-0,2 ...0,9-1
namármost
az a baj, hogy <= helyett, simán < ként rakosgatja nekem, ami csak azért gond mert az egy értékűeket nem rakja be sehova.
Quotetényleges      programból
0,1   26                 26
0,2   4                  4
0,3   5                  5
0,4   8                  8
0,5   7                  7
0,6   8                  8
0,7   9                  9
0,8   13                13
0,9   5                  5
1   15                  2
summa   100      
pont1   13
hol vagyok f*szláma? ötletek, vagy alapvetően más egyszerű megoldások?
Nothing About Culture Makes Sense Except in the Light of Evolution

Xzone

A hátultesztelő ciklusod áll le túl hamar szerintem, és 1-re már nem fut le.

kikuchiyo

Olyan nem lenne egyszerűbb ciklusozás helyett, hogy


for (int i = 0; i < vEgyedek.size(); ++i) {
    double rang = vEgyedek[i].rang;
    int bracket = int(rang * 10);   // egész rész
    vRangsor[bracket].mum += 1;
}


Egy sorba is beleférne, csak így világosabb talán.

Már ha nem értem félre, hogy mit akarsz.
Failure is the default option

Próféta

Nakedape, azt döntsd el, hogy a hátéresetek (0.1, 0.2, 0.3, stb.) az alattuk vagy felettük lévő skatulyába kerüljenek? A program amit te meg kiku összeraktatok, első ránézésre a felettük levőbe rakja őket. Ez egyúttal azt jelenti, hogy 1.0 a tizenegyedik skatulyába kerül, tehát el ne feledd azt is kiíratni.

Nakedape

Quote from: Próféta on 2010-02-12, 21:15:56
Nakedape, azt döntsd el, hogy a hátéresetek (0.1, 0.2, 0.3, stb.) az alattuk vagy felettük lévő skatulyába kerüljenek? A program amit te meg kiku összeraktatok, első ránézésre a felettük levőbe rakja őket. Ez egyúttal azt jelenti, hogy 1.0 a tizenegyedik skatulyába kerül, tehát el ne feledd azt is kiíratni.
na pont jól láttad, a problémát, emiatt maradhatott ki az  utolsó határeset kategória (az egy), de kiku sora akkor is facepalm volt, mármint egészrészezni jobb, mint ciklusozni, tán át is tudom alakítani, nem rondán, hogy az egy is beférjen (ha mind az alatt levőbe meggy, akkor meg a pont nullával szívok), if/ else -n gondolkodom,  de tuti van elegánsabb

merci mindeknek
Nothing About Culture Makes Sense Except in the Light of Evolution

kikuchiyo

#262
int bracket = int(rang * 10)
helyett
int bracket = int(rang * 9.99) ? :D

BTW egybepakolva, "ki írta ezt a szart?" változat
for (int i = 0; i < vEgyedek.size(); vRangsor[ int(vEgyedek[i++].rang * 9.99) ].mum += 1);

szerk:
lehet külön is korrigálni az 1.0 esetre:


for (int i = 0; i < vEgyedek.size(); ++i) {
    double rang = vEgyedek[i].rang;
    int bracket = int(rang * 10);   // egész rész
    if (bracket == 10)
        bracket--;  // rang == 1.0 eset különvéve
    vRangsor[bracket].mum += 1;
}
Failure is the default option

Nakedape

 :D :D
én is ilyen szorzásosan néztem mű majdnem,
de köszi a kódot, a többsoros szép és már reprodukáltam is vele az eddigi állapotot, szorzás helyet meg belerakom az if elset és hagyjanak lógva:D
Nothing About Culture Makes Sense Except in the Light of Evolution

kikuchiyo

Éppen gnuplotot hackelek, ami ugye jó öreg C-ben van írva. A set-show beállítások mindenféle .h-kba szétszórt enumokkal és globális változókkal valamint kilométeres switch-case szerkezetekkel vannak megoldva.

Asszem kezdem érteni az objektum-orientált programozás előnyös voltát. :(
Failure is the default option

TurboK

PHPben, ha csinálok ilyet hogy:
$list = $_GET["list"] ? $_GET["list"] : "1";

akkor a url.php&list=0 -re a $list értéke miért marad 1? Bármely más értékre megváltozik.

Jó lovag, velünk tartasz-e Camelotba a kerekasztal lovagjai közé?

http://www.saunalahti.fi/cse/foobar2000.php target=_blank>http://web.axelero.hu/fka2636/dwnld_fb2k.png>

kikuchiyo

A ?: operátor nem pont ezt csinálja?

Boolean érték ? ha igaz : ha hamis

ha a $_GET["list"] 0, annak a boolean értéke hamis (felteszem, mert nem értek a PHP-hoz, de Perlben így van). Ezért $list 1 lesz. Ha nem nulla, akkor pedig $list megkapja az értékét.
Failure is the default option

TurboK

Lehet hogy az is bekavar, nem tudom, de ettől függetlenül a $_GET a nullát semminek értelmezi:
http://adriancallaghan.co.uk/zero-tolerance-for-zero-in-php/

Megoldottam úgy hogy átirtam a linkeket "url.php&list=00"-ra, úgy működik. Ezzel szoptam 2-3 órát... Röhej...

Jó lovag, velünk tartasz-e Camelotba a kerekasztal lovagjai közé?

http://www.saunalahti.fi/cse/foobar2000.php target=_blank>http://web.axelero.hu/fka2636/dwnld_fb2k.png>

Próféta


motifator

Quote from: Próféta on 2010-03-22, 23:17:56
Quote from: TurboK on 2010-03-22, 01:16:38
Röhej...
Ezt hívják PHP-nek.
Ugyan, ugyan, ne röhögjük már ki, csak mert nem tiszta a dolog :)
TurboK példájában a ? : ternáris operátor első operandusa ($_GET["list"]) akkor értékelődik ki igaznak, ha van neki értéke (nem üres), és az az érték nem logikai false vagy 0 szám (sztring).
Ezek után egyértelmű, hogy ?list=0 query paraméterekkel ez a kifejezés hamis lesz, a ternáris operátor harmadik operandusa fog kiértékelődni, ami "1", ergo a $list értéke "1" lesz. Minden más esetben a $list értéke $_GET["list"] lesz.

Szerintem TurboK valami olyasmit akart, hogy ha nincs megadva list nevű query paraméter, akkor a $list értéke 1 legyen, különben a query paraméter értéke. Ez így nézett volna ki helyesen:
$list = empty($_GET["list"]) ? "1" : $_GET["list"];
Így az explicit megadott ?list=0 értékre is azt csinálja, amit kell.
Nothing amazing happens here, and you get used to that: used to a world where everything is ordinary.
Every day we spend here is like a whole lifetime of dying slowly.