Pereiti prie turinio

Informatikos VBE 2013


Rekomenduojami pranešimai

Prašom mano, pagal reikalavimus:

#include <fstream>
#include <cstring>
// Uždavinio konstantos
#define COMPANYNAMELENGTH 10 // Įmonės vardo maks. ilgis
#define MAXN 50              // Maks. įmonių skaičius

// Įmonę aprašanti struktūra - pavadinimas ir koordinatės.
struct Company {
   char name[COMPANYNAMELENGTH];
   int x, y;
} companies[MAXN];

// Įmonių skaičius ir kilometrų limitas.
int n, m;

// Atsakymo kintamieji:
// packagesDelivered - kiek siuntų pristatyta;
// distanceTravelled - kiek km nuvažiuota;
// lastCompanyName   - paskutinės aptarnautos įmonės vardas;
int packagesDelivered = 0, distanceTravelled = 0;
char lastCompanyName[COMPANYNAMELENGTH];

// Funkcija duomenims skaityti.
void ReadData() {
   char temp[1];
   std::ifstream read("U1.txt");
   read >> n >> m;
   read.read(temp, 1);
   for(int i = 0; i < n; ++i) {
       read.read(companies[i].name, 10);
       read >> companies[i].x >> companies[i].y;
       read.read(temp, 1); // Perskaityti eilutės pabaigos simbolį. (tik \r, su \n susitvarko)
   }
   read.close();
}

// Funkcija, skaičiuojanti skaičiaus absoliutinę r-mę.
int abs(int x) {
   return (x < 0)? -x : x;
}

// Funkcija, skaičiojanti atstumą iki įmonės ir atgal.
// comp - dominanti įmonė.
int Distance(const Company& comp) {
   return 2 * (abs(comp.x) + abs(comp.y));
}

// Funkcija duomenims išvesti.
void WriteData() {
   std::ofstream write("U1rez.txt");
   write << packagesDelivered << " " << distanceTravelled << " " << lastCompanyName;
   write.close();
}

// Funkcija, atliekanti skaičiavimus.
void Solve() {
   for(int i = 0; i < n; ++i) {
       int distanceToNext = Distance(companies[i]);
       // Padiskutavus nusprendžiau, kad vis dėlto nereikia 
       // bandyti ieškoti toliau, jei negalima iki 
       // dabartinės įmonės nuvažiuot.
       if(distanceTravelled + distanceToNext > m)
           return;
       distanceTravelled += distanceToNext;
       ++packagesDelivered;
       strcpy(lastCompanyName, companies[i].name);
   }
}

int main() {
   ReadData();
   Solve();
   WriteData();

   return 0;
}

 

Ir antras, išsidirbinėjimas su char masyvais ir vengimas naudoti funkcijų iš std, kad vertintojams sueitų:

#include <fstream>
#include <cstring>
// Programos konstantos
#define MAXCITIES 103      // Didžiausias miestų skaičius
#define MAXINT 0x7FFFFFFF  // Didžiausia 'int' reikšmė
#define MAXREGIONS 10      // Didžiausias apskričių skaičius

// Pradinius duomenis (miestą) aprašanti struktūra.
struct City {
   char name[20];   // Vardas.
   char region[13]; // Apskritis.
   int numPeople;   // Gyventojų skaičius.
   int regionCode;  // (nėra duomenyse) Apskrities numeris.
} cities[MAXCITIES];

// Rezultatą (apskritį) aprašanti struktūra.
struct Region {
   char regionName[13]; // Apskrities pavadinimas.
   int minPeople;       // Mažiausio miesto gyventojų skaičius.
   int totalPeople;     // Apskrities gyventojų skaičius.

   // Palyginimo operatorius rikiavimui.
   bool operator<(const Region &a) {
       if(minPeople != a.minPeople) return minPeople < a.minPeople;
       return strcmp(regionName, a.regionName) == -1;
   }

