Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Kategoria: Akumulatorki / Baterie / Ładowarki

wyswietlanie elementow tablicy

Raulpg 17 Gru 2010 00:20
  • #1 17 Gru 2010 00:20
    Raulpg
    Poziom 12  

    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 Gru 2010 01:59
    voland
    Poziom 14  

    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 Gru 2010 20:28
    Raulpg
    Poziom 12  

    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 Gru 2010 21:38
    Raulpg
    Poziom 12  

    juz sobie sam poradzilem, dziala jak chcialem

  Szukaj w 4mln produktów
Przeglądaj produkty