Gå til innhold

ProgrammeringsBaren! Småprat, om det du elsker!


Anbefalte innlegg

Hva er en implementasjonsfil, og hva vil det si å implementere?

I C og C++ (og enkelte andre språk), så deler man opp koden i en spesifikasjonsfil og en implementasjonsfil.

 

I spesifikasjonsfilen, så beskrives strukturer, klasser funksjoner osv. Men selve koden i klasse-metoder og generelle funksjoner legges i implementasjonsfilen(e).

  • Liker 1
Lenke til kommentar
Videoannonse
Annonse

Hva er en implementasjonsfil, og hva vil det si å implementere?

 

Å implementere betyr noe sånt som å konstruere eller gjennomføre noe fra en plan (etymologisk er det fra latin for "å fylle opp", så den beste fornorskingen er kanskje "å oppfylle"). I programmerings-sammenheng er implementasjonen den faktiske koden, i kontrast med headere (som bare gir navn/argumenter/returverdi) og dokumentasjon.

 

Det blr også brukt i objektorientert sammenheng - man kan implementere et interface. Et interface er egentlig bare et løfte om at man skal ha de metodene som er beskrevet i interfacet, og så implementerer man det ved å faktisk skrive de metodene i den relevante klassen. (Ditto for rent virtuelle metoder - en klasse kan ha en metode uten kode. For å bruke den må man skrive en ny klasse som arver den og implementerer den manglende metoden.)

Endret av Djn
  • Liker 1
Lenke til kommentar

Java: Er det meningen her at jeg i oppgave 10 og 12 skal benytte meg av de allerede eksisterende metodene i Point-klassen som man lager i oppgave 3 og 4?

 

 

3. Add the following method to the Point class:
public double slope(Point other)
Returns the slope of the line drawn between this Point and the given other Point. Use the formula (y2 – y1) / (x2 – x1) to determine the slope between two points (x1, y1) and (x2, y2). Note that this formula fails for points with identical x-coordinates, so throw an IllegalArgumentException in this case.


4. Add the following method to the Point class:
public boolean isCollinear(Point p1, Point p2)
Returns whether this Point is collinear with the given two other Points. Points are collinear if a straight line can be drawn that connects them. Two basic examples are three points that have the same x- or y-coordinate. The more general case can be determined by calculating the slope of the line between each pair of points and checking whether this slope is the same for all pairs of points. Use the formula (y2 – y1) / (x2 – x1) to determine the slope between two points (x1, y1) and (x2, y2). (Note that this formula fails for points with identical x-coordinates so this will have to be a special case in your code.) Since Java’s double type is imprecise, round all slope values to a reasonable accuracy such as four digits past the decimal point before you compare them.

 

 

 

10. Add the following method to your Line class:
public double getSlope()
Returns the slope of this Line. The slope of a line between points (x1, y1) and (x2, y2) is equal to (y2 – y1) / (x2 – x1). If x2 equals x1 the denominator is zero and the slope is undefined, so you may throw an exception in this case.


12. Add the following method to your Line class:
public boolean isCollinear(Point p)
Returns true if the given Point is collinear with the Points of this Line—that is, if, when this Line is stretched infinitely, it would eventually hit the given Point. Points are collinear if a straight line can be drawn that connects them. Two basic examples are three points that have the same x- or y-coordinate. The more general case can be determined by calculating the slope of the line between each pair of points and checking whether this slope is the same for all pairs of points. Use the formula (y2 – y1) / (x2 – x1) to determine the slope between two points (x1, y1) and (x2, y2). (Note that this formula fails for points with identical x-coordinates, so this will have to be a special case in your code.) Since Java’s double type is imprecise, round all slope values to a reasonable accuracy such as four digits past the decimal point before you compare them.

 

 

 

Endret av banansplitt™
Lenke til kommentar

Jeg lager et powershell-skript som skal sjekke om SSID'en "Hjemme" er i nærheten. Så langt har jeg kommet:

$Wlan = netsh wlan show network mode=bssid
if ($wlan.Contains("Hjemme"))
{
"Hurra!"
}

Laptopen jeg kjører dette på er tilogmed koblet til det nettverket, men skriptet sier ikke "Hurra" til meg. Dersom jeg endrer "hjemme" til "", gir den meg et "Hurra". og netsh wlan show network mode=bssid gir meg alle nettverkene, inkludert "Hjemme".

Jeg har også prøvd

netsh wlan show network mode=bssid | Where-Object {$_.Name -match "Hjemme"}

som gir meg tomt resultat.

 

Hva gjør jeg galt?

 

edit:

Klarte det selv :)

Måtte bare fjerne .Name fra kode nummer to over her.

 

Så nå er koden min slik:

If (netsh wlan show network mode=bssid | Where-Object {$_ -match "Hjemme"})
{
}
else
{
$uri = "https://api.pushover.net/1/messages.json"
$parameters = @{
  token = "K37gjsl6GThJ4hzIwuipWVTNqfLkRG"
  user = "smiEWjghftr6m1swyQ0afyL6LP82n0"
  message = "Wifi is down"
}
$parameters | Invoke-RestMethod -Uri $uri -Method Post
}