   // Įrašo konstruktorius, nustatantis numatytas reikšmes.
   Region() : minPeople(MAXINT), totalPeople(0) {}

} regions[MAXREGIONS];

// Pradiniai duomenys - miestų skaičius.
int n;
// Rezultato kintamasis - kiek yra apskričių.
int totalRegions = 0;

// Funkcija, skirianti apskrities kodą.
// Miestai, esantys toje pačioje apskrityje, turės vienodą kodą.
// city - miesto indeksas.
int assignRegionCode(int city) {
   for(int i = 0; i < totalRegions; ++i) {
       if(strcmp(cities[city].region, regions[i].regionName) == 0) {
           return i;
       }
   }
   strcpy(regions[totalRegions].regionName, cities[city].region);
   return totalRegions++;
}

// Funkcija, sukeičianti dviejų kintamųjų reikšmes.
void swap(Region &a, Region &b) {
   Region temp = a;
   a = b;
   b = temp;
}

// Apskritis rikiuojanti funkcija.
void SortResults() {
   bool sorted = false;
   while(!sorted) {
       sorted = true;
       for(int i = 1; i < totalRegions; ++i) {
           if(regions[i] < regions[i - 1]) {
               swap(regions[i - 1], regions[i]);
               sorted = false;
           }
       }
   }
}

int main() {
   // Skaitome duomenis.
   char temp[1];
   std::ifstream read("U2.txt");
   read >> n;
   read.read(temp, 1);
   for(int i = 0; i < n; ++i) {
       read.read(cities[i].name, 20);
       read.read(cities[i].region, 13);
       read >> cities[i].numPeople;
       cities[i].regionCode = assignRegionCode(i);
       read.read(temp, 1); // Perskaityti eilutės pabaigos simbolį.
   }

   // Apdorojame ir išrikiuojame duomenis.
   for(int i = 0; i < n; ++i) {
       int code = cities[i].regionCode;
       regions[code].totalPeople += cities[i].numPeople;
       if(regions[code].minPeople > cities[i].numPeople) {
           regions[code].minPeople = cities[i].numPeople;
       }
   }
   SortResults();

   // Įrašome rezultatą.
   std::ofstream write("U2rez.txt");
   write << totalRegions << std::endl;
   for(int i = 0; i < totalRegions; ++i) {
       write << regions[i].regionName << " "
           << regions[i].minPeople << " "
           << regions[i].totalPeople << std::endl;
   }
   write.close();

   return 0;
}

Redagavo EdgeLuxe
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kokia nesamonė su tais rezultatais. Vienintelis informatikos dalykas toks. Pusę išsprendi bet surenki vos 36vbe balus. Tai čia kažkas rašė anksčiau, kad tik programavimą išsprendė, o wordo ir exelio nespėjo. Tai išvis grūzas turėtų būt.

toks vertinimas, nes tą pusę surinkt - kaip du pirštus apsisiot :lol: per 2 dienas wordą ir excelį galima išmokt, ko nepaskytum apie matematiką arba kokį kitą dalyką :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Įmetu su C++ padarytas užduotis. :)

 

1 užduotis, turėtų viskai gerai būti.

