![]() |
Okej säkert någon som kan svara snabbt på denna.
Hur kollar man ifall ett tal är heltal? Vill göra en for-sats som i varannan loop får man ett värde och i den andra får man ett annat värde.. hm. Förstår? (ska göra en tabell med varannan rad i en färg och nästa rad i en annan färg) |
Använd modulo 2.
typ 0%2 ger 0 typ 1%2 ger 1 typ 2%2 ger 0 typ 3%2 ger 1 osv... |
Citat:
else $farg="#ffffff"; [edit] jag är alltid för seg ;P [/edit] |
Citat:
<? $y='10'; echo '<table><tr>'; for($x=0;$x<$y;$x++) { $c++; $c = $c %2; if ($c=='1') { $color='#C1DBB6'; } else { $color='#A9CE9A'; } echo '<td bgcolor="'.$color.'">test test test</td>'; } echo '</tr></table>'; ?> |
Det här borde väl fungera?
if($tal == intval($tal)) echo "Heltal"; Edit: Läste inte så noga. Trodde bo82 hade gått ut lågstadiet så han visste vad heltal är förnågot =). Aja, modulo 2 är vägen att gå. |
$color = ($color=='#fff') ? '#aaa' : '#fff';
Svårare än så behöver det inte vara. |
Kod:
<? |
Citat:
Enkelt, och gör exakt det den ska göra utan svårigheter. |
Citat:
Kan förkortas: Kod:
<? $c = (fmod($x,2)) ? "black" : "white"; ?> |
Nej jonas, din kod gör inte samma sak som grazzy eftersom du måste räkna upp X någonstans... :P
|
Citat:
Jag håller med om att grazzys lösning följer KISS bäst, men räkna upp x gör han ändå i sin for. |
varför använder de flesta modulo? Det är ju endast intressant om man använder en slags radräkning annars:
mindre beräkningar att bara negera det föregående värdet på variabeln med initialt värde på 0 eller. Detta skapar en serie med 0 och 1 omväxlande. Använd sedan värdet på variabeln som villkor till if-satsen. Grazzys lösning funkar bra, den var snygg tycker jag. |
Citat:
använder vi den? vill vi ha fler än 2 olika färger? gör grazzys förslag att vi behöver komplitera med ytterligare variabler för att hålla $farg oanvänd längre ned i vår for-sats? tycker vi att modulo är häfigt? :rolleyes: |
Sorry anders att jag inte var med på att X var räknaren i for-loopen (de flesta använder väl i,j,k osv för räknare i for-satser) och/eller att det gällde en ändring av nomicons kod (som ju är ganska pratig). Men jag är inte ledsen för att jag med glimten i ögat gjorde en över-petig kommentar. :P En kommentar som förövrigt antagligen är på sin plats eftersom någon som läser denna tråd kommer testa just bara raden "$c = (fmod($x,2)) ? "black" : "white";" och sedan fråga varför det inte funkar... Det kommer väl ske både med och utan min kommentar iofs...
Nu fortsätter jag med mina petkommentarer; Jimmie: Läs ditt inlägg igen. "negera det föregående värdet med initialt värde på 0" eftersom -0 = 0 ger detta en talserie på 0,0,0,0,0,0... Grazzys funkar för att växla mellan två saker, men så snart det blir mer är ju en variante med ngn form av räknare enklare att underhålla i längden... Och jag antar att man använder modulo just för att man har en räknare (t.ex. ett index för att användas med mysql_result motsv) och då är en separat räknare onödigt, fult och sannolikt i längden otydligt. Bättre då att köra modulo på räknaren. |
Citat:
Jag gör så här, dock använder jag inte färger utan använder class på tr istället : $i = 0; while(nått villkor) { if($i) { $color = 'färg1'; } else { $color = 'färg2'; } .... $i = !$i; } Negera betyder att man gör NOT, dvs negera en nolla ger 1, så det så :P |
Citat:
Hade du skrivit "negera variabeln och börja med att sätta värdet som false" hade jag förstått direkt vad du menade. "tal serien" du är ute efter är ju false, true, false... Inte 0,1,0. Noll och ett är inte samma sak som false och true. noll tolkas (i gammal god C-anda) som false om ett boolskt värde förväntas och false tolkas som noll om ett tal förväntas. Det betyder inte att de är samma sak. |
Citat:
Dessutom betyder inte ordet negera något annorlunda om du gör det på t.ex. 7, !(7) = 0. Negera har inget med att ändra tecken på ett tal att göra. I riktiga tillämpningar där man använder faktisk hårdvara är 0 och 1 direkt synonymt med true och false, titta bara på en processor hur den behandlar true och false, tvivlar på att den skriver true och false med ascii-tecken i processorn medans den arbetar ;) Jag kan väl också säga att jag kanske skulle ha varit tydligare att jag menade boolskt värde men jag är så van med att arbeta med 1:or och 0:or att jag inte tänkte på det. Peace :P |
Hahaha, dagen har alltså kommit när jag skall bli uppläxad i hur en dator fungerar internt. Du kan bespara dig den tiden.
Att du väljer att arbeta med "ettor och nollor" (antar att du syftar på detta istf true/false) och inte true/false säger en hel del om dig som programmerare. Jag tänker undvika fadäsen att läxa upp dig i saker du redan kan. Det är inte häftigt att vara otydlig eller att strunta i en abstraktion när man programmerar. Vilken av följande rader tycker du själv ger dig mest information om variabeln och dess värde? Kod:
$a=0; |
Citat:
http://se2.php.net/manual/en/types.comparisons.php Och ja, jag borde nog använda true och false för att vara extra tydlig men av vana blev det 0 och 1 istället. Abstraktion är aldrig fel, men om vi tittar på lite andra förslag så är mitt exempel bra mer abstrakt. Du säger men att jag skulle tro att det är coolt att skriva 0 och 1 istället för false och true är väl lite att ta i :P Och nej, jag försöker inte läxa upp dig i hur en dator fungerar internt, jag är säker på att du är fullt medveten om det. Det verkar i alla fall troligt att du vet det med tanke på den höga nivån du ofta har på dina inlägg här på forumet. |
hehe, ja att det ger samma resultat har jag aldrig påstått... Det här spårade ur i en diskussion om otydligheten i det du skrev som i första hand (för mig) triggades av kontextet där alla andra använde räknare och du växlade över till boolska värden och på den vägen är det.
Och ja, din kodsnutt jimmie är definitivt inte den värsta. Jag vart mörkrädd av bl.a. nomicrons exempel och valde med flit att inte kommentera det från början eftersom jag misstänker att jag skulle prata för döva öron. Nomicrons exempel har riktiga skräckexempel där han använder strängar rakt igenom fast flera av variablerna är tal. $y='10' är inte samma sak som $y=10 även om många verkar tro det... För att inte tala om ursprungsfrågan... Det är ju uppenbart att det han frågar efter är ju en "modulo 2" alt. "boolsk negera" lösning (eller grazzys "hackerlösning" för den ser hackig ut). Och vad har det med frågan "Hur kollar man ifall ett tal är heltal?" jag ryser när det jag ser framför mig är en loop som ser ut som: for ($i=0; $i<4711; $i+=0.5) Det skulle minst sagt vara en intressant (och kreativ) lösning på ett inte helt ovanligt programmeringsproblem... En sak som vi måste ta upp för att få ett avslut i vår diskussion jimmie; vad kallar du följande operation; a = -a; Är inte även det att negera a? |
eg0master:
Att min kod är ett skräckexempel struntar jag i, jag är ingen kodare, utan en vänlig själ som svarade på hans fråga :) Han ville helt enkelt ha ett kodexempel, vilket mitt svar löste. Sedan om mitt svar inte var ett snyggt exempel hör isåfall till en helt annan tråd. Jag tar inte åt mig om folk tycker att jag kodar som en enarmad gorilla med grönstarr, hade han frågat efter ett snyggt exempel så hade jag inte svarat ö.h.t :) -Martin |
Citat:
I de sammanhang som jag har hört ordet negera så har det alltid handlat om logik(liggande hockeyklubba ;) ), i matematiken så har jag i alla fall inte använt ordet negera för att beskriva framtagandet av talets motsvarighet med omvänt tecken. Men, man lär sig något nytt varje dag och det är mycket möjligt att jag har fel och att negera används inom matematiken för att beteckna talet med omvänt tecken. |
Hey tack för alla svar :)
Det blev $color = ($color=='#fff') ? '#aaa' : '#fff'; och funkar perfekt ;) |
Var rädd att bo82 skulle bli skrämd av de enormt många och långa svaren på hans korta och simpla fråga att han aldrig skulle röra PHP igen =)
|
Citat:
|
Citat:
En moderator får väl splitta det här, men det är en intressant tråd i sin helhet. Nu åter till Jimmie... :P min tolkning av negera i matematik sammanhang är: Negera, verb för att göra negativt (inte att förväxla med absolut värdet), dvs multiplicera med -1. Således är det fullt möjligt att "negera" noll eftersom 0*(-1)=0. Men jag ska göra en liten undersökning kring vad mina vänner och kollegor skulle kalla det när man gör a = -a... To be continued... |
Citat:
Skulle vara kul om nån berättade exakt vad Kod:
$color = ($color=='#fff') ? '#aaa' : '#fff'; |
Det är en kortform av en if-sats
(villkor) ? om sant : om falskt; |
Tertiary expression kallas det för. Syntaxen är
return_value expr(true_expr, false_expr); Tänk dig att expr är ett uttryck som skall värderas. Det kan värderas till sant eller falskt. Beroende på det värdet så utförs antingen true_expr eller false_expr. Det värde som true_expr eller false_expr blir returnas som värdet av operationen. Sedan är det en omskrivning som gör att syntaxen är $return_value = expr ? true_expr : false_expr; istället för som ett funktionsanrop. |
tack jimmie o grazzy.
btw deltag gärna i min omröstning :) (testar lite) http://www.recycledbytes.net/poll/ |
Matematikenkäten pågår:
Så, jag har mailat och frågat ett tiotal av mina bekanta. En salig blandning av system- och datavetare, civilingenjörer i data, matematiker, fysiker och biokemister. Alla minst examen, en handfull doktorander och ett par färdiga doktorer. Frågan jag ställde var denna: Citat:
Datavetare (3st): Operationen kallas negera/negation Matematiker (1st): Operationen kallas invertera Eftersom jag själv tillhör kategorin datavetare (ej inräknad i resultatet ovan) så verkar det finnas en klar begreppsförvirring. Men jag har ställt följdfrågor till matematikern för att se vad han har för tolkning av ordet "negera". Så denna nagelbitare fortsätter... :P |
Citat:
|
Citat:
Citat:
|
Citat:
Tycker det är lite väl mycket filosofiska funderingar nu, min tekniskt inriktade hjärna får lite spel när man försöker resonera filsofiskt. Det borde vara antingen A eller B ;) Jag tycker att vi kan säga att när man negerar 7 får man -7. Tittar man på tallinjen kan man faktiskt försvara användandet då -7 är lika mycket från 0 som 7 fast åt andra hållet, dvs en MOTsats :) |
Jag kan väl också säga att jag nu använder variabeln $odd_row samt rena logiska värden. :) Givetvis bör man vara så abstrakt som möjligt för att skapa en läsbar kod.
|
Citat:
|
Alla tider är GMT +2. Klockan är nu 22:11. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson