Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

XII ćwiczenie.

Ostatnio zmodyfikowano 2009-11-03 00:19
Autor Wiadomość
naiL
Temat założony przez niniejszego użytkownika
XII ćwiczenie.
» 2009-10-15 08:58:05
czy mogli byście podać pi razy oko jak wygląda ta trójwymiarowa tablica char?
jakos mam zamglenie umyslu. dziekuje z gory. problem 10 latka normalnie nic nie kumam :]
P-10906
malan
» 2009-10-15 09:30:22
char * Tablica[ 10 ][ 20 ][ 30 ];
P-10907
Elaine
» 2009-10-15 10:49:25
Tablica char, nie tablica wskaźników na char.
char foo[ 8 ][ 11 ][ 42 ];
Swoją drogą, pisanie * przy nazwie zmiennej jest brzydkie - typem jest char*, a nie char, twój zapis sugeruje, że jest to wskaźnik na tablicę, czyli u ciebie bardziej to wygląda na
char( * Tablica )[ 10 ][ 20 ][ 30 ];
P-10908
naiL
Temat założony przez niniejszego użytkownika
» 2009-10-15 14:10:48
ok. ok.
w sumie już sobie wyszperałem z postów. chodziło mi raczej o "konstrukcję":
C/C++
char tabilca[ 5 ][ 10 ][ 10 ] =
{
    { "zdanie1",
        "zdanie2",
        "zdanie3",
    }
    { "...",
    }
    itd.3x jeszcze.
};
szukałem tych {{ podwójnych nawiasów }} ;) w kursie zabrakło określeń o podnawiasach... nie każdy kończył informatykę ;)

a co do programu i jego pomyslu kurczem... niech bedzie to sprawdzian sficzów i ifów ale sam cel nie doosiągnięcia. wchodzimy w menu menu i co dalej?. p-powrót do menu skoro nie ma co usuwać w drugim wyborze? :) buziaki.

co wybierasz szefie?2

[lista dokumentów]1. group id 2. gropu id 3. group id

co wybierasz szefie?3
no i tu pokazuje sie zamiast USUWAM group id# :) cos co miało byc przy pierwszym wyborze jako 3->[lista oczekujacych prac]. bzdura.

 ok to tylko ćwiczenie ale skoro mamy zrealizować przykład używając logicznych wyrażeń brakuje powrotu. tak sie czepiam bo nie mogę przejść dalej w kursie i jestem zły na siebie że za bardzo wnikam.

P-10915
naiL
Temat założony przez niniejszego użytkownika
» 2009-10-18 17:22:35
Szukam w forum pomocy bo głupieje do reszty. kolega Mariuis boryka się chyba z tym samym problemem ale mimo odpowiedzi pana Piotra nic z tego nie wynika.
 Trochę sobie poimprowizowałem w ćwiczeniu dodając do niego własnych "pomysłów". Starałem się przy okazji wykorzystać to co opisano do lekcji XII. Ale problemy mam dwa. durne na maksa. Może ktoś będzie szukał rozwiązań poszczególnych etapów programu z ćwiczenia XII. Ja osobiście nie mogłem przejść przez etap budowania tablicy trójwymiarowej typu char i tymi klamerkami :) jakoś sobie to inaczej wyobrażałem. To moja wizja:
-------
C/C++
#include <iostream>
#include <conio.h>
#include "ddtconsole.h"
#include <ctime>
#include <cctype>