#include <fstream>
using namespace std;
//----------------------------- Skaitymo funkcija
void skaitymas(char imo[][11], int &n, int &m, int x[], int y[])
{
    ifstream fd("U1.txt");
    fd >> n >> m;
    for(int i = 0; i < n; i++)
    {
            fd.ignore(80,'\n');
            fd.get(imo[i],11);
            fd >> x[i] >> y[i];
    }
    fd.close();
}
//----------------------------- Skaičiavimo funkcija
void skaiciavimas(int n, int m, int x[], int y[], int &km,int &indeks)
{
    int sum = 0;
    for(int i = 0; i  < n; i++)
    {
            if(x[i] < 0) x[i] = -x[i];
            if(y[i] < 0) y[i] = -y[i];
            if(sum + ((x[i] + y[i]) * 2) <= m)
            {
                   indeks++; sum = sum + (2 * (x[i] + y[i]));
            }
            else break;
    }
    km = sum;
}
//-----------------------------   Rasymo funkcija                 
int rasymas(char imo[][11], int km, int indeks)
{
   ofstream fr("U1rez.txt");
   fr << indeks << ' ' << km << ' ' << imo[indeks-1];
   fr.close();
   return 0;
}   
int main()
{
   int n , m, x[50], y[50], km = 0, indeks = 0; // km - viso kilometrų, indeks - aptarnautų skaičius, imo - įmonių pav
   char imo[50][11];
   skaitymas(imo, n, m, x, y);
   skaiciavimas(n, m, x, y, km, indeks);
   rasymas(imo, km, indeks);
   return 0;
}

 

Pataisyta 2 uždavinio versija. Gal kas galit pasakyt, kiek už tokią klaidą prarasiu taškų, nes visa kita lyg ir gerai.

 

 

Labai daug gali ta klaida nulemti, nė nežinau kaip taip apsižioplinau. ;(

Pirmoj jau visų taškų negausi už dvimatį char masyvą. Reikėjo i chara nusiskaityt duomenis, o tada ta chara i string perkelt ir išvengtum dvimačio masyvo.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

toks vertinimas, nes tą pusę surinkt - kaip du pirštus apsisiot :lol: per 2 dienas wordą ir excelį galima išmokt, ko nepaskytum apie matematiką arba kokį kitą dalyką :)

O tai tiem kurie pradėjo spręst programavimą ir nespėjo wordo ir exelio? :D Taškai tai tie patys 50 gaunas :D

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prašom mano, pagal reikalavimus:

#include <fstream>
#include <cstring>
// Uždavinio konstantos
#define COMPANYNAMELENGTH 10 // Įmonės vardo maks. ilgis
#define MAXN 50              // Maks. įmonių skaičius

// Įmonę aprašanti struktūra - pavadinimas ir koordinatės.
struct Company {
   char name[COMPANYNAMELENGTH];
   int x, y;
} companies[MAXN];

// Įmonių skaičius ir kilometrų limitas.
int n, m;

// Atsakymo kintamieji:
// packagesDelivered - kiek siuntų pristatyta;
// distanceTravelled - kiek km nuvažiuota;
// lastCompanyName   - paskutinės aptarnautos įmonės vardas;
int packagesDelivered = 0, distanceTravelled = 0;
char lastCompanyName[COMPANYNAMELENGTH];

// Funkcija duomenims skaityti.
void ReadData() {
   char temp[1];
   std::ifstream read("U1.txt");
   read >> n >> m;
   read.read(temp, 1);
   for(int i = 0; i < n; ++i) {
       read.read(companies[i].name, 10);
       read >> companies[i].x >> companies[i].y;
       read.read(temp, 1); // Perskaityti eilutės pabaigos simbolį. (tik \r, su \n susitvarko)
   }
   read.close();
}

// Funkcija, skaičiuojanti skaičiaus absoliutinę r-mę.
int abs(int x) {
   return (x < 0)? -x : x;
}

// Funkcija, skaičiojanti atstumą iki įmonės ir atgal.
// comp - dominanti įmonė.
int Distance(const Company& comp) {
   return 2 * (abs(comp.x) + abs(comp.y));
}

// Funkcija duomenims išvesti.
void WriteData() {
   std::ofstream write("U1rez.txt");
   write << packagesDelivered << " " << distanceTravelled << " " << lastCompanyName;
   write.close();
}

// Funkcija, atliekanti skaičiavimus.
void Solve() {
   for(int i = 0; i < n; ++i) {
       int distanceToNext = Distance(companies[i]);
       // Padiskutavus nusprendžiau, kad vis dėlto nereikia 
       // bandyti ieškoti toliau, jei negalima iki 
       // dabartinės įmonės nuvažiuot.
       if(distanceTravelled + distanceToNext > m)
           return;
       distanceTravelled += distanceToNext;
       ++packagesDelivered;
       strcpy(lastCompanyName, companies[i].name);
   }
}

