eMatematikas Prisijunk Forumas Užduotys Testai Pradžia

Nesuprantu, kur klaida su mano šalinimo kodu



#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
void salinimas (int ma[],int kuris,int &a)
{
    for(int j=kuris;j<a;j++)
    {
        ma[j]=ma[j+1];

    }
    a--;
}
int main()
{
int a=4;
int ma[3];
ma[0]=0;ma[1]=1;ma[2]=2;ma[3]=3;
for(int i=0;i<a;i++)
{
    if(ma[i]>=0)
    {
        salinimas(ma,i,a);
    }
    cout<<ma[i]<<endl;

}
return 0;
}

Malonėkite plačiau papasakoti ką šita programa turi daryti.

Sita programa turetu pasalinti visus skaicius kurie yra daugiau arba 0. Bet cia nesvarbu kokia if salyga as padryciau man visvien nesalina skaitmenu is masyvo arba nesamoningai juos pasalyna.

Na čia esmine klaida tame kad kai pašalinamas elementas ciklo iteracija tesiasi toliau, o reikia kad prasidėtų iš naujo nes kitu atveju yra praleidžiamas kas antras masyvo elementas. Nors čia aišku tas pašalinimas yra sąlyginis, nes pašalinti elementą iš statiško masyvo neįmanoma, nes masyvo dydis vistiek išlieka toks pats. Mano sprendimas būtų toks:
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
void salinimas (int ma[],int kuris,int &a)
{
    for(int j=kuris;j<a;j++)
        ma[j]=ma[j+1];
    a--;
}
int main()
{
int a=10;
int i=0;
int ma[10] = {0, 1, 2, 3,-1,-5,-6,23,45,-15};
while(i<a)
{
    if(ma[i]>=0)
    {
        salinimas(ma,i,a);
        i=0;
    } else {
    i++;
    }
}
for (int j=0;j<a;j++){
    cout<<ma[j]<<endl;
}
return 0;
}

pakeista prieš 11 m

Dekui :))

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