Sign in to follow this  
Cornel Iulian

[C++] Creare avion

1 post in this topic

Am avut de rezolvat o problema interesanta (zic eu) si la care nu am vazut nicio rezolvare pe google, s-ar mai putea imbunatati ceva?

5*.Implementați un program care citește din DATE.IN de pe prima linie un număr natural n iar de pe a doua linie, două numere naturale x și y (cu 1<=x<=n și 1<=y<=n). Programul va crea și va salva în fișierul REZULTAT.OUT o matrice pătratică de n x n elemente în care x și y reprezintă coordonatele capului unui avion; toate componentele avionului vor fi marcate cu X iar restul elementelor din matrice cu 0. Se știe că sub capul avionului aripile sunt unite în mod simetric pe 5 elemente, mai urmează în jos un element iar sub acel element coada avionului care este simetrică față de axă și formată din 3 elemente.
Dacă nu este posibilă construirea unui avion atunci se va scrie în fișier “NU ESTE POSIBIL”.
Ex: dacă x=3, y=1 și n=5 atunci soluția salvată în fișier va fi:

FsDVF8n.png

#include <iostream>
#include <fstream>
using namespace std;
int n,x,y,i,j;
char M[10][10];
ifstream f("date.in");
ofstream g("rezultat.out");
int main()
{
    //Citim din fisier n,x si y
    f>>n>>x>>y;

    //Conditii ca avionul sa se incadreze in matrice
    //n<5, nu s-ar putea creea avionul neavand loc in matrice
    //y<1, capul avionului ar iesi din matrice (in sus)
    //x<3, aripile avionului ar iesi din matrice (in stanga)
    //x+2>n, aripile avionului ar iesi din matrice (in dreapta)
    //y+3>n, coada avionului ar iesi din matrice (in jos)

    if(n<5 || y<1 || y+3>n || x<3 || x+2>n)
        g<<"NU ESTE POSIBIL!";
    else{
        //Facem toata matricea 0
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                M[i][j]='0';

        //Construim capul
       	M[y][x] = 'X';

        //Construim aripile
        //y+1 = o pozitie mai jos de cap
        //pornim cu j de la x-2 (2 pozitii in stanga) pana la x+2 (2 pozitii in dreapta)
        for(j=x-2;j<=x+2;j++)
            M[y+1][j]='X';

        //Construim elementul de sub aripa
        //Punem 'X' cu 2 pozitii mai jos de cap (y+2)
        //M[y+2][x], x = pozitia capului
        M[y+2][x]='X';

        //Constuim coada
        //y+3 = cu 3 pozitii mai jos de cap
        //pornim cu j de la x-1 (o pozitie in stanga) pana la x+1 (o pozitie in dreapta)
        for(j=x-1;j<=x+1;j++)
			M[y+3][j]='X';

        //Afisam matricea in fisier
        for(i=1;i<=n;i++){
            for(j=1;j<=n;j++)
                g<<M[i][j]<<" ";
            g<<'\n';
        }
    }


    //Inchidem fisierele
    f.close();
    g.close();
    return 0;
}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this