int main() {
   ReadData();
   Solve();
   WriteData();

   return 0;
}

 

Ir antras, išsidirbinėjimas su char masyvais ir vengimas naudoti funkcijų iš std, kad vertintojams sueitų:

#include <fstream>
#include <cstring>
// Programos konstantos
#define MAXCITIES 103      // Didžiausias miestų skaičius
#define MAXINT 0x7FFFFFFF  // Didžiausia 'int' reikšmė
#define MAXREGIONS 10      // Didžiausias apskričių skaičius

// Pradinius duomenis (miestą) aprašanti struktūra.
struct City {
   char name[20];   // Vardas.
   char region[13]; // Apskritis.
   int numPeople;   // Gyventojų skaičius.
   int regionCode;  // (nėra duomenyse) Apskrities numeris.
} cities[MAXCITIES];

// Rezultatą (apskritį) aprašanti struktūra.
struct Region {
   char regionName[13]; // Apskrities pavadinimas.
   int minPeople;       // Mažiausio miesto gyventojų skaičius.
   int totalPeople;     // Apskrities gyventojų skaičius.

   // Palyginimo operatorius rikiavimui.
   bool operator<(const Region &a) {
       if(minPeople != a.minPeople) return minPeople < a.minPeople;
       return strcmp(regionName, a.regionName) == -1;
   }

   // Įrašo konstruktorius, nustatantis numatytas reikšmes.
   Region() : minPeople(MAXINT), totalPeople(0) {}

} regions[MAXREGIONS];

// Pradiniai duomenys - miestų skaičius.
int n;
// Rezultato kintamasis - kiek yra apskričių.
int totalRegions = 0;

// Funkcija, skirianti apskrities kodą.
// Miestai, esantys toje pačioje apskrityje, turės vienodą kodą.
// city - miesto indeksas.
int assignRegionCode(int city) {
   for(int i = 0; i < totalRegions; ++i) {
       if(strcmp(cities[city].region, regions[i].regionName) == 0) {
           return i;
       }
   }
   strcpy(regions[totalRegions].regionName, cities[city].region);
   return totalRegions++;
}

// Funkcija, sukeičianti dviejų kintamųjų reikšmes.
void swap(Region &a, Region &b) {
   Region temp = a;
   a = b;
   b = temp;
}

// Apskritis rikiuojanti funkcija.
void SortResults() {
   bool sorted = false;
   while(!sorted) {
       sorted = true;
       for(int i = 1; i < totalRegions; ++i) {
           if(regions[i] < regions[i - 1]) {
               swap(regions[i - 1], regions[i]);
               sorted = false;
           }
       }
   }
}

int main() {
   // Skaitome duomenis.
   char temp[1];
   std::ifstream read("U2.txt");
   read >> n;
   read.read(temp, 1);
   for(int i = 0; i < n; ++i) {
       read.read(cities[i].name, 20);
       read.read(cities[i].region, 13);
       read >> cities[i].numPeople;
       cities[i].regionCode = assignRegionCode(i);
       read.read(temp, 1); // Perskaityti eilutės pabaigos simbolį.
   }

   // Apdorojame ir išrikiuojame duomenis.
   for(int i = 0; i < n; ++i) {
       int code = cities[i].regionCode;
       regions[code].totalPeople += cities[i].numPeople;
       if(regions[code].minPeople > cities[i].numPeople) {
           regions[code].minPeople = cities[i].numPeople;
       }
   }
   SortResults();

   // Įrašome rezultatą.
   std::ofstream write("U2rez.txt");
   write << totalRegions << std::endl;
   for(int i = 0; i < totalRegions; ++i) {
       write << regions[i].regionName << " "
           << regions[i].minPeople << " "
           << regions[i].totalPeople << std::endl;
   }
   write.close();

   return 0;
}

