» »

Program ploščice

Program ploščice

i33a ::

Živjo, zadal sem si nek "problem" in ga poizkusil rešiti, ampak ni šlo...
Problem: uporabnih vnese najprej 2 števili(dolžina in širina sobe) in za tem še 2(dolžina in širina ploščic).
Soba je pravokotna. Zanima me koliko ploščic je potrebo da bi prekrili celotno površino, ploščic ki so bile delno že uporabljene ne smemo več uporabljati. Mi lahko kdo pomaga in mi napiše rezultat ter ga na hitro opiše?

dice7 ::

izračunaj ploščino sobe, nato pa ploščino ene ploščice in seštevaj ploščine ploščic tako dolgo skupaj da niso več od ploščine sobe

i33a ::

Nekako mi ne uspe...(sem še bolj nov pri reševanju takih problemov) Kaj je narobe?
#include <iostream>
using namespace std;
int main(){
    int a, b, c, d;
    int ploscina_sobe, ploscina_ploscice;
    int p;
    int vsotap;
    cin >> a;
    cin >> b;
    cin >> c;
    cin >> d;
    
    ploscina_sobe = a*b;
    ploscina_ploscice = c*d;
    do{
             vsotap = vsotap + ploscina_ploscice;
             p++;
             } while(vsotap < ploscina_sobe);
    cout << p << endl;
    return 0;
    }

dice7 ::

preden greš v zanko še postavi 'vsotap' na nič oz. na vrednost 'ploscina_ploscice', drugih problemov pa ne vidim :|

i33a ::

Hmm... postavil sem na 0 ampak program vrne čudno številko...Za nek primer ko bi moral vrniti 6 vrne npr. 184...

dice7 ::

Aja, pa 'p' tudi postavi na ničlo :D
Kadar deklariraš spremenljivke ti priporočam da jih vedno postaviš na 0, oz neko vrednost, kajti drugače bodo imele naključno vrednost, katera je v pomnilniku na tisti lokaciji, katera se je rezervirala za to spremenljivko.

Zgodovina sprememb…

  • spremenil: dice7 ()

i33a ::

Hvala za nasvet :) sedaj program vrne v nekaterih primerih pravilno številko kdaj pa tudi napačno primer 3,5,2,2 -> progam vrne vrednost 4 kar ni pravilno saj bi moral izpisati 6... Sem kaj narobe napisal v programu ali je težava v zasnovi programa?

Aston_11 ::

To rabiš tudi za praktično uporabo ali samo za veselje pri reševanju problema? Po mojem bi moral upoštevati razdalje, ne pa površine. Širino sobe in širino ploščice. Ker ploščice so kvadratne, kar pa pri uporabi po površini ne moreš upoštevati. Ti ne more dati pravega rezultata ven.

Zgodovina sprememb…

  • spremenil: Aston_11 ()

i33a ::

Tega ne potrebujem praktično, ampak bi res rad rešil ta problem.
Ploščice pa ni nujo da so kvadratne... kot širino in dolžino bi lahko podal karkoli.
Ima kdo še kakšen predlog kaj v programu popraviti/spremeniti?

mihaelf3 ::

Kaj pa
int ploscic(int v_sobe, int s_sobe, v_ploscice, s_ploscice)
{
    return (int)(ceil(v_sobe / v_ploscice) * ceil(s_sobe / s_ploscice));
}

(boš verjetno rabil še kako knjižnjico zaradi ceila)

technolog ::

Tako je, mihaelf3 je napisal optimalen algoritem.

Matra ga edin to da je deljenje dveh intov spet int, zato je pravilna koda:
int ploscic(int v_sobe, int s_sobe, int v_ploscice, int s_ploscice)
{
    return (int)(ceil((double)v_sobe / v_ploscice) * ceil((double)s_sobe / s_ploscice));
}

Genetic ::

Recimo, da je povrsina sobe 50X30 (dolzinaXsirina), povrsina ploscice pa 5X3.

Ce polagas ploscice tako, da gre dolzina ploscice vzdolzno z dolzino sobe, potem rabis 10x10 = 100 ploscic (v dolzino gre 10 ploscic, prav tako v sirino sobe gre 10 ploscic)..

Ce pa polagas tako, da gre dolzina ploscice pravokotno ma dolzino sobe, pa rabis 17x6 = 102 ploscic (v dolzino sobe gre 16,666 = 17 sirin ploscic, v sirino sobe pa gre 6 dolzin ploscic).

Potem pa se moras upostevati razmik med ploscicami, pa razmik ploscic od stene, ...

i33a ::

Nisem mislil toliko komplicirat saj program ni za praktično rabo, zanima me le dovolj dobra rešitev tega problema... To površino in površino ploščice sem si predstavljal kot neko mrežo npr. 3x5
Ploščino ploščice npr.2x2 pa kot manjšo mrežo... Potem bi tiste manjše mreže(npr.2x2) polagal na večjo mrežo (npr. 3x5) Tako bi porabil 2 celi plošči 3x po polovico potem pa bi ostal še eno "polje v mreži"... Ker dela že uporabljene ploščice nebi mogel ponovno uporabiti bi porabil 6 ploščic. Samo tega mi nikakor ne uspe spraviti v program...

amacar ::

Evo, ena na simpl napisana koda. Kolikor sem na hitro testiral deluje.

#include <iostream>
using namespace std;
int main()
{
    int a,b,c,d;
cout<<"Vnesi sirino sobe (cm):";
cin>>a;
cout<<endl<<"Vnesi dolzino sobe (cm):";
cin>>b;
cout<<endl<<"Vnesi sirino ploscice (cm):";
cin>>c;
cout<<endl<<"Vnesi dolzino ploscice (cm):";
cin>>d;
int sirina,dolzina,stevilo;
sirina=a/c;
dolzina=b/d;
if(a%c!=0)
{
    sirina++;
}
stevilo=sirina*dolzina;
if(b%d!=0)
{
    stevilo=stevilo+sirina;
}
cout<<endl<<"Potrebujemo "<<stevilo<<" ploscic.";
return 0;
}

i33a ::

amacar hvala deluje :)


Vredno ogleda ...

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

C++ naloge

Oddelek: Programiranje
163447 (2976) kitarist
»

python pomoč

Oddelek: Programiranje
111791 (1611) jype
»

[Python] syntax error-invalid syntax

Oddelek: Programiranje
51752 (1722) Vesoljc
»

Eddy-ev novi vodni blok

Oddelek: Hlajenje in modifikacije
212011 (1567) WinsuckeR
»

Kvadratura lika ? m2

Oddelek: Loža
352465 (1970) ta_pridna

Več podobnih tem