19 svar
293 visningar
ettpyre 20
Postad: 24 nov 2022 15:04

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

Fermatrix 7841 – Fd. Medlem
Postad: 24 nov 2022 15:07

Hur vet vi om ett tal är jämnt?

Laguna Online 30252
Postad: 24 nov 2022 15:26

Hur skulle du göra om jag frågade om 1275 är delbart med 7?

ettpyre 20
Postad: 24 nov 2022 15:27
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.

ettpyre 20
Postad: 24 nov 2022 15:31
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?

Laguna Online 30252
Postad: 24 nov 2022 15:39
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;

ettpyre 20
Postad: 24 nov 2022 15:43
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! 😃

Laguna Online 30252
Postad: 24 nov 2022 15:50

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å.

ettpyre 20
Postad: 24 nov 2022 15:54 Redigerad: 24 nov 2022 17:13

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)

CurtJ 1190
Postad: 24 nov 2022 18:12

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.

CurtJ 1190
Postad: 24 nov 2022 18:59

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

Laguna Online 30252
Postad: 24 nov 2022 19:25

Man kan göra en egen effektiv modulo-funktion med heltalsoperationer.

Att använda flyttal är en liten omväg, men går också.

ettpyre 20
Postad: 24 nov 2022 22:18

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!

Fermatrix 7841 – Fd. Medlem
Postad: 24 nov 2022 23:14 Redigerad: 24 nov 2022 23:14

Var fick ni att man inte får använda mod eller % i Java? 

CurtJ 1190
Postad: 25 nov 2022 16:38

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.

Fermatrix 7841 – Fd. Medlem
Postad: 25 nov 2022 16:47 Redigerad: 25 nov 2022 16:49

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å?

ettpyre 20
Postad: 25 nov 2022 17:00
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 

CurtJ 1190
Postad: 25 nov 2022 17:03

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.

ettpyre 20
Postad: 25 nov 2022 17:31
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. 😃

CurtJ 1190
Postad: 26 nov 2022 09:05

Så är det med det mesta, kämpa på och gläds åt dina framgångar. Det kommer att gå bra.

Svara
Close