Abiturientas esi?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prašom mano, pagal reikalavimus:

#include <fstream>
#include <cstring>
// Uždavinio konstantos
#define COMPANYNAMELENGTH 10 // Įmonės vardo maks. ilgis
#define MAXN 50              // Maks. įmonių skaičius

// Įmonę aprašanti struktūra - pavadinimas ir koordinatės.
struct Company {
   char name[COMPANYNAMELENGTH];
   int x, y;
} companies[MAXN];

// Įmonių skaičius ir kilometrų limitas.
int n, m;

// Atsakymo kintamieji:
// packagesDelivered - kiek siuntų pristatyta;
// distanceTravelled - kiek km nuvažiuota;
// lastCompanyName   - paskutinės aptarnautos įmonės vardas;
int packagesDelivered = 0, distanceTravelled = 0;
char lastCompanyName[COMPANYNAMELENGTH];

// Funkcija duomenims skaityti.
void ReadData() {
   char temp[1];
   std::ifstream read("U1.txt");
   read >> n >> m;
   read.read(temp, 1);
   for(int i = 0; i < n; ++i) {
       read.read(companies[i].name, 10);
       read >> companies[i].x >> companies[i].y;
       read.read(temp, 1); // Perskaityti eilutės pabaigos simbolį. (tik \r, su \n susitvarko)
   }
   read.close();
}

// Funkcija, skaičiuojanti skaičiaus absoliutinę r-mę.
int abs(int x) {
   return (x < 0)? -x : x;
}

// Funkcija, skaičiojanti atstumą iki įmonės ir atgal.
// comp - dominanti įmonė.
int Distance(const Company& comp) {
   return 2 * (abs(comp.x) + abs(comp.y));
}

// Funkcija duomenims išvesti.
void WriteData() {
   std::ofstream write("U1rez.txt");
   write << packagesDelivered << " " << distanceTravelled << " " << lastCompanyName;
   write.close();
}

// Funkcija, atliekanti skaičiavimus.
void Solve() {
   for(int i = 0; i < n; ++i) {
       int distanceToNext = Distance(companies[i]);
       // Padiskutavus nusprendžiau, kad vis dėlto nereikia 
       // bandyti ieškoti toliau, jei negalima iki 
       // dabartinės įmonės nuvažiuot.
       if(distanceTravelled + distanceToNext > m)
           return;
       distanceTravelled += distanceToNext;
       ++packagesDelivered;
       strcpy(lastCompanyName, companies[i].name);
   }
}

int main() {
   ReadData();
   Solve();
   WriteData();

   return 0;
}

 

Ir antras, išsidirbinėjimas su char masyvais ir vengimas naudoti funkcijų iš std, kad vertintojams sueitų:

#include <fstream>
#include <cstring>
// Programos konstantos
#define MAXCITIES 103      // Didžiausias miestų skaičius
#define MAXINT 0x7FFFFFFF  // Didžiausia 'int' reikšmė
#define MAXREGIONS 10      // Didžiausias apskričių skaičius

// Pradinius duomenis (miestą) aprašanti struktūra.
struct City {
   char name[20];   // Vardas.
   char region[13]; // Apskritis.
   int numPeople;   // Gyventojų skaičius.
   int regionCode;  // (nėra duomenyse) Apskrities numeris.
} cities[MAXCITIES];

// Rezultatą (apskritį) aprašanti struktūra.
struct Region {
   char regionName[13]; // Apskrities pavadinimas.
   int minPeople;       // Mažiausio miesto gyventojų skaičius.
   int totalPeople;     // Apskrities gyventojų skaičius.

   // Palyginimo operatorius rikiavimui.
   bool operator<(const Region &a) {
       if(minPeople != a.minPeople) return minPeople < a.minPeople;
       return strcmp(regionName, a.regionName) == -1;
   }

