eMatematikas Prisijunk Forumas VBE užduotys ONLINE testai

Struktūros. Pažymių skaitymas, vidurkis.


Sveiki, uždavinys skamba taip -
Duomenų faile „pažymiai.txt“ surašyti Onutės pirmojo pusmečio pažymiai. Pirmoje eilutėje parašytas skaičius, reiškiantis dalykų, iš kurių Onutė gavo bent vieną pažymį, skaičių. Kitose eilutėse dalyko pavadinimas (10 pozicijų) ir gauti pažymiai. Parašykite programą, kuri suskaičiuoja kiekvieno dalyko pažymių vidurkius ir pusmečio pažymius. Rezultatą įrašykite į failą „rez.txt“ pusmečio pažymio mažėjimo tvarka.

Paradiniai duomenys:
3
Lietuviu k 10 8
Matematika 7 6 6
Istorija  10 9 4 10

Visą uždavinio sąlygą suprantu ir numanau kaip reikia daryti uždavinį ,tačiau nesigauna perskaityti pažymių, gal turit patarimų?

Čia mano kodas kurį esu pasirašęs:

#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
#include <cstring>
#include <string>

using namespace std;

struct dalykas
{
    string dalykas;
    int pazymys;
};

void skaityk (dalykas a[], int &n);

int main()
{
    int n;
    dalykas a[99];
    skaityk(a,n);
    for (int i=0; i<n; i++)
    {
        cout <<a[i].dalykas<<" "<<a[i].pazymys<<endl;
    }
    return 0;
}

void skaityk (dalykas a[], int &n)
{
    char dalykopav [99];
    ifstream in ("duom.txt");
    in >> n;
    for (int i=0; i<n; i++)
    {
        in.ignore(80,'\n');
        in.get(dalykopav,11);
        a[i].dalykas=dalykopav;
        in >> a[i].pazymys;
    }
    in.close();
}

pakeista prieš 4 m

Blogai yra tavo programoje su in.ignore, taip pat blogai skaitai skaicius: ju nera vienas ir ju numeracija nera i;

Ju yra nezinomas skaicius.

Skaiciu nuskaitymas turetu buti su dar vienu ciklu(ciklas cikle), reikia tikriausiai skaityti iki eilute pabaigos.

Su ignore turetu buti taip:



in >> n;
in.ignore(); // ignoruoja po n ty. po '3'

for (int i = 0; i < n; i++)
{
in.get(dalykopav, 11);
a[i].dalykas = dalykopav;

                // kad  veiktu cia reikia skaiciu nuskaitymo...

in.ignore(); //ignoruoja nuo eilutes pabaigos, jau po nuskaitymu...
}

pakeista prieš 4 m

Pakeičiau in.ignore(); vietas ,tačiau vis vien nesigauna perskaityti pažymių iki eilutės pabaigos, ieškojau pagalbos internete .tačiau nerandu ko man reikia. Suprantu ,kad reikia skaityti su while ,nes nežinau kiek pažymių yra ,tačiau nesigauna perskaityti visos eilutes.


int kiekPazymiuLaikinas = 0;
int pazymys = 0;


for()
{
  kiekPazymiuLaikinas = 0;
    while( failas >> pazymys)
    {
      a[i].pazymiai[kiekPazymiuLaikinas] = pazymys;
      kiekPazymiuLaikinas++;
    }
    a[i].kiekPazymiu = kiekPazymiuLaikinas;
}

pakeista prieš 4 m

Ką darau ne taip ,kad klaidą meta?


    int kiekPazymiuLaikinas = 0;
    int pazymys;
    int pazymiai[99];
    int kiekPazymiu[99];
    char dalykopav [99];
    ifstream in ("duom.txt");
    in >> n;
    in.ignore();
    for (int i=0; i<n; i++)
    {
        in.get(dalykopav,11);
        a[i].dalykas=dalykopav;
        kiekPazymiuLaikinas = 0;
        while( in >> pazymys)
        {
            a[i].pazymiai[kiekPazymiuLaikinas] = pazymys;
            kiekPazymiuLaikinas++;
        }
        a[i].kiekPazymiu = kiekPazymiuLaikinas;
        in.ignore();
    }

kiekPazymiu ir pazymiai masyvas turi buti strukturoje, galvoju suprasi, nes pries kintamaji eina strukturos masyvas a[].

Struktura turi atrodyti taip:

struct dalykas
{
    string dalykas;
    int pazymiai[99];
    int kiekPazymiu;
};

pakeista prieš 4 m

Programa suveikia ,tačiau pažymių nespausdina, vietoj jų spausdina error'ą.

for (int i=0; i<n; i++)
    {
        cout <<a[i].dalykas<<" "<<a[i].pazymiai<<endl;
    }

pakeista prieš 4 m

mh tu masyvus supranti ?

Gi "pazymiai" yra masyvas o ne vienas kintamasis. Turi naudoti cikla cikle ir spausdini pazymius :) .

Nori sudalyvauti šioje temoje ir parašyti savo pranešimą? Prisijungti »