eMatematikasMatematikos resursai internete Registruotis Ieškoti...

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

Informatika   Peržiūrų skaičius (404)

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();
}

Paskutinį kartą atnaujinta 2019-12-15

0

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...
}

Paskutinį kartą atnaujinta 2019-12-15

0

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.

0




int kiekPazymiuLaikinas = 0;
int pazymys = 0;


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

Paskutinį kartą atnaujinta 2019-12-15

0

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();
    }

0

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;
};

Paskutinį kartą atnaujinta 2019-12-15

0

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;
    }

Paskutinį kartą atnaujinta 2019-12-15

0

mh tu masyvus supranti ?

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

0

Norėdami rašyti žinutes privalote prisijungti!

Kategorijos

Matematikos testai www.ematematikas.lt/testai Pasikartok matematikos temas spręsdamas online testus!