Informatică, întrebare adresată de TrinityZ, 8 ani în urmă

C++ Numai cu if si while, am o problema in cod nu reusesc sa aflu de ce nu i-au 100 de puncte.

Paul se joacă un nou joc pe calculator. În el, trebuie să traverseze o zonă montană cât mai rapid posibil. Uitându-se pe harta jocului, el poate observa toate înălțimile terenului din jurul său. Astfel, el poate alege secvența de pași pe care să o facă pornind din punctul în care se află și până la destinație.


Fiind o zonă montană, e posibil ca drumul ales de Paul să urce, iar apoi să coboare pe munte. El se gândește că ar fi bine să evite un astfel de drum, deoarece ar însemna mai mult efort din partea lui. La fel, după ce a coborât o pantă, Paul ar prefera să nu trebuiască să urce din nou.


Cerință

Paul a desenat pe hartă un drum pe care ar putea să o ia pentru a ajunge la destinație. A notat înălțimea fiecărei bucăți de teren pe o hârtiuță, în ordinea în care trebuie să le parcurgă.


Ți se dă șirul de înălțimi ca un șir de numere întregi, nenule, separate prin spațiu. Șirul de numere se încheie cu valoarea 0, care nu face parte din înălțimi (doar marchează finalul șirului). Să se precizeze dacă șirul de înălțimi este crescător, descrescător sau nemonoton. Spunem că un șir e nemonoton dacă nu este nici crescător, nici descrescător în întregime.


Date de intrare

Se dă un șir de numere naturale urmat de valoarea 0.


Date de ieșire

Se va afișa unul dintre mesajele crescator, descrescator sau nemonoton.


Restricții și precizări

Înălțimile sunt numere cuprinse între 0 și 10 000

Se vor citi maxim 1 000 de numere

0 nu face parte din șirul de înălțimi, doar marchează finalul șirului

Pentru simplitate, dacă toate numerele sunt egale sau nu există nicio valoare înaintea lui 0, șirul se consideră nemonoton

Exemple

Date de intrare Date de ieșire

1 2 5 5 10 11 0 crescator

16 7 3 0 descrescator

1 2 2 1 0 nemonoton


Iar codul scris e urmatorul

#include


using namespace std;


int main() {


int a, b = 0, nr = 0, M = 2;


cin >> a;


if (a > 0 && a < 10000){


while (a != 0)


{ b = a;


cin >> a;


if (M != 0 && a != 0)


{ if (a != b) {


nr = 1;


}


if (a >= b && (M == 2 || M == 1))


{


M = 1;


}


else if (a <= b && (M == 2 || M == -1))


{


M = -1;


}


else if (a >= b && M == -1)


{


M = 0;


}


else if (a <= b && M == 1)


{


M = 0;


}


}


}


if ((M == 1 && nr == 0) || M == 0 || M == 2) {


cout << "nemonoton";


}


else if (M == 1) {


cout << "crescator";


}


else if (M == -1) {


cout << "descrescator";


}


}


}


Cu ce gresesc?

Răspunsuri la întrebare

Răspuns de lucaciucandrei
3

#include <iostream>

using namespace std;

int main() {

   int x, y = 0, z = 2, k=0;

   cin >> x;

   while (x != 0) {

       y = x;

       cin >> x;

       if (z != 0 && x != 0) {

           if (x != y)

               k = 1;

           if (x >= y && (z == 2 || z == 1))

               z = 1;

           else

               if (x <= y && (z == 2 || z == -1))

                   z = -1;

               else

                   if (x >= y && z == -1)

                       z = 0;

                   else

                       if (x <= y && z == 1)

                           z = 0;

       }

   }

   if ((z==1 && k==0) || z == 0 || z == 2)

       cout << "nemonoton";

   if (z == 1)

       cout << "crescator";

   if (z == -1)

       cout << "descrescator";

   return 0;

}


TrinityZ: buna, mersi pt ajutor, dar codul tot la fel se comporta si i-au tot 90 de puncte
lucaciucandrei: ma mir..
TrinityZ: pai daca testezi de exemplu 17 17 3 0 da nemonoton inloc sa deie decrescator
TrinityZ: poti sa ma ajuti sa inteleg cu ce gresesc>
Alte întrebări interesante