Kezdőoldal » Számítástechnika » Programozás » Program ami eldönti ha egy...

Program ami eldönti ha egy négyzet egy másik négyzeten belül van (C-ben)?

Figyelt kérdés

Be kell olvasni, hogy hány négyzet legyen, aztán meg kell adni a koordinátáit, aztán megszámolni hány négyzet van egy másik négyzeten belül.


Ha két négyzet van megadva akkor már megy, de több négyzet esetén hogy kéne megcsinálni?


Probléma, hogy ugye nem elég csak egyszer átmenni a négyzeteken és megnézni, hogy az i. négyzet benne van-e az i+1.-be, hanem meg kell nézni az összeshez képest mindegyiket.


2015. jan. 4. 19:12
 1/7 anonim ***** válasza:
100%

Vizsgáld meg mindet minddel. Sosem írtál ilyen algoritmust?


ciklus i=0tól n-1ig:

__ciklus j=i+1től nig:

__ _ha fedi(negyzet[i], negyzet[j]) akkor ++fedett

2015. jan. 4. 19:15
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:

> meg kell nézni az összeshez képest mindegyiket.

Akkor tedd ezt. :)


ciklus i = 1..N

ciklus j = 1..N

ha (i != j) akkor megnézed_amit_kell(i,j);

ciklus vége

ciklus vége

2015. jan. 4. 19:16
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:

#2 vagyok

Ja, igen... Wampa algoritmusa optimálisabb, ő nem számol mindent 2x, mint én :))

2015. jan. 4. 19:17
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:

#1


Még csak első félév hogy programozást tanulok, szóval sok mindent kell még tanulnom.

Cikluson belüli ciklust mondjuk írtam már, de amit te írtál még nem 100% sikerült felfognom, de akkor azt mondjátok az jó, és ha van mondjuk 6 vagy akármennyi négyzetem össze vissza sorrendben, az így az összeset meg fogja nézni hogy fedi-e a másikat?

2015. jan. 4. 19:47
 5/7 anonim ***** válasza:

Persze. Akkor játsszuk végig:


negyzet tömbben van a 6 négyzeted, 0..5-ig.


Megfogja az első négyzetet (i=0). Melyikkel kell összehasonlítani? A másodikkal(j=i+1=1), a harmadikkal(j=2)...és az utolsóval(j=n=5).

Ezután fogjuk a másodikat(i=1). Az elsővel már megvolt, önmagával nem kell -> j=2-től n-ig.


Az utolsó előttit már csak az utolsóval kell hasonlítani. i=4, j=5.

Az utolsót már nem hasonlítjuk senkihez.

2015. jan. 4. 19:55
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:

Remélem nem csúsznak el a sorok:

Pl.

i=0; j=1---->5

i=1; j=.2--->5

i=2; j=..3-->5

i=3; j=...4->5

2015. jan. 4. 22:04
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:

A lényeg, hogy minden elemet összehasonlíts minden másik elemmel.

Mivel bármely "i-edik" elemre igaz, hogy az előtte levőkkel már minddel összehasonlítottad (mert korábban azok voltak az "i-edikek"), saját magával pedig sohasem hasonlítod össze, így a belső ciklus j-je mindig i+1-ről indul, tehát az "i-edik" elem után közvetlenül következő elemről. Ezen felül az utolsó elem sohasem lesz "i-edik", mivel nincs utána következő elem, minden előrébb elhelyezkedővel pedig már össze lett hasonlítva, tehát ezt már nincs mivel összevetni.


Ahogyan az előző válaszoló is szemléltette:

Ha van öt darab almám, és mindet össze akarom hasonlítani mindegyik másikkal, akkor


1. Fogom az első almát. Összehasonlítom a másodikkal, majd a harmadikkal, a negyedikkel, majd az ötödikkel.


2. Fogom a második almát. Az elsővel nem hasonlítom össze, hiszen azt már megtettem az előbb. Magával szintén nem. Tehát a következő (j=i+1), harmadik almával, ezt követően a negyedikkel fogom összehasonlítani, majd az ötödikkel.


3. Fogom a harmadikat. Ugyanez a helyzet: Az első kettővel már összehasonlítottam, magával nincs értelme, így a negyediktől kezdem.


4. Fogom a negyedik, utolsó előtti almát. A helyzet változatlan, vagyis amivel már összehasonlítottam, azzal felesleges volna mégegyszer megtennem, így az utolsó, ötödik almával hasonlítom össze (nem speciális eset, j=i+1 itt is igaz)


5. Az utolsó alma viszont speciális eset, mivel ezt az előzőekben már mindegyik másikkal összehasonlítottam, így ezzel egyszerűen nem szükséges foglalkoznom.


Itt a "fogom az almát" a külső ciklus, az "összehasonlítom az X-edikkel" pedig a belső. Latható, hogy


- "i < tömb_mérete" helyett "i < tömb_mérete - 1" lesz a külső ciklusfeltétel, mert az utolsó almát "már nem fogom"

- A belső ciklus mindig "j = i + 1" -től indul, mert a korábbi almákkal már megtörtént az éppen megfogott alma összehasonlítása, önmagával meg nincs értelme összevetni.


Ennyi a trükk, semmi több. A belső ciklusmagban szépen összehasonlítod a squares[i] -t squares[j] -vel, és az eredménnyel kezdesz valamit (növelsz egy számlálót).


Kicsit hosszúra sikeredett, de bízom benne, hogy egyúttal könnyen érthetőre is.

2015. jan. 5. 01:54
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!