Dette kjøres av en stasjonær maskin hjemme hvert kvarter.

Dersom SSID'en ikke finnes, får jeg en liten beskjed på mobilen og på Pebble via Pushover-tjenesten.

(PS: token og user-nøklene har jeg gjort fiktive :wee: )

Endret av Khaffner
Lenke til kommentar

Hei!

Lurte litt på hvordan loops egentlig funker med tanke på cpu spikes.

 

I Java har jeg telt opp antall iterasjoner til rundt 150mill ved enkel tallmanipulasjon og dette gikk raskere enn 1s.

 

Mens med denne koden klikker laptopen min helt.. (i3 2gen)

Min i7 klarer dette ganske fint. Om jeg spammer knappen får jeg i7'n opp til +- 35% load.

 

(c# knapp)

if (this.Height != 912)
{
     while(this.Height < 912)
     this.Height += 6;
     this.Width = 1044;
}
else
{
     while(this.Height > 300)
     this.Height -= 6;
     this.Width = 920;
                
}

Er dette virkelig så mye tyngre? Antall iterasjoner er jo så sinnsykt mye mindre enn eksempelet mitt fra java.

Endret av randome
Lenke til kommentar

Hei!

Lurte litt på hvordan loops egentlig funker med tanke på cpu spikes.

 

I Java har jeg telt opp antall iterasjoner til rundt 150mill ved enkel tallmanipulasjon og dette gikk raskere enn 1s.

 

Mens med denne koden klikker laptopen min helt.. (i3 2gen)

Min i7 klarer dette ganske fint. Om jeg spammer knappen får jeg i7'n opp til +- 35% load.

 

(c# knapp)

if (this.Height != 912)
{
     while(this.Height < 912)
     this.Height += 6;
     this.Width = 1044;
}
else
{
     while(this.Height > 300)
     this.Height -= 6;
     this.Width = 920;
                
}
Er dette virkelig så mye tyngre? Antall iterasjoner er jo så sinnsykt mye mindre enn eksempelet mitt fra java.

 

Fungerer den koden der engang?

Lenke til kommentar

Har laget en Rectangle class med verdiene x, y, width og height. I denne klassen skal det være en metode som tar imot et annet Rectangle-objekt og som returnerer et Rectangle tilsvarende det de to andre Rectanglene overlapper hverandre.

 

htjW7.png

 

 

Jeg trenger litt starthjelp for å løse denne oppgaven, altså noen hint. Jeg klarer ikke tenke ut hvordan jeg skal løse oppgaven uten å skrive alt for mye kode, noe jeg tror er unødvendig.

Lenke til kommentar

Om du vet en fremgangsmåte som vil virke, er det nesten alltid bedre å gjøre den først, og så lete etter forbedringer etterpå. Da har du bedre oversikt over hvilke deler av koden/problemet som er knotete, og kan også fort gjenkjenne operasjoner som kan gjenbrukes.

 

Tips:

 

Om du ser på de vertikale strekene, så har du 4 av dem. Hvilke to ønsker du?

Den lengst til venstre av begge firkantenes høyrestrek.

Den lengst til høyre av begge firkantenes venstrestrek.

 

Samme gjelder for de horisontale strekene.

 

Usikker på om dette gjelder generelt, men det er bare å tegne opp forskjellige firkanter og teste.

Lenke til kommentar

Hvorfor skal du if-e så mye?

 

Med mindre de har samme x-koordinat vil alltid én ligge til venstre. Derfra trenger du bare å sjekke om den andres x-koordinat (hjørne) kan ligge innenfor. Om den kan det, sjekk om du har noe overlapp på y-aksen.

 

Hvis begge disse er nei; returner. Hvis de overlapper: beregn.

Lenke til kommentar

Med mindre de har samme x-koordinat vil alltid én ligge til venstre.

Gitt R1 med hjørnene (0,0), (5,0), (0, -3), (5, -3) og R2 med hjørnene (3, 3), (4, 3), (3, -5) og (4, -5), hvilket av dem ligger "til venstre" for det andre? (eller mente du x-koordinatene?)

 

Man slipper nok ikke unna litt testing. En rimelig grei mal finnes i qrect.cpp i Qt, f.eks. Det eneste man må være obs på er spesialtilfeller og hvordan man ønsker å definere slike snitt (f.eks. at 2 rektangler deler nøyaktig 1 punkt (1 hjørne) eller at de har (deler av) en side -- snittet vil da være hhv. et punkt og et segment, men ikke et rektangel).

 

"Computational geometry in C" til J O'Rourke har en generell algoritme for å finne snitt av konvekse polygoner (det er et helt avsindig antall mulige tilfeller, forøvrig). Noe tilsvarende (MapOverlay) finner man i "Computational geometry" til de Berg.

Lenke til kommentar

Jeg mener x-koordinatene. Dersom x1 < x2 (venstre hjørner), kall overlapp-funksjonen på nytt, men swap rektangelene.

 

Litt testing blir det jo, men det skal ikke være nødvendig med en chain på 18.

 

edit: det hele blir selvfølgelig mye mer grisete med en gang ting ikke står rett på aksene, men det ser ikke ut til å være tilfellet her.

Endret av Lycantrophe
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...