int main()
{
    using namespace ddt::console;
    using namespace std;
   
   
   
   
   
    // tablica danych do cout
    char tablica_3D[ 6 ][ 10 ][ 100 ] =
    // podwojne nawiasy {{}}WOW.:)
    {
       
       
        //menu glowne administrowania DDT
        {
            "1. Czytaj logi",
            "2. Usun temat",
            "3. Lista oczekujacych prac",
            "4. Pauza",
            "5. Koniec",
            "Administrowanie forum  DDT"
        },
       
       
        //czytaj logi
        {
            "log log log log log log log log log log log log w ktorym nie ma nic ciekawego",
            "log log log log log log log log log log log log w ktorym nie ma nic ciekawego",
            "1blablablablabla blabl abl ba lb labl bal bla lb labl blabl bla ",
            "koniec glupot"
        },
       
       
        //tematy do usuniecia
        {
            "Tematy Przeznaczone do usuniecia:",
            "1. GroupID = 191",
            "2. GroupID = 163",
            "3. GroupID = 671",
        },
       
       
        // lista oczekujacych prac
        {
            "1. Dokumentacja",
            "2. Artykuly",
            "3. Dzial Pliki",
            "4. Sygnatury zamkniecia by Dante"
        },
       
       
        // komunikaty programu
        {
            "Nie podano cyfry, sprobuj ponownie!",
            "Aplikacja zakonczy dzialanie za <sek.> ",
            "Co wybierasz szefie? ",
            "Szefie zrob sobie przerwe. Ile minut potrzebujesz? ",
            "Niestety przerwa minela czas wracac do pracy! ",
            "Twoja przerwa wyniesie <w sekundach> ",
            "Koniec na dzisiaj? No to do jutra!",
            "No chwileczke... moze lepiej pojdziesz odrazu do domu?"
        },
       
        // to sa wywolane "procedury"-> ktorych nie ma wyswietlony bedzie jedynie komunikat wykonania
        {
            "Wcisnij cokolwiek - powrot do menu glownego."
        }
    };
    // deklaracje
   
    int wybor;
    enum { czytaj_logi = 1, tematy = 2, prace = 3, pauza = 4, end = 5 };
    float minuty;
    int x = 1;
    int y = 8;
    int kolory[ 5 ] = { 15, 15, 7, 8, 1 }; // kolorki do sekundnika?
   
    // menu programu
    title( "Administrowanie forum DDT" );
    //                   clrscr;
    textcolor( 7 );
    gotoxy( 26, 2 );
    cout << tablica_3D[ 0 ][ 5 ];
    textcolor( 11 );
    gotoxy( 21, 4 );
    cout << tablica_3D[ 0 ][ 0 ] << "\t" << tablica_3D[ 0 ][ 2 ];
    gotoxy( 21, 5 );
    cout << tablica_3D[ 0 ][ 1 ] << "\t" << tablica_3D[ 0 ][ 3 ];
    gotoxy( 34, 6 );
    cout << tablica_3D[ 0 ][ 4 ];
    cout << "\n" << "\n";
   
    // poczatek glownej petli programu
    for(;; )
    {
       
        // nie chce zeby uciekalo menu... raz wyswietlone wystarczy. taka improwizacja do cwiczenia           
        // pela czysci ekran od pozycji 1,8 do +/- 80,25)    
       
        gotoxy( 1, 8 );
        for( int iy = 0; iy < 17; iy++ )
        {
            for( int ix = 0; ix < 80; ix++ )
            {
                gotoxy( x, y );
                cout << " ";
                x++;
            }
            y++;
        }
        // wybor opcji
       
        gotoxy( 1, 8 );
        cout << tablica_3D[ 4 ][ 2 ];
        ( cin >> wybor ).get();
       
       
        if( !isalpha( wybor ) &&( wybor == 1 || wybor == 2 || wybor == 3 || wybor == 4 || wybor == 5 ) ) // na probe
        {
            switch( wybor )
            {
            case czytaj_logi:
                gotoxy( 1, 9 );
                cout << tablica_3D[ 1 ][ 0 ] << "\n"
                << tablica_3D[ 1 ][ 1 ] << "\n"
                << tablica_3D[ 1 ][ 2 ] << "\n";
                break;
               
            case tematy:
                gotoxy( 26, 9 );
                cout << tablica_3D[ 2 ][ 0 ];
                gotoxy( 1, 10 );
                cout << tablica_3D[ 2 ][ 1 ] << "\t"
                << tablica_3D[ 2 ][ 2 ] << "\t"
                << tablica_3D[ 2 ][ 3 ] << "\n";
                break;
               
            case prace:
                gotoxy( 1, 9 );
                cout << tablica_3D[ 3 ][ 0 ] << "\t"
                << tablica_3D[ 3 ][ 1 ] << "\n"
                << tablica_3D[ 3 ][ 2 ] << "\t"
                << tablica_3D[ 3 ][ 3 ] << "\n";
                break;
               
            case pauza:
                cout << tablica_3D[ 4 ][ 3 ];
                cin >> minuty;
                cout << "\n";
                if( minuty > 10 ) // zeby nie przesadzac
                {
                    cout << tablica_3D[ 4 ][ 7 ];
                    break;
                }
               
                cout << tablica_3D[ 4 ][ 5 ] << minuty * 60 << "\n";
               
                clock_t koniecpauzy;
                koniecpauzy = clock() + minuty * 60 * CLOCKS_PER_SEC;
                while( clock() < koniecpauzy ) { }
                cout << "Koniec Pauzy";
               
               
               
                break;
               
               
            case end:
                cout << tablica_3D[ 4 ][ 6 ] << "\n";
                cout << tablica_3D[ 4 ][ 1 ];
                for( int s = 5; s > 0; s-- )
                {
                    for( int nx = 0; nx <= 5; nx++ )
                    {
                        textcolor( kolory[ nx ] );
                       
                        gotoxy( 40, wherey() );
                        cout << s;
                       
                        clock_t ktnx;
                        ktnx = clock() + 0.1 * CLOCKS_PER_SEC;
                        while( clock() < ktnx );
                       
                    }
                    clock_t koniecend;
                    koniecend = clock() + 0.5 * CLOCKS_PER_SEC;
                    while( clock() < koniecend ) { }
                }
                return( 0 );
                break;
               
                default:
                gotoxy( 1, 8 );
                for( int iy = 0; iy < 17; iy++ )
                {
                    for( int ix = 0; ix < 80; ix++ )
                    {
                        gotoxy( x, y );
                        cout << " ";
                        x++;
                    }
                    y++;
                }
               
                gotoxy( 1, 8 );
                cout << tablica_3D[ 4 ][ 0 ];
                getch();
                break;
            }
        } else
       
             cout << "Nic z menu";
       
        if( isalpha( wybor ) )
        {
            cout << ", na dodatek to nie cyfry";
            getch();
        }
       
       
        cout << "\n";
        cout << tablica_3D[ 5 ][ 0 ];
        getch();
    } // koniec for( ; ; )
    // return(0) jest tylko w case koniec.
}
-----
Cały program to pętla for( ; ; ){..}.

