Pereiti prie turinio

C++ Pagalba del programos Trys sodininkai


Rekomenduojami pranešimai

Sveiki, turiu programos sąlygą, ja padariau, bet mano nuomone labai primityviai, todėl norėčia pamatyti kitų žmonių būdus ir taip tobulėti, niekaip kitaip nesumasčiau. Pažengę programuotojai turėtų parodyti kokį nors paprastesnį būdą. Ačiū. ;)

 

http://i.gyazo.com/0311cad5ee0211d3b03933b9cc5c3771.png

 

 

Štai mano sprendimo būdas

#include <iostream>
#include <fstream>
using namespace std;
void skaityti(int A[], int B[], int C[], int D[]){
ifstream fd("duom.txt");
for(int i=1; i<=3; i++){
	fd>>A[i]>>B[i]>>C[i]>>D[i];
}
fd.close();
}
int skaiciuoti(int A[], int B[], int C[], int D[]){
int xd, yv, xk, ya, a, b; // xd- desnes puses kordinate, xk - kaires, yv- virsaus, ya- apacios
// suzinau virsutine y
int plotas;
if(D[3]>=D[1]&&D[2]>=D[1]) yv=D[1];
else if(D[3]>=D[2]&&D[1]>=D[2]) yv=D[2];
else if(D[2]>=D[3]&&D[1]>=D[3]) yv=D[3];
// apatine suzinau y
if(B[1]>=B[2]&&B[1]>=B[3])ya=B[1];
else if(B[2]>=B[1]&&B[2]>=B[3]) ya=B[2];
else if(B[3]>=B[1]&&B[3]>=B[2]) ya=B[3];
// desine suzinau x
if(C[1]<=C[2]&&C[1]<=C[3])xd=C[1];
else if(C[2]<=C[1]&&C[2]<=C[3]) xd=C[2];
else if(C[3]<=C[1]&&C[3]<=C[2]) xd=C[3];
// kaire suzinau x
if(A[1]>=A[2]&&A[1]>A[3]) xk=A[1];
else if(A[2]>=A[1]&&A[2]>=A[3]) xk=A[2];
else if(A[3]>=A[1]&&A[3]>=A[2]) xk=A[3];
a=yv-ya;
b=xd-xk;
plotas=a*b;
return plotas;
}
int main(int argc, char *argv[]) {
int A[100], B[100], C[100], D[100];
int plot;
skaityti(A, B, C, D);
plot=skaiciuoti(A, B, C, D);
cout<<plot;
return 0;
}

Redagavo xamer
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Radau kažkada padarytą :)

#include <fstream>

using namespace std;

int axMax(int ax[]);
int ayMax(int ay[]);
int vxMin(int vx[]);
int vyMin(int vy[]);


int main ()
{
   ifstream fd("duom.txt");
   ofstream fr ("rez.txt");
   int ax[3],ay[3],vx[3],vy[3];

   for (int i=0; i<=2; i++)
       fd>>ax[i]>>ay[i]>>vx[i]>>vy[i];
   fr<<(vxMin(vx)-axMax(ax) ) * (vyMin(vy)-ayMax(ay));

}

int axMax(int ax[])
{
   int axMax=0;
   for(int i=0; i<=2; i++)
       if (ax[i]>axMax) axMax=ax[i];
   return axMax;

}
int ayMax(int ay[])
{
   int ayMax=0;
   for(int i=0; i<=2; i++)

       if (ay[i]>ayMax) ayMax=ay[i];
   return ayMax;

}
int vxMin(int vx[])
{
   int vxMin=999;
   for(int i=0; i<=2; i++)
       if (vx[i]<vxMin) vxMin=vx[i];
   return vxMin;

}
int vyMin(int vy[])
{
   int vyMin=999;
   for(int i=0; i<=2; i++)
       if (vy[i]<vyMin) vyMin=vy[i];
   return vyMin;

}

Dabar žiūriu kad minimumus kvailai ieškojau, reiktų su masyvų indeksais ieškot, nu bet principas matosi.

edit: pasinaudojus min, max_element f-jomis kodo sutrumpėtų

Redagavo Paulas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tas pats principas kaip viršuje pateikė, tik truputi kitaip įgyvendinta:

 

#include <iostream>
#include <fstream>

std::ifstream fd("duomenys.txt");
std::ofstream fr("rezultatai.txt");

void findValue(int &max_x_1, int &max_y_1, int &min_x_2, int &min_y_2);

int main()
{
   int max_x_1 = 0, max_y_1 = 0, min_x_2 = 0, min_y_2 = 0;
   findValue(max_x_1, max_y_1, min_x_2, min_y_2);
   fr << (min_x_2 - max_x_1) * (min_y_2 - max_y_1);
}

void findValue(int &max_x_1, int &max_y_1, int &min_x_2, int &min_y_2)
{
   bool first_x = true, first_y = true;
   for(int i=0; i<3; ++i)
   {
       int temp;
       fd >> temp;
       if(temp > max_x_1) max_x_1 = temp;

       fd >> temp;
       if(temp > max_y_1) max_y_1 = temp;

       fd >> temp;
       if(temp < min_x_2 || first_x){
         min_x_2 = temp;
         first_x = false;
       }

       fd >> temp;
       if(temp < min_y_2 || first_y){
         min_y_2 = temp;
         first_y = false;
       }
   }
}

Redagavo Pattio
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Šiek tiek kitoks sprendimas:

#include <iostream>
#include <fstream>
using namespace std;

#define RECT_NUM 3
#define MAX(x, y) (((x) > (y)) ? (x) : (y))
#define MIN(x, y) (((x) < (y)) ? (x) : (y))

struct Rect {
   int lx;
   int ly;
   int rx;
   int ry;
};

void readFile(Rect rectArray[]) {
ifstream fd("data.txt");
for (int i = 0; i < RECT_NUM; i++) {
	fd >> rectArray[i].lx >> rectArray[i].ly >> rectArray[i].rx >> rectArray[i].ry;
}
fd.close();
}

int maxArea(Rect rectArray[]) {
Rect tmp = rectArray[0];
for (int i = 1; i < 3; i++) {
  		if ( tmp.lx < rectArray[i].rx && tmp.rx > rectArray[i].lx && tmp.ly < rectArray[i].ry && tmp.ry > rectArray[i].ly ) {
  			tmp.lx = MAX(tmp.lx, rectArray[i].lx); 
  			tmp.ly = MAX(tmp.ly, rectArray[i].ly);
  			tmp.rx = MIN(tmp.rx, rectArray[i].rx);
  			tmp.ry = MIN(tmp.ry, rectArray[i].ry);
  		}
  	}
  	return (tmp.rx - tmp.lx) * (tmp.ry - tmp.ly);
}

int main(int argc, char *argv[]) {
Rect rectArray[RECT_NUM];
readFile(rectArray);
  	cout << maxArea(rectArray) << endl; 
return 0;
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...