Pereiti prie turinio

C# programos problema.


Rekomenduojami pranešimai

Sveiki, dariau programavimo namų darbą , ir susidūriau su problema. Reikia išspręsti tokį uždavinį:

 

Pateikiamas 9 aukštų namo parduodamų butų sąrašas. Kiekviename laiptinės aukšte yra po 3 butus. Žinomas

buto numeris, bendras plotas, kambarių skaičius, pardavimo kaina, telefono Nr. Suraskite butus, kurie turi

nurodytą kambarių skaičių ir kurių kaina neviršija nurodytos kainos, ir juos surašykite į tinkamų butų

konteinerį.

 

Nežinau, kaip iš visų butų konteierio paimti tik vieną,o ne visus butus, nes kai meginu rašyti ,kad į tinkamų butų konteinerį dėtų tik vieną buta rašo, kad negali konvertuoti tokio tipo. Gal galėtumėt patarti ką daryti?

 

Programos tekstas:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace P4_1
{
   class Butai
   {
       private int bnr;//buto nr
       private double plotas;
       private int ksk;//kambariu skaicius
       private double kaina;
       private int tnr;//telefono nr.
       public Butai(int bnr, double plotas, int ksk, double kaina, int tnr)
       {
           this.bnr = bnr;
           this.plotas = plotas;
           this.ksk = ksk;
           this.kaina = kaina;
           this.tnr = tnr;
       }
       public int ImtiButoNr() { return bnr; }
       public double ImtiPlota() { return plotas; }
       public int ImtiKambSk() { return ksk; }
       public double ImtiKaina() { return kaina; }
       public int ImtiTelNr() { return tnr; }
       public override string ToString()
       {
           string eilute = string.Format("|{0,4:d}| {1,6:f2} |{2,7:d} |{3,7:f2} |{4,9:d}|", bnr, plotas, ksk, kaina, tnr);
           return eilute;
       }
   }

   class Namas
   {
       const int CMaxi = 100;
       private Butai[] T;
       private int n;
       public Namas()
       {
           n = 0;
           T = new Butai[CMaxi];
       }
       public Butai ImtiButa(int i) { return T[i]; }
       public int ImtiN() { return n; }
       public void Deti(Butai but) { T[n++] = but; }
   } 

       class TinkamiButai
       {
           const int CMaxi=100;
           private Namas[] T;
           private int n;
           public TinkamiButai()
           {
               n = 0;
               T = new Namas[CMaxi];
           }
           public Namas Imti(int i) { return T[i]; }
           public int Imti() { return n; }
           public void Deti(Namas nam) { T[n++] = nam; }
       }

   class Program
   {
       const int CMax=100;
       const string CFd= "..\\..\\u1.txt";
       const string CFrez = "..\\..\\rez.txt";
       static void Main(string[] args)
       {
           TinkamiButai Tnk = new TinkamiButai();
           Namas nam = new Namas();
           int nksk;
           double nkaina;
           int n;
           Console.WriteLine("Iveskite norima kambariu skaiciu");
           nksk = int.Parse(Console.ReadLine());
           Console.WriteLine("Iveskite didziausia kaina");
           nkaina = double.Parse(Console.ReadLine());
           Skaito(ref nam, out n, nksk, nkaina, CFd);
           if (File.Exists(CFrez))
               File.Delete(CFrez);
           AtrenkaTinkamusButus(ref Tnk, nam, nksk, nkaina);
           Console.WriteLine(Tnk.Imti());
           Spausdina(Tnk,nam,CFrez);

       }

       static void Skaito(ref Namas nam, out int n, int nksk, double nkaina,string fv)
       {
           n = 0;
           int bnr, ksk, tnr;
           double plotas, kaina;
           string line;
           using (StreamReader reader = new StreamReader(fv))
           {
               while ((line = reader.ReadLine()) != null)
               {
                   string[] parts;
                   parts = line.Split(';');
                   bnr = int.Parse(parts[0]);
                   plotas = double.Parse(parts[1]);
                   ksk = int.Parse(parts[2]);
                   kaina = double.Parse(parts[3]);
                   tnr = int.Parse(parts[4]);
                   Butai but = new Butai(bnr, plotas, ksk, kaina, tnr);
                   nam.Deti(but);
                   n++;
               }
           }
       }

       static void AtrenkaTinkamusButus(ref TinkamiButai Tnk, Namas nam,int nksk,double nkaina)
       {
           for (int i = 0; i < nam.ImtiN(); i++)
           {
               if ((nam.ImtiButa(i).ImtiKambSk() == nksk) && (nam.ImtiButa(i).ImtiKaina() <= nkaina))
               {
                   Tnk.Deti(nam); 
               }
           }
       }

       static void Spausdina(TinkamiButai Tnk,Namas nam ,string fv)
       {
           using (var fr = File.AppendText(fv))
           {
               string virsus =   "---------------------------------------------\r\n"
                               + "|Buto| Plotas |Kambariu|Kaina    |Tel   NR |\r\n"
                               + "---------------------------------------------\r\n";
               if (Tnk.Imti() != 0)
               {
                   fr.Write(virsus);
                   for (int i = 0; i < Tnk.Imti(); i++)
                   {
                           fr.WriteLine(Tnk.Imti(i).ImtiButa(j).ToString());
                           fr.WriteLine("---------------------------------------------");
                   }
               }
               else fr.WriteLine("Tokiu butu nerasta");
           }
       }
   }
}

 

Ačiū labai už pagalbą ! :rolleyes:

Redagavo gestis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

 

Pateikiamas 9 aukštų namo parduodamų butų sąrašas. Kiekviename laiptinės aukšte yra po 3 butus. Žinomas

buto numeris, bendras plotas, kambarių skaičius, pardavimo kaina, telefono Nr. Suraskite butus, kurie turi

nurodytą kambarių skaičių ir kurių kaina neviršija nurodytos kainos, ir juos surašykite į tinkamų butų

konteinerį.

 

 

Pirma, jei gerai suprantu, iš viso name yra 27 butai (9 * 3 = 27) ? Antra, ar tikrai tau reikia tiek daug klasių (pats sukūrei ar to reikalauja) ? Pvz nelabai logiška, kad butai ir tinkami butai turėtų atskiras klases, kadangi iš esmės tai tas pats butas.

Jei tau reikia padaryti tik pagal tuos reikalavimus, kurių citatą įdėjau, tai čia viską galima padaryti daug paprasčiau (naudojant Linq)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Klausimas, ar tau reikia kurti konteinerį kaip klasę atskirą. Gal užtektų programoj tiesiog panaudoti List<Butai>, į kurį dėtum tinkamus butus, ir poto juos išvestum. Tada nereiktų 2 klasių su ta pačia idėja.

Tas pats klausimas kyla namo klasei, ar užtektų tiesiog paprasto konteinerio, nes programos dydis sumažėtų perpus.

 

E: 80% panašaus kodo mačiau prieš savaitę (su kita užduotim ir iš kito vartotojo). Tokias programas patarčiau rašytis patiems, darbe niekas neduos copypastint. :)

 

E2: O atsakant į tavo klausimą (ko mes nepadarėm), tai tiesiog tavo tinkami butai turi Namas array, o ne Butas array.

 

if ((nam.ImtiButa(i).ImtiKambSk() == nksk) && (nam.ImtiButa(i).ImtiKaina() <= nkaina))

{

Tnk.Deti(nam);

}

 

Tu palygini butus ir įdedi namą :)

Redagavo Eximo
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ą...