eMatematikas Prisijunk Forumas Užduotys Testai Pradžia

C++ Spalvotos korteles Masyvo paieska ir naikinimas


Taigi pradejau mokintis paieska masyve bei masyvo naikinima ir nesuprantu kaip iveikti sia uzduoti? Galbut kas nors galite padeti?
http://i.gyazo.com/550c2ec64c3be0cd864f926b39607652.png

Gal paprasčiau daryti su 2 masyvais. Susikurk kokią nors struktūrą kurią sudarytų kortelės spalva ir numeris. Pirmame masyve dėtum visas kortelės, nebent pasitaikytų pasikartojanti kortelė, tada ją įdėtum į antrąjį masyvą. Kai turėsi nusiskaitęs visas korteles, tai surikiuok masyvą pagal spalvą ir numerį. Tada tiesiog eik per masyvą ir žiūrėk ar yra sekų kurios tenkina duotas sąlygas. Tą patį daryk ir su antru masyvu. Galima apsieiti ir be antrojo masyvo, reikėtų "šalinti" elementus iš pirmojo masyvo kai randama seka, dar sekos ieškojimas gali tapti kiek sunkesnis, bet iš esmės jokio skirtumo.

valdas3Gal paprasčiau daryti su 2 masyvais. Susikurk kokią nors struktūrą kurią sudarytų kortelės spalva ir numeris. Pirmame masyve dėtum visas kortelės, nebent pasitaikytų pasikartojanti kortelė, tada ją įdėtum į antrąjį masyvą. Kai turėsi nusiskaitęs visas korteles, tai surikiuok masyvą pagal spalvą ir numerį. Tada tiesiog eik per masyvą ir žiūrėk ar yra sekų kurios tenkina duotas sąlygas. Tą patį daryk ir su antru masyvu. Galima apsieiti ir be antrojo masyvo, reikėtų "šalinti" elementus iš pirmojo masyvo kai randama seka, dar sekos ieškojimas gali tapti kiek sunkesnis, bet iš esmės jokio skirtumo.

Aš kaip ir suprantu tą salygą, bet man neina kažkaip suderint tų visų funkcijų, nes mokinuos savarankiškai ir šiek tiek sunku suvokt kaip ten veikia visi tie šalinimai ir ieškojimai.

Ką tu vadini šalinimu iš masyvo? Kaip tai atrodo? Kokias funkcijas čia nori naudoti? Čia mokyklai mokaisi, taip? Kas būtent nesigauna pačiam rašant programą?

Sveiki prikeliu temą, nes kilo sunkumu su šiuo uždaviniu, jau kuris laikas vargstu...
Niekaip nesugalvoju kaip tas sekas tikrint, gal kas galit patart, ar kitaip pagelbėti.
Kodas


#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;

const char CD[]="duom.txt";
const char CR[]="rez.txt";

struct Korta
{
    char sp;      //spalva
    int  nr;    //numeris
};

void duomenys(Korta A[], int &n);
void priskirti(Korta A[], Korta R[], int n, int &r, char SP);
void ieskotiVienodu(Korta R[], Korta G[], Korta M[], Korta J[], int &r, int &g, int &m, int &j);
void salinti(Korta A[], int kuris, int &n);
void rikiuoti(Korta A[], int n);
void spauzdinti(Korta R[], Korta G[], Korta M[], Korta J[], int r, int g, int m, int j);

int main ()
{
    int n;          //korteliu skaicius
    Korta A[100], R[100], G[100], M[100], J[100];

    duomenys(A, n);

    int r, g, m, j;
    priskirti(A, R, n, r, 'R');
    priskirti(A, G, n, g, 'G');
    priskirti(A, M, n, m, 'M');
    priskirti(A, J, n, j, 'J');

    ieskotiVienodu(R, G, M, J, r, g, m, j);

    rikiuoti(R, r);
    rikiuoti(G, g);
    rikiuoti(M, m);
    rikiuoti(J, j);

    spauzdinti(R, G, M, J, r, g, m, j);
    return 0;
}

void duomenys(Korta A[], int &n)
{
    ifstream fd(CD);
    fd >> n;
    for(int i=0; i<n; i++)
        fd >> A[i].sp >> A[i].nr;
    fd.close();
}

void priskirti(Korta A[], Korta R[], int n, int &r, char SP)
{
    r=0;
    for(int i=0; i<n; i++)
        if(A[i].sp==SP)
        {
            R[r]=A[i];
            r++;
        }
}

void ieskotiVienodu(Korta R[], Korta G[], Korta M[], Korta J[], int &r, int &g, int &m, int &j)
{
    int rV=0, gV=0, mV=0, jV=0;    //kintamieji isaugoti salinamo elemento numeriui

    for(int i=0; i<r; i++)
        if(R[i].sp==R[i+1].sp&&R[i].nr==R[i+1].nr)
        {
            rV=i;
            salinti(R, rV, r);
        }
    for(int i=0; i<g; i++)
        if(G[i].sp==G[i+1].sp&&G[i].nr==G[i+1].nr)
        {
            gV=i;
            salinti(G, gV, g);
        }
    for(int i=0; i<m; i++)
        if(M[i].sp==M[i+1].sp&&M[i].nr==M[i+1].nr)
        {
            mV=i;
            salinti(M, mV, m);
        }
    for(int i=0; i<j; i++)
        if(J[i].sp==J[i+1].sp&&J[i].nr==J[i+1].nr)
        {
            jV=i;
            salinti(J, jV, j);
        }
}

void salinti(Korta A[], int kuris, int &n)
{
    for(int i=kuris; i<n; i++)
        A[i]=A[i+1];
    n--;
}

void rikiuoti(Korta A[], int n)
{
    for(int i=0; i<n-1; i++)
        for(int j=i+1; j<n; j++)
            if(A[i].nr > A[j].nr) swap(A[i], A[j]);
}

void spauzdinti(Korta R[], Korta G[], Korta M[], Korta J[], int r, int g, int m, int j)
{
    ofstream fr(CR);

    ?????????

    fr.close();
}

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