eMatematikas Prisijunk Forumas Egzaminų užduotys ONLINE testai

C plius plius uždavinys. Kodo konvertavimas (RGB)


Sveiki, užstrigau su vienu uždaviniu. Gal galėtumėte padėti išspręsti ir atrasti mąstymo klaidą? :)
Uždavinio sąlyga prašo tam tikrą koda paversti kitu kodu...
Pradiniai duomenys:
2 3
008000
FF0000
FFFFFF
FFFF00
FF0000
FFFF00

(Klaida "keitimas" funkcijoje)
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

const char in[]="Duomenys.txt";
const char out[]="Rezultatai.txt";
const int CMax=100;


void skaityti(const char in[], int skc[][CMax], string kodas[], int & m, int & l, int & n);
void keitimas(int skc[][CMax], string kodas[], int m, int l, int n);

int main()
{
    int m; // ilgis
    int l; // plotis
    int n; // kiekis
    string kodas[CMax];
    int skc[CMax][CMax];

    skaityti(in,skc,kodas,m,l,n);
    cout<<n<<endl;
    keitimas(skc,kodas,m,l,n);
    return 0;
}

void skaityti(const char in[], int skc[][CMax], string kodas[], int & m, int & l, int & n){
    ifstream fd(in);
    fd>>m>>l;
    n=0;
    while(!fd.eof()){
        fd>>kodas[n];
        cout<<kodas[n]<<endl;
        n++;
    }
    fd.close();
}

void keitimas(int skc[][CMax], string kodas[], int m, int l, int n){

    for(int i=0; i<n; i++){
        for(int h=0; h<(m*l); h++){
          for(int j=0; j<l; j++){
        if(kodas[i][h]=='F' && kodas[i][h+1]=='F'){
              skc[i][j]=255;
            }

        if(kodas[i][h]=='8' && kodas[i][h+1]=='0'){
                skc[i][j]=128;
                }

        if(kodas[i][h]=='0' && kodas[i][h+1]=='0'){
                skc[i][j]=0;
                }

        }
        h++;
    }
    }

    for(int i=0; i<n; i++){
        for(int j=0; j<l; j++){
            cout<<skc[i][j]<<"  ";
        }
        cout<<" "<<endl;
    }

}

Rezultatai turėtų gautis:
0 128 0
250 0 0
250 250 250
250 250 00
250 0 0
250 250 0

Čia užduotis iš valstybinio egzamino kiek pamenu.
Bent jau aš daryčiau lengvesniu būdu: nusiskaityčiau po 2 elementus ir perduočiau keitimo funkcijai, kuri paverstų tuos du elementus į dešimtainį kodą ir juos išsaugočiau į atskirą masyvą.

Antra, tau reikia parašyti keitimo funkciją (int tipo), kuri grąžina vieną reikšmę, o ne procedūrą (void tipo).

pakeista prieš 6 m

Ok pabandysiu kitu būdu.. čia per daug ciklų pas mane
(Btw čia iš VBE bandomasis)

Gal žinot kodėl meta klaidą?

void skaityti(const char in[], int skc[][CMax], int & m, int & l, int & n){
    ifstream fd(in);
    fd>>m>>l;
    n=0;
    char eil[m+1];
    string pav;
    while(!fd.eof()){
        cout<<n<<endl;
            fd.ignore(80, '\n');
            for(int j=0; j<l; j++){
                for(int i=0; i<m; i++){
                    fd.get(eil,m);
                    pav[i]=eil;                  // klaida
                    fd.ignore(80, '\n');
        }
        cout<<pav<<endl;
        skc[n][l]=grazinimas(pav,n);
        //cout<<skc[n][l]<<endl;;
        cout<<" ";
        }
        cout<<"  "<<endl;
        n++;

    }
    n--;
    fd.close();
}



int grazinimas(string pav, int n){
    int x;

    if(pav[0]=='F' && pav[1]=='F'){
              x=255;
          }
  if(pav[0]=='8' && pav[1]=='0'){
                x=128;
                }

    if(pav[0]=='0' && pav[1]=='0'){
              x=0;
            }

return x;
}

Klaida buvo, kad nereikia [i] prie pav, bet kodėl nenuskaito pirmu 2 raidžių?

Vadovaukis tokia logika:







void Skaitymas(int &n, string Eilutes[]);
void Rasymas(int Skaiciai[][3], int n);
int Konvertavimas(char pirmas, char antras);

int main()
{
    int n;
    string Eilutes[6];
    Skaitymas(n, Eilutes);
    int Skaiciai[6][3];
    for (int i=0; i<n; i++)
        for (int j=0; j<3; j++)
            Skaiciai[i][j] = Konvertavimas(Eilutes[i][j*2], Eilutes[i][j*2+1]);
    Rasymas(Skaiciai,n);
    return 0;
}

void Skaitymas(int &n, string Eilutes[])
{
    ifstream fd("duom.txt");
    fd >> n;
    for (int i=0; i<n; i++)
        fd >> Eilutes[i];
    fd.close();
}

int Konvertavimas(char pirmas, char antras)
{
    int skaicius;
    if(pirmas-'0'<10)
        skaicius=(pirmas-'0')*16;
    else
        skaicius=(pirmas-'A'+10)*16;
    if(antras-'0'<10)
        skaicius+=antras-'0';
    else
        skaicius+=(antras-'A'+10);
    return skaicius;
}

void Rasymas(int Skaiciai[][3], int n)
{
    ofstream fr("rez.txt");
    for (int i=0; i<n; i++)
        fr << Skaiciai[i][0] << " " <<Skaiciai[i][1] << " " << Skaiciai[i][2] << endl;
    fr.close();
}

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