Kontrollera delbarhet
Hej. Jag har kört fast på min senaste programmeringsuppgift då mina mattekunskaper inte är vad de borde vara.
jag ska skriva psuedokod och ett aktivetsdiagram för en algoritm som ska kontrollera om tal1 är jämt och delbart med tal2.
Jag förstår inte hur jag ska skriva ut själva formeln som kontrollerar delbarheten. Är det någon som kan sprida lite ljus?
vänliga hälsningar
anna
Hur vet vi om ett tal är jämnt?
Hur skulle du göra om jag frågade om 1275 är delbart med 7?
Laguna skrev:Hur skulle du göra om jag frågade om 1275 är delbart med 7?
Hmm jag hade delat 1275 med 7. eftersom det blir decimaler är det ej delbart.
Dracaena skrev:Hur vet vi om ett tal är jämnt?
Det behöver bli ett tal utan decimaler.. tror jag? Men som sagt - jag har börjat i fel ände; med programmering före matte 1. Så jag kanske tänker helt fel?
ettpyre skrev:Laguna skrev:Hur skulle du göra om jag frågade om 1275 är delbart med 7?
Hmm jag hade delat 1275 med 7. eftersom det blir decimaler är det ej delbart.
Mm, ja. Hur kan du i ett program avgöra om det finns decimaler?
Vi har alltså gjort
int x = 1275;
int y = 7;
double q = x/y;
Laguna skrev:ettpyre skrev:Laguna skrev:Hur skulle du göra om jag frågade om 1275 är delbart med 7?
Hmm jag hade delat 1275 med 7. eftersom det blir decimaler är det ej delbart.
Mm, ja. Hur kan du i ett program avgöra om det finns decimaler?
Vi har alltså gjort
int x = 1275;
int y = 7;
double q = x/y;
Hmm det där får jag fundera på en stund. Tack för att jag får tänka efter själv. Jag återkommer om en stund! 😃
Jag tror i alla fall att vi har gjort q = x/y. Men den operationen kanske trunkerar så det aldrig blir decimaler. I så fall får vi låta x och y vara double också.
Kan jag på något sätt skriva att if Q=x,00000 så ska det räknas som delbart. Om inte, icke delbart?
en annan tanke är att lägga på 0.5 på q, och kontrollera så, på något sätt? Hm
ja, x och y måste vara double tydligen (provade precis)
Det finns ett område inom matematiken som kallas modulär aritmetik och det har du säkert inte hört talas om och behöver egentligen inte bry dig om än men en funktion inom det området kallas modulus och den funktionen finns i alla programmeringsspråk (jag känner till). Funktionen innebär att du har två tal som divideras och modulus innebär resten vid den divisionen. I java heter operatorn % så a%b=rest och om a och b är heltal så blir resten 0 om a är jämt delbar med b som ni kommit fram till ovan.
Modulusoperatorn används i många sammanhang när man bygger system så den är bra att ha i sin verktygslåda.
Hör av dig om du inte får till det.
Nu var jag för snabb igen och inser efter lite tid att uppgiften gäller att göra en egen modulus-funktion.
Du har två tal tal1, tal2 och du ska skriva en algoritm som avgör om tal1 är jämnt delbart med tal2. Som ni kommit fram till ovan så kan du dividera och kontrollera om du får ett decimalvärde. Då måste du ta hänsyn till att 0 för flyttal i en dator inte är exakt 0 eftersom alla tal representeras av ett binärvärde. Så du kan plocka ut decimaldelen av divisionen och jämföra med ett tillräckligt litet värde och anse det vara 0. Hur litet beror på vilken datorarkitektur du har men i en vanlig pc så gissar jag att allt under 0.000001 är att betrakta som 0 i det här sammanhanget.
Ett alternativ är att dra bort tal2 från tal1 så länge som något finns kvar och om det som finns kvar = tal2 så går det jämnt upp. Samma sak här, tal1 == tal2 fungerar inte nödvändigtvis om det är flyttal. Jag skulle använda abs(tal1-tal2) > 0.00001 eller något sånt
Hoppas det leder dig nånvart, annars hör du av dig
Man kan göra en egen effektiv modulo-funktion med heltalsoperationer.
Att använda flyttal är en liten omväg, men går också.
Tack så mycket till er båda för er hjälp! Ska läsa igenom era svar ordentligt imorgon! Är alltför trött nu tyvärr. Tack igen!
Var fick ni att man inte får använda mod eller % i Java?
Ur uppgiften "jag ska skriva psuedokod och ett aktivetsdiagram för en algoritm som ska kontrollera om tal1 är jämt och delbart med tal2."
Det tolkar jag som en övning i att skriva algoritmer, inte att använda algoritmer som någon annan har skrivit. Men jag lämnar det valet till trådskaparen. Båda alternativen är väl beskrivna.
Hm, jag förstår hur du tänker CurtJ.
Med tanke på TS inlägg så känns det inte som att detta är en så pass hög nivå att TS ska implementera sin egna modulus funktion. Det låter för mig mer som att TS ska skapa ett program som kan kontrollera om talet är jämnt och delas av ett specificerat tal. Därefter skall hen göra ett aktivitetsdiagram. Jag kan dock ha fel så klart.
Iofs så kan man göra implementationen i #11 med endast en while loop och subtraktion.
@ettpyre, vad är det för nivå du läser programmering på?
Dracaena skrev:Hm, jag förstår hur du tänker CurtJ.
Med tanke på TS inlägg så känns det inte som att detta är en så pass hög nivå att TS ska implementera sin egna modulus funktion. Det låter för mig mer som att TS ska skapa ett program som kan kontrollera om talet är jämnt och delas av ett specificerat tal. Därefter skall hen göra ett aktivitetsdiagram. Jag kan dock ha fel så klart.
Iofs så kan man göra implementationen i #11 med endast en while loop och subtraktion.
@ettpyre, vad är det för nivå du läser programmering på?
Hej igen,
oj det borde jag kanske ha skrivit! Det är programmering 1 på gymnasiet.
ja precis, jag ska göra ett aktivetsdiagram och psuedokod
Ja jag har ofta undrat varför alla programmeringsstudenter ska lära sig att skriva sin egen "bubbelsort" eller annan valfri sorteringsalgoritm när det finns 13 på dussinet i otaliga bibliotek för ändamålet. Jag landar ändå i att det är en bra övning, inte i att skriva sorteringsalgoritmer men att skriva en algoritm som andra ska använda med allt vad det innebär. I det här fallet är det dessutom lätt att testa den då det finns en standardoperator (%) som vi pratat om.
Men som sagt, TS vet säkert bättre och kan avgöra det själv. Som kuriosa skrev jag en rätt enkel implementation och kom fram till att den to ca 50 gånger längre tid att exekvera. Det kan ju vara ett skäl att använda det som tillhandahålls men att öva att skriva egna algoritmer är alltid bra så länge det inte tar tid från annat som är viktigt i programutveckling - som att lära sig att förstå krav för att nämna något.
CurtJ skrev:Ja jag har ofta undrat varför alla programmeringsstudenter ska lära sig att skriva sin egen "bubbelsort" eller annan valfri sorteringsalgoritm när det finns 13 på dussinet i otaliga bibliotek för ändamålet. Jag landar ändå i att det är en bra övning, inte i att skriva sorteringsalgoritmer men att skriva en algoritm som andra ska använda med allt vad det innebär. I det här fallet är det dessutom lätt att testa den då det finns en standardoperator (%) som vi pratat om.
Men som sagt, TS vet säkert bättre och kan avgöra det själv. Som kuriosa skrev jag en rätt enkel implementation och kom fram till att den to ca 50 gånger längre tid att exekvera. Det kan ju vara ett skäl att använda det som tillhandahålls men att öva att skriva egna algoritmer är alltid bra så länge det inte tar tid från annat som är viktigt i programutveckling - som att lära sig att förstå krav för att nämna något.
Tack för hjälpen Curt! Jag är helt ny inom det här, så allting känns väldigt svårt men väldigt roligt när man väl fattar. 😃
Så är det med det mesta, kämpa på och gläds åt dina framgångar. Det kommer att gå bra.