» »

pomoč pri nalogi

pomoč pri nalogi

rsrs ::

Pozdravljeni.
Imam problem pri eni nalogi pri programiranju v c++ in sicer moram izdelati program kateri izpiše zadetke v in izven kroga (krog je v koordinatnem sistemu (x= -1 do 1;y= -1 do 1) naključno izbranih 1000 zadetkov. Na koncu mora še izpisat statistiko koliko je bilo zadetkov v krogu in koliko izven kroga.
Ker sem totalen začetnik niti ne vem kje in kako bi sploh začel. Za kakršnokoli pomoč sem vam zelo hvaležen.
lp

xx23 ::

A so kakšne omejitve za te zadetke? Ker če je lahko zadetek od 0 do neskončno od središča, potem so praktično vsi izven kroga.

rsrs ::

omejitev so točke x(-1 do 1) in y(-1 do 1) povezane v kvadrat, znotraj kvadrata pa je krog z radiusom 2. tak si jaz to predstavljam...

onCloud9 ::

Ponavadi se to dela v kvadratu s stranico 2, ki ima včrtan krog z radijem 1. Iz razmerja števila zadetkov v in zunaj kroga se da izračunati pi.

rsrs ::

ja točno to moram narediti...

K0l1br1 ::

če je x manjši od pozitivne in negativne vrednosti korena iz y na 2 - 1, je točka znotraj kroga, če je večji od te pozitivne ali negativne vrednosti korena y2 - 1 in hkrati manjši od 1 oziroma - 1 je pa znotraj kvadrata in izven kroga.

Tole rukneš v if stavke in bi moralo znati ugotoviti, kam kaj pade

Zgodovina sprememb…

  • spremenilo: K0l1br1 ()

rsrs ::

če bi jaz to vedel rukniti v if stavke nebi tratil vašega dragocenega časa z mojimi vprašanji...

zavtom ::

Malo se potrudi. V življenju ti nihče ne bi samo nosil k riti.
Vsi smo bili enkrat začetniki. V svetu v katerega pluješ potrebušen predstem motivacjo, željo po vedenju, željo po odkrivanju sveta. Če nimaš motivacije, jo hitro najdi, saj boš drugače prej ali slej odnehal.

HotBurek ::

Za miljon naključnih točk pride takšen rezultat:

total=1000000
inside=785593
outside=214407
inside=78.56%
outside=21.44%


Tisti ki poznate to reč; je rezultat približno pravilen?

Sicer pa spodaj primer kode, napisana za Python, s komentarji. Z nekaj vaje se da naredit rewrite, korak po koraku, v drug jezik.


#!/usr/bin/python3.5

#import
import math;
import random;

# define array
pointarray = [];

# define arraylength
length = 1000;

# define inside/outside counter
inside = 0;
outside = 0;

# point classs
class Point:
    x = 0;
    y = 0;

# main entry
if __name__ == "__main__":

    # create random a/b point pairs
    for i in range(0, length):

        p = Point();
        p.x = round((random.randrange(-1000000, 1000000)) / 1000000, 3);
        p.y = round((random.randrange(-1000000, 1000000)) / 1000000, 3);

        # add point to array
        pointarray.extend([p]);

        # print percentage completed
        print(str(round(i/length*100)) + "% filling array with random points ...");

    # loop throug array of points
    for i in range(0, len(pointarray)):

        # read point from array
        p = pointarray[i];

        # calculate point distance to circle center
        # center of circle is at x=0, y=0
        distance = round(math.sqrt((p.x * p.x) + (p.y * p.y)), 3);

        # is inside or outside
        where = "";
        # circle r=1
        if distance <= 1:
            inside = inside + 1;
            where = "inside";
        else:
            outside = outside + 1;
            where = "outside";

        # print completed/x/y/distance/where
        print(str(round(i/length*100)) + "%" + "\t" + "x=" + str(p.x) + "\t" + "y=" + str(p.y) + "\t" + "distance=" + str(distance) + "\t" + where);

    # print inside/outside stats
    print("total=" + str(len(pointarray)));
    print("inside=" + str(inside));
    print("outside=" + str(outside));

    # print inside/outside ration
    print("inside=" + str(round(inside/len(pointarray)*100, 2)) + "%");
    print("outside=" + str(round(outside / len(pointarray) * 100, 2)) + "%");
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

FTad ::

@HotBurek,

ce je popoln zacetnik, ne bo znal niti kode, ki si mu jo podaril znal uporabiti oz jo razumeti...

Blazzz ::

Python. Malenkost krajse.
import numpy as np
N = 1000000
points = np.random.rand(N,2)
print(np.sum((points[:, 0]**2 + points[:, 1]**2) < 1))


C++
#include <random>
#include <iostream>

int main() {
  std::random_device r;
  std::default_random_engine gen(r());
  std::uniform_real_distribution<double> distribution(0.0,1.0);

  const int num_points = 1000000;
  int hits = 0;
  for (int i = 0; i < num_points; ++i) {
     const double x = distribution(gen);
     const double y = distribution(gen);
     hits += x * x + y * y < 1;
  } 
  std::cout << "Num points: " << num_points << ", hits: " << hits << "\n"
  return 0;
}


C++ nisem skompajlal tako da je mogoce kaksen problem.

HotBurek ::

Je problem in to velik; na koncu std::cout vrstice fali podpičje.

Tole me pa zanima. Glede na to, da ni korena (hits += x * x + y * y < 1;), si omejen zgolj na radij=1 in distribution(0.0,1.0)? Bi šlo za krog z r=3, in dist(0.0,3.0)?
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

Blazzz ::

Pardon, za podpičje :)

Za poljuben radij bi condition bil < r*r.

Zgodovina sprememb…

  • spremenil: Blazzz ()

SloKin ::

Če bi mi tole sprogramiral bi ti dal za izvirnost vse točke:
int(pi / 4 * 1000)

Drugače ti predlagam, da pogledaš malo matematike preden se lotiš reševanja matematičnih nalog. Sqrt ni potreben in ti dela samo štalo.
Evo ti enovrstičnica v čistem pythonu:
import random

sum([random.uniform(-1, 1) ** 2 + random.uniform(-1, 1)**2 <= 1 for _ in range(1000)])


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java-matematika] Računanje relativnega horizontalnega in vertikalnega kota v 3D

Oddelek: Programiranje
51079 (915) zavtom
»

Python - pomoč (strani: 1 2 3 )

Oddelek: Programiranje
10318032 (8780) black ice
»

[c#] ukaz radirka

Oddelek: Programiranje
91111 (904) japol
»

Pomoč pri programiranju z javo

Oddelek: Programiranje
203545 (2472) milc
»

[C#] overloaded operator ==

Oddelek: Programiranje
91111 (990) user4683

Več podobnih tem