   // Įrašo konstruktorius, nustatantis numatytas reikšmes.
   Region() : minPeople(MAXINT), totalPeople(0) {}

} regions[MAXREGIONS];

// Pradiniai duomenys - miestų skaičius.
int n;
// Rezultato kintamasis - kiek yra apskričių.
int totalRegions = 0;

// Funkcija, skirianti apskrities kodą.
// Miestai, esantys toje pačioje apskrityje, turės vienodą kodą.
// city - miesto indeksas.
int assignRegionCode(int city) {
   for(int i = 0; i < totalRegions; ++i) {
       if(strcmp(cities[city].region, regions[i].regionName) == 0) {
           return i;
       }
   }
   strcpy(regions[totalRegions].regionName, cities[city].region);
   return totalRegions++;
}

// Funkcija, sukeičianti dviejų kintamųjų reikšmes.
void swap(Region &a, Region &b) {
   Region temp = a;
   a = b;
   b = temp;
}

// Apskritis rikiuojanti funkcija.
void SortResults() {
   bool sorted = false;
   while(!sorted) {
       sorted = true;
       for(int i = 1; i < totalRegions; ++i) {
           if(regions[i] < regions[i - 1]) {
               swap(regions[i - 1], regions[i]);
               sorted = false;
           }
       }
   }
}

int main() {
   // Skaitome duomenis.
   char temp[1];
   std::ifstream read("U2.txt");
   read >> n;
   read.read(temp, 1);
   for(int i = 0; i < n; ++i) {
       read.read(cities[i].name, 20);
       read.read(cities[i].region, 13);
       read >> cities[i].numPeople;
       cities[i].regionCode = assignRegionCode(i);
       read.read(temp, 1); // Perskaityti eilutės pabaigos simbolį.
   }

   // Apdorojame ir išrikiuojame duomenis.
   for(int i = 0; i < n; ++i) {
       int code = cities[i].regionCode;
       regions[code].totalPeople += cities[i].numPeople;
       if(regions[code].minPeople > cities[i].numPeople) {
           regions[code].minPeople = cities[i].numPeople;
       }
   }
   SortResults();

   // Įrašome rezultatą.
   std::ofstream write("U2rez.txt");
   write << totalRegions << std::endl;
   for(int i = 0; i < totalRegions; ++i) {
       write << regions[i].regionName << " "
           << regions[i].minPeople << " "
           << regions[i].totalPeople << std::endl;
   }
   write.close();

   return 0;
}

 

Pasiskaityt IT vadovėlį kaip tik reikėjo using namespace std; Vadovėly nieko panašaus į savo sakinius nerasi, palyginus atrodo net kaip kita programavimo kalba :D

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nop, nėra skirtumo, galiu ir išvis be std (t.y. be ifstream/ofstream čia) rašyt :D

Sakyciau jei jau tokius dalykus kaip overloadinima bei klasiu konstruktorius naudoji, galvodamas, kad prie to nekibs vertintojai, tai tada ir standartine string biblioteka gali naudot, swapus ir kitka, ka ten panaudojai "nestandartisko pagal vadoveli"

Redagavo hafnis1324
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Uždarbiečiai, labai knieti sužinot jūsų nuomonę dėl 1 programavimo užduoties. :lol:

 

Buvo tokie pavyzdiniai duomenys:

 

5 30

Siuntuva 2 3

Auda 3 –1

Kostisa –3 –2

Linga 3 0

Austuva –2 –4

 

Tai čia akivaizdu, kad paskutinė įmonė, kuriai dar pristatys siuntą, yra Kostisa. Nuvažiuota 28 km, todėl Lingai ir Austuvai jau nepristatys.

 

Bet jeigu būtų, pavyzdžiui:

 

5 30

Siuntuva 2 3

Auda 3 –1

Kostisa –3 –2

Linga 3 0

