eMatematikas Prisijunk Forumas Užduotys Testai Pradžia

Vienmačio masyvo elementu paieška


Sveiki  gal kas galite paaiškinti kaip padaryti tokio tipo uždavini c++ ?
Vienmačio masyvo duomenų sekos elementai išskyrus 3 yra skirtingi. Parašykite programa nurodančia kurie tai elementai ir tų elementu reikšme.
Duomenys faile Duomenys.txt
15
22 17 14 -65 12 94 34 59 12 -2 97 30 45 12 -89
Atsakymas faile Rezultatai.txt
5 9 14
12

Turbūt efektyvaus sprendimo čia nereikia, tad paprasčiausiai suk ciklą cikle ir lygink visus elementus poromis iki kol surasi du vienodus, išsaugok jų indeksus ir likusioje masyvo dalyje surask trečią pasikartojantį skaičių.

pagrindinis ciklas rasos taip  for (int i =0 i <= n - 1; i++) ?? kaip vdini cikla parasyt nesu darius tokiu dalyku kaip lyginti elementus poromis tai nemoku :D


bool found = false;
for (int i = 0; !found; i++){
  for (int j = i + 1; !found; j++){
    if (mas[i] == mas[j]){
    //suradome pora lygiu elementu
    found = true;
      ...
    }
  }
}
//randame paskutini elementa
...

Kadangi pagal sąlygą visad bus randami pasikartojantys elementai, tai dėl masyvo rėžių peržengimo nereikia jaudintis, tad sukam pirmus ciklus iki kol radom lygius elementus.
Per pirmą išorinio ciklo iteraciją bus patikrinta ar pirmas masyvo elementas lygus kokiam nors elementui iš likusios masyvo dalies (todėl antram cikle yra j=i+1, o ne j=i, nes kitaip tikrintų ar jis yra lygus pats sau). Per antrą iteraciją bus patikrinta ar jis yra lygus kokiam nors tolimesniam masyvo elementui (buvusių elementų tikrinti jau nereikia, nes jie buvo patikrinti ankstesnėse iteracijose). Na ir taip sukasi karuselė iki kol randama pirma pora.
Tada turbūt reikėtų išsaugoti jų indeksus ir surasti paskutinį elementą jau žinant kokio skaičiaus ieškome ir nuo kurios masyvo vietos reikėtų ieškoti. Nors panorėjus galima viską sukišti ir į tą patį ciklą, bet čia skonio reikalas.
Jei nelabai aišku kaip kas veikia, tai labai viską padeda suprasti pabandymas ciklą prasukti popieriuje arba į programoje padaryti tarpinius išvedimus :). Dar puikiai padeda debugginimas + watches, bet gal nekvaršinsiu aš tau daugiau galvos :D

valdas3
bool found = false;
for (int i = 0; !found; i++){
  for (int j = i + 1; !found; j++){
    if (mas[i] == mas[j]){
    //suradome pora lygiu elementu
    found = true;
      ...
    }
  }
}
//randame paskutini elementa
...

Kadangi pagal sąlygą visad bus randami pasikartojantys elementai, tai dėl masyvo rėžių peržengimo nereikia jaudintis, tad sukam pirmus ciklus iki kol radom lygius elementus.
Per pirmą išorinio ciklo iteraciją bus patikrinta ar pirmas masyvo elementas lygus kokiam nors elementui iš likusios masyvo dalies (todėl antram cikle yra j=i+1, o ne j=i, nes kitaip tikrintų ar jis yra lygus pats sau). Per antrą iteraciją bus patikrinta ar jis yra lygus kokiam nors tolimesniam masyvo elementui (buvusių elementų tikrinti jau nereikia, nes jie buvo patikrinti ankstesnėse iteracijose). Na ir taip sukasi karuselė iki kol randama pirma pora.
Tada turbūt reikėtų išsaugoti jų indeksus ir surasti paskutinį elementą jau žinant kokio skaičiaus ieškome ir nuo kurios masyvo vietos reikėtų ieškoti. Nors panorėjus galima viską sukišti ir į tą patį ciklą, bet čia skonio reikalas.
Jei nelabai aišku kaip kas veikia, tai labai viską padeda suprasti pabandymas ciklą prasukti popieriuje arba į programoje padaryti tarpinius išvedimus :). Dar puikiai padeda debugginimas + watches, bet gal nekvaršinsiu aš tau daugiau galvos :D

ačiū supratau viska :)

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