#1. używam przepisu na pauzę z cpluplus.com tyle co zakumałem.
problem jest taki że w case pauza działa jeśli wykomentuję /*case end */.
jak dziala jedno to drugie nie i odwrotnie. w sumie to raz działa raz nie :] ale to mały problem raczej grymas kompilatora, ustawień DevCplusa tylko czemu ? :)

#2 tu mnie pewnie trochę wyobraźnia poniosła ale
C/C++
if( !isalpha( wybor ) &&( wybor == 1 || wybor == 2 || wybor == 3 || wybor == 4 || wybor == 5 ) )
mo ż e to zbyt wybuja ł e ale chcia ł em sprawdzi ć czy podzia ł a w ten spos ó b
if( cctype &&( b ó l || b ó l ) ).nie za bardzo wiem jak to okre ś li ć fachowo
{
    switch...sie tu zaczyna
    {...}
    else
   
         cout << "Nic z menu";
   
    if( isalpha( wybor ) )
    {
        cout << ", na dodatek to nie cyfry";
        getch();

problem mam taki... że program po ominięciu if(!isalpha....){switch}} wykonuje else. w else ma sprawdzić czy to czasem nie jest literka...ma dodać do zdania "..., na dodatek to nie cyfry".
potem wykonuje ostatni rozkazy petli for( ; ; ) czeka na getch().
Ale. Zdaje się, że program pamięta ostatnią wartość 'wybor' wprowadzaną przez cin >> wybor.
Jeśli przetestuję program wybierając poprawnie z menu 1,2,3,4(bez 5- w case end kończy się return(0) i się program ma mi skończyć). Wszystko cacy. Mam nadzieję, że zgodnie z założeniami ćwiczenia. Ale jeśli po wciśnięciu klawisza (getch()); pyta mnie ponownie o co chce szef i wprowadzę głupoty, program wykonuje ostatni case i się "psuje".
Jeśli przetestuję program wybierając cokolwiek innego np wprowadzając "1234"
pokazuje mi że to "Nic z menu, "(i o dziwo?) " na dodatek to nie cyfry";
Jeśli wpiszę "123" pokazuje mi "Nic z menu".... i BEZ "dodatku".
Durne poprostu.
Jeśli wpiszę litery... niestety program w miejscu wherex,wherey wypisze końcowe frazesy i sie buntuje.
Wiem, że w kodzie sobie trochę "poszalałem" po amatorsku ale miałem sporo frajdy wymyślając coś swojego. Nie do końca łapię czemu ten if(isdigit(wybor)){..} wykonuje takie głupoty. Na koniec mam wrażenie, że po pierwszym wykonaniu pętli, wyczyszczeniu przedpola, zadaniu ponownie pytania co wybierasz szefie.... program już wie(raczej pamięta na jakimś stosie czy coś ostatnią wartość) i się buntuje bo szef głupek.
Proszę o pomoc.

##Pixelmaster: zapoznaj się z http://forum.ddt.pl/?Tid=622 (Pkt. 2 i 3)
P-10966
naiL
Temat założony przez niniejszego użytkownika
» 2009-10-20 13:20:04

 
C/C++
std::cin.clear(); //TEN
std::cin.sync(); //i TEN
 
Sprawdzam równolegle post kolegi Mariuis'a, który ma podobny problem.
Wstawilem taki fragment przed pobieraniem cin >> wybor.
Poprawilo sie ~trochę. Nie blokuje się wybieranie cyframi. Ale jeśli pierwszy wybór będzie literą program ma pokazać "Nic z menu". Dalej sprawdza
 
C/C++
if( isalpha( wybor ) )
     cout << ", na dodatek to nie cyfra.";

Najdziwniejsze z tego wszystkiego, że próbowałem rozróżnić zły wybór cyfry inne niż te które uruchamiają case 1,2..5 czyli 6,123 pokazuje Nic z menu. Ale już 1234 pokazuje "nic z menu, na dodatek to nie cyfry". To durne jest?
Poza tym w dalszym ciągu jeśli po wyborze pierwszym czegoś z menu 1-5 przy kolejnym wyborze wpisze litere program pokazuje ostatni wybor... jakby ten cin.clear/sync() nie działał wcale.
:-( idzie sie popłakać
P-11009
GoldWolf
» 2009-10-20 16:47:54
szukałem tych {{ podwójnych nawiasów }} oczko w kursie zabrakło określeń o podnawiasach... To słabo szukałeś - 6.3 Tablice wielowymiarowe...

nie każdy kończył informatykę Akurat dobrzy programiści mają tyle wspólnego z informatyką co pies z kotem....
P-11013
naiL
Temat założony przez niniejszego użytkownika
» 2009-10-22 15:36:39
ah... :) do bólu perfekcyjnie zbudowane zdania odpowiedzi na problem. Cacy.


C/C++
Je ż eli mia ł e ś problemy ze zrozumieniem lekcji, masz jakie ś pytania lub uwagi, napisz o tym na forum pozwoli to udoskonali ć kurs.

w punkcie 6.3 jest kilka przykładów tworzenia tablic dwuwymiarowych typu char. tab[x][y]={bla],{bla}. Te podwojne nawiasy wyszperalem w forum. tab[x][y][z]={{bla},{bla},{bla}}. Mam laicznoprozaicznoprymitywne problemy, ktorych nie potrafie wyczytac z prostego przykladu dlatego pytam. Moze wydawac sie to banalne. Ale na forum jest kilka zapytan o ten sam problem.

C/C++
nie ka ż dy ko ń czy ł informatyk ę

Akurat dobrzy programi ś ci maj ą tyle wsp ó lnego z informatyk ą co pies z kotem....
hmm. typowo polskie podejscie do szukanego problemu... znaleźć nowy.
nie potrafie policzyc ile lat temu skonczylem podstawówkę drogi Panie Dante ;)
zacząłem uczyć się C++ z Państwa kursu w celach czysto hobbystycznych w przerwach między pacjentami. A co do definicji informatyki .... przez kilkanaście lat zmieniła się baaardzo, faktycznie ... ale to zasługa uczelni na których jest ona wykładana. Każdy profesor tych uczelni potrafi napisać intro 64kb jak prophecy.(conspiracy);)

Choć dalej to nie rozwiązuje mojego problemu zupełnie.

ajjjj....
P-11055
« 1 » 2 3
  Strona 1 z 3 Następna strona