Austuva 1 01

 

Tai kuriai, jūsų manymu, pristatytų paskutinei: Kostisai ar Austuvai? :lol:

Redagavo JohnSmith
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Įmetu su C++ padarytas užduotis. :)

 

1 užduotis, turėtų viskai gerai būti.

#include <fstream>
using namespace std;
//----------------------------- Skaitymo funkcija
void skaitymas(char imo[][11], int &n, int &m, int x[], int y[])
{
    ifstream fd("U1.txt");
    fd >> n >> m;
    for(int i = 0; i < n; i++)
    {
            fd.ignore(80,'\n');
            fd.get(imo[i],11);
            fd >> x[i] >> y[i];
    }
    fd.close();
}
//----------------------------- Skaičiavimo funkcija
void skaiciavimas(int n, int m, int x[], int y[], int &km,int &indeks)
{
    int sum = 0;
    for(int i = 0; i  < n; i++)
    {
            if(x[i] < 0) x[i] = -x[i];
            if(y[i] < 0) y[i] = -y[i];
            if(sum + ((x[i] + y[i]) * 2) <= m)
            {
                   indeks++; sum = sum + (2 * (x[i] + y[i]));
            }
            else break;
    }
    km = sum;
}
//-----------------------------   Rasymo funkcija                 
int rasymas(char imo[][11], int km, int indeks)
{
   ofstream fr("U1rez.txt");
   fr << indeks << ' ' << km << ' ' << imo[indeks-1];
   fr.close();
   return 0;
}   
int main()
{
   int n , m, x[50], y[50], km = 0, indeks = 0; // km - viso kilometrų, indeks - aptarnautų skaičius, imo - įmonių pav
   char imo[50][11];
   skaitymas(imo, n, m, x, y);
   skaiciavimas(n, m, x, y, km, indeks);
   rasymas(imo, km, indeks);
   return 0;
}

 

Pataisyta 2 uždavinio versija. Gal kas galit pasakyt, kiek už tokią klaidą prarasiu taškų, nes visa kita lyg ir gerai.

 

#include <fstream>
#include <iomanip>
using namespace std;

