Pereiti prie turinio

C++ - MASYVAS/FUNKCIJOS


Rekomenduojami pranešimai

Sveiki, sprendžiu vieną uždavinį ir niekaip nepavyksta pilnai susidoroti.

 

Užduotis: http://gabija.simnet.lt/it/programav11-12.pdf 48psl. galas, 49 psl. pradžia. Užduoties pavadinimas Gyventojai.

 

Pasirašydamas štai tokį duomenų failą uždavinį išsprendžiau:

10

5 4 4 5 6 5 0 0 5 0

 

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;
const char Cfd[]="Duomenys.txt";
const char Cfr[]="Rezultatai.txt";

void skaityti (double A[], int & n)
{
   ifstream fd (Cfd);
   fd >> n;

   for (int i=1; i <= n; i++)
       fd >> A[i];
   fd.close();
}

void spausdinti (double A[], int n, double gsum, double gksum, double gdsum, double kvid, double dvid)
{
   ofstream fr (Cfr);
   for (int i=1; i<= n; i++)
       fr << i << " " << A[i] << endl;
       fr << "Viso gyventoju: " << gsum << endl;
       fr << "Kaireje puseje gyvena: " << gksum << ", o desineje " << gdsum << endl;
       fr << "Kaires vidurkis: " << fixed << setprecision (2) << kvid << ", o desines " << fixed << setprecision (2) << dvid << endl;
       fr.close();
}

void gyventojai (double A[], int n, double & gsum)
{
   for (int i=1; i <= n; i++)
       gsum=gsum+A[i];
}

void puses (double A[], int n, double & gksum, double &gdsum, double & kpuse, double & dpuse, double & dvid, double & kvid)
{
   for (int i=1; i<=n; i++)
   {
       if (i%2==0)
       {
       gdsum=gdsum + A[i];
       dpuse = dpuse +1;
       }

       if (i%2 != 0)
       {
       gksum=gksum + A[i];
       kpuse = kpuse + 1;
       }

   }

       dvid = gdsum / dpuse;
   kvid = gksum / kpuse;

}


int main()
{
   int n;
   double gsum=0, gksum=0, gdsum=0, kpuse = 0, dpuse = 0;
   double A[100];
   double dvid, kvid;

   skaityti (A, n);
   gyventojai (A, n, gsum);
   puses (A, n, gksum, gdsum, kpuse, dpuse, dvid, kvid);
   spausdinti (A, n, gsum, gksum, gdsum, kvid, dvid);

   return 0;
}

 

Tačiau pačioj užduotyje duotas štai toks duomenų failas iš kurio man nepavyko padaryti net normalaus nuskaitymo.

 

10

1 5

2 4

3 4

4 5

5 6

6 5

7 0

8 0

9 5

10 0

 

Patarkite kaip su šituo bent nuskaitymą padaryti. Kairėje pusėjė - namo numeris, dešinėje gyventojų skaičius tame name.

 

Tam pirmam duomenų faile, su kuriuo išsprendžiau viską, tai pirmoj eilutėj namų skaičius, o antroj eilutėj kiek kiekvienam name gyventojų.

Redagavo sebas1
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Reikia dvieju masyvu. Tu viska dedi i viena "A[]"

 

P.S. O jei tau "namo numeris" nereikalingas, tai gali skaitymo f-ja perdaryti sitaip:

 

 

void skaityti (double A[], int & n)
{
   ifstream fd (Cfd);
   fd >> n;
   double x;

   for (int i=1; i <= n; i++)
       fd >>x>>A[i];
   fd.close();
}

 

Redagavo masinele
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.

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