X

wyswietlanie elementow tablicy

Raulpg 17 Dec 2010 00:20
  • #1 17 Dec 2010 00:20
    Raulpg
    Level 12  
    Helpful post? (0)
    Na wstepie dodam co ma robic program. Ma wyswietac numer wiersza oraz wartosc funkcji gdy ilosc wierszy nie przekracza 20. Gdy jest ich 20 lub wiecej ma wyswietlac ostatnie 20 wynikow oraz dodatkowo:

    - po nacisnieciu "tab" - ostatnie 20 wynikow
    - po nacisnieciu "backspace" - pierwsze 20 wynikow
    - po nacisnieciu "strzaka w prawo" - 20 nastepnych wynikow
    - po nacisnieciu "strzaka w lewo" - 20 poprzednich wynikow
    - po nacisnieciu "strzaka w gore" - 20 kolejnych wynikow dla liczby wierszow--
    - po nacisnieciu "strzaka w dol" - 20 kolejnych wynikow dla liczby wierszow++

    Problem ktory napotkalem jest nastepujacy: ponizszy kod dziala tylko raz tzn. po wcisnieciu np. strzalki w lewo za pierszym razem pokazuje mi co trzeba, ale gdy ja wciskam kolejny raz - nic to nie daje, a powinno sie zmieniac w analogiczny sposob. Gdzie poprawiac i jeszcze pytanie czy da sie ponizszy program bardziej uproscic, bo wiekszosc elementow sie powtarza, zmieniaja sie jedynie ograniczenia na wyswietlanie.


    Code:


    #include <iostream>
    #include <conio.h>

    int main()
    {

    int i,n=97,k=20, x[n], wybierz;

    for (i=0;i<n;i++)
        {
           x[i]=2*i;
           if (n>=20)
           {
              for (i=n-19;i<=n;i++)
                  {
                      x[i]=2*i;
                      printf("\n %d    |      %d",i, x[i]);
                  }
           }
           else printf("\n %d    |      %d",i, x[i]);
        }

        do
          {
             wybierz = getch();
             switch (wybierz)
               {
                  case 75:
                       system("cls"); // 20 rekordow-- STRZALKA W LEWO
                       for (i=n-2*k;i<=n-k;i++)
                           {
                               x[i]=2*i;
                               printf("\n %d    |      %d",i, x[i]);
                           }
                       break;
                  case 77:
                       system("cls"); // 20 rekordow++ STRZALKA W PRAWO
                       for (i=n+2*k;i<=n+k;i++)
                           {
                               x[i]=2*i;
                               printf("\n %d    |      %d",i, x[i]);
                           }
                       break;
                  case 72:
                       system("cls"); // rekord-- STRZALKA W GORE
                       for (i=n-19-1;i<=n-1;i++)
                           {
                               x[i]=2*i;
                               printf("\n %d    |      %d",i, x[i]);
                           }
                       break;
                  case 80:
                       system("cls"); // rekord++ STRRZALKA W DOL
                       for (i=n-19+1;i<=n+1;i++)
                           {
                              x[i]=2*i;
                              printf("\n %d    |      %d",i, x[i]);
                           }
                       break;
                  case 8:
                       system("cls"); // start BACKSPACE
                       for (i=0;i<k;i++)
                           {
                              x[i]=2*i;
                              printf("\n %d    |      %d",i, x[i]);
                           }
                       break;
                  case 9:
                       system("cls"); // koniec TAB
                       for (i=n-19;i<n;i++)
                           {
                              x[i]=2*i;
                              printf("\n %d    |      %d",i, x[i]);
                           }
                       break;
               }
          }

        while (wybierz != 27);

    return 0;
    }




  • #2 17 Dec 2010 01:59
    voland
    Level 14  
    Helpful post? (0)
    ogólnie nie do końca rozumiem co ma robić twój program.
    Masz 27 elementow tablicy i wyświetla ostatnie 20 zatem jeśli naciśniesz strzałkę w lewo to ma wyświetlić od 0-7 czy od 0-20? tak czy owak widzę że twój program próbuje wyświetlić od
    Code:
    i=n-2*k; 
    czyli jakieś 27-40=-13 do n-k czyli 7, oczywiście próba wpisania jakiejkolwiek liczby pod ten index tablicy
    Code:
    x[-13]=-26;
    musi zakończyć się zawieszeniem programu albo brakiem reakcji programu.

    Dodano po 7 [minuty]:

    dodatkowo jeśli chcesz uprościć kod można to zrobić na przykład tak:
    Code:


    do {
       wybierz = getch();
       int od, do_;
       switch (wybierz) {
          case 75:
             od=n-2*k; do_=n-k;
             break;
          case 77:
             od=n+2*k; do_=n+k;
             break;
          case 72:
             od=n-19; do_=n-1;
             break;
          case 80:
             od=n-19+1; do_ =n+1;
             break;
          case 8:
             od=0; do_=k-1;
             break;
          case 9:
             od=n-19; do_=n-1;
             break;
       }
       system("cls");
       for (i=od;i<=do_;i++) {
          x[i]=2*i;
          printf("\n %d    |      %d",i, x[i]);
       }
    }
  • #3 17 Dec 2010 20:28
    Raulpg
    Level 12  
    Topic author Helpful post? (0)
    już zmieniłem n=97 i tak na starcie w tym wypadku ma wyświetać 20 ostatnich wynikow czyli od 78 do 97. Gdy raz nacisne strzalke w lewo ma wyswietlac wyniki od 58 do 77. Gdy drugi raz nacisne strzalke w lewo ma wyswietlac od 38 do 57 itd. Mam na razie zrobione tak, ze za kazdym razem gdy wciskam strzalke w ewo wyswietla mi wyniki od 58 do 77. Analogicznie jest z innymi kawiszami (poza TAB i BACKSPACE - one dziaaja dobrze). Co do przekroczenia zakresow - wiem, ze sa bledy, ale mysle ze bede w stanie sie z tym uporac. Najwazniejsze jest by roziazac ten problem ze strzalkami, by program zapamietywal bierzace pozycje i w oparciu o nie tworzyl dalsze wyswietlanie.
  • #4 18 Dec 2010 21:38
    Raulpg
    Level 12  
    Topic author Helpful post? (0)
    juz sobie sam poradzilem, dziala jak chcialem
  Search 4 million + Products
Browse Products