struct eil{
               char Mies[21];
               char Apskr[14];
               int gyv;
               bool pan;
};
struct result{
             string Apskr;
             int min;
             int sum; 
};              
void skaitymas(int &k, eil duom[]) // Nusiskaitomi failai
{
    ifstream fd("U2.txt");
    fd >> k;
    for(int i = 0; i < k; i++)
    {
            fd.ignore(80, '\n');
            fd.get(duom[i].Mies, 21); // Čia buvau padaręs klaidą, parašiau 20.
            fd.get(duom[i].Apskr,14); // Čia buvau padaręs klaidą, parašiau 13.
            fd >> duom[i].gyv;
            duom[i].pan = false;
    }
    fd.close();
}  
//----------------------------------- Įvykdomi pagrindinia skaičiaivimai
void skaiciavimai(int k, eil duom[], int &n, result gauta[])
{
    for(int i = 0;i < k; i++)
    {
            if(!duom[i].pan) 
            {
                             duom[i].pan = true;
                             gauta[n].Apskr = duom[i].Apskr;
                             gauta[n].min = duom[i].gyv;
                             gauta[n].sum = duom[i].gyv;
                             for(int j = i + 1; j < k; j++)
                                     if(strcmp(duom[i].Apskr, duom[j].Apskr) == 0)
                                     {
                                                              duom[j].pan = true;
                                                              gauta[n].sum = gauta[n].sum + duom[j].gyv;
                                                              if(duom[j].gyv < gauta[n].min)
                                                              gauta[n].min = duom[j].gyv;
                                     } 
                                     n++;
            }
    }
}
//----------------------------------- Duomenų sukeitimo funkcija
void keitimas(result gauta[], int i, int j)
{
    int temp; string tempstr;
    temp = gauta[i].min;
    gauta[i].min = gauta[j].min;
    gauta[j].min = temp;
    temp = gauta[i].sum;
    gauta[i].sum = gauta[j].sum;
    gauta[j].sum = temp;
    tempstr = gauta[i].Apskr;
    gauta[i].Apskr = gauta[j].Apskr;
    gauta[j].Apskr = tempstr;
}
//----------------------------------- Rikiavimo funkcija
void rikiavimas(result gauta[], int n)
{
    for(int i = 0; i < n; i++)
    {
            for(int j = i + 1; j < n; j++)
            {
                    if(gauta[i].min > gauta[j].min)
                      keitimas(gauta, j, i);
                      else if(gauta[i].min == gauta[j].min)
                           for(int l = 0; l< 13; l++)
                           {
                                   if((int) gauta[i].Apskr[l] > gauta[j].Apskr[l])
                                   {
                                            keitimas(gauta,i,j);
                                            break;
                                   }
                                   else if((int) gauta[i].Apskr[l] < gauta[j].Apskr[l])
                                            break;
                           }
            }
    }
}   
//-----------------------------------
void rasymas(result gauta[], int n)
{
    ofstream fr("U2rez.txt");
    fr << n << endl;
    for(int i = 0; i < n; i++)
            fr << fixed << setw(13) << left << gauta[i].Apskr << ' ' << gauta[i].min << ' ' << gauta[i].sum << endl;
    fr.close();
}
//-----------------------------------
int main()
{
   eil duom[103]; // Visi duomenys
   result gauta[10]; // Gauti rezultatai
   int k, n = 0; // n- Apskričių skaičius, k - eilučių skaičius
   skaitymas(k, duom);
   skaiciavimai(k, duom, n, gauta);
   rikiavimas(gauta, n);
   rasymas(gauta,n);
   return 0;
}

 

Labai daug gali ta klaida nulemti, nė nežinau kaip taip apsižioplinau. ;(

O tai kodel klaida cia jei parasei 20 ir 13?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Uždarbiečiai, labai knieti sužinot jūsų nuomonę dėl 1 programavimo užduoties. :lol:

 

Buvo tokie pavyzdiniai duomenys:

 

5 30

Siuntuva 2 3

Auda 3 –1

Kostisa –3 –2

Linga 3 0

Austuva –2 –4

 

Tai čia akivaizdu, kad paskutinė įmonė, kuriai dar pristatys siuntą, yra Kostisa. Nuvažiuota 28 km, todėl Lingai ir Austuvai jau nepristatys.

 

Bet jeigu būtų, pavyzdžiui:

 

5 30

Siuntuva 2 3

Auda 3 –1

Kostisa –3 –2

Linga 3 0

Austuva 1 1

 

Tai kuriai, jūsų manymu, pristatytų paskutinei: Kostisai ar Austuvai? :lol:

Kostisai, kodėl išvis toks klausimas kilo? :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Man čia panašaus neaiškumo uždavinys kaip matematikos egzamino, kur atsakymą rinkomės tarp 19 ir 20. :)

Na, pagal tavo pateiktą pavyzdį:

 

5 30

Siuntuva 2 3

Auda 3 –1

Kostisa –3 –2

Linga 3 0

Austuva 1 1

 

Po pirmų 3 stotelių jau bus 10 + 8 + 10 = 28km. Tai paskutinė ir gausis Kostisa (3).

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pirmoj jau visų taškų negausi už dvimatį char masyvą. Reikėjo i chara nusiskaityt duomenis, o tada ta chara i string perkelt ir išvengtum dvimačio masyvo.

 

Betgi neprašyta pirmoj užduotyj, kad negalima dvimačių. Tik antroj ne. Pirmą kartą girdžiu, kad jei nėra nurodymo, kad vien vienmačius naudot, negalima daugiamačių.

Redagavo PauliusPl
Nuoroda į pranešimą
Dalintis kituose puslapiuose
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ą...