[Pascal] Zegarek cyfrowy, problem ze zmianą wartości

Zaprzeczasz samemu sobie. Jeżeli tutaj włączasz sysutils, to albo inny moduł to zastanów się, jaką głupotę właśnie napisałeś, oskarżając mnie o użycie graph

No ale problem w tym, że ja sie o tym nie uczylem, ciężko mi ogarnąć to co wpisujesz, bo nie mogę w tym odnaleźć jakiegos sensu, ale mam wrażenie że powoli ogarniam ten twój ostatni program. Tylko mam do niego kilka pytań.

czy mógłbyś mi bardziej rozjaśnić:

  • function czas

  • str(s,t) - dlaczego wlasnie tak?

Ten program który własnie napisaleś jest tylko po to, żeby wyświetlało mi 0 gdy godzina/minuta/sekunda jest jednocyfrowa tak? A co gdy będę chciał za te wyświetlone cyfry podstawić jakieś znaki, tak jak np tamta 7 zrobiona z @?

Znowu czytanie ze zrozumieniem się kłania. Zrozum to zadanie dydaktyczne, jak powiedziano że ma być tryb tekstowy to ma być tryb tekstowy a nie graficzny. Natomiast na 100% NIE powiedziano: “nie używać sysutils” czy też “nie używać Ord() Chr()”. Zadanie można wykonać na wiele sposobów używając lub nie używając sysutils zaś trzeba go rozwiązać w jego pierwotnej postaci czyli w trybie tekstowym, użycie graph nie ma nić do rzeczy.

Czy w szkole na języku polskim uczono cie jak się piszę słowo q…wa? Nie?! Czy to oznacza że nie umiesz go napisać?

function

str()

Ta funkcja robi to samo co wywolanie: FormatDateTime(‘hh:nn:ss’,Now) ale ty nie możesz użyć prostych rzeczy bo cię tego nie uczono :stuck_out_tongue_winking_eye:

Jesteś po prostu śmieszny, jeżeli dobrze rozumiem autor postu ma doświadczenie z crt, dos?

Więc dlaczego utrudniasz? A nie łatwiej zrobić coś takiego :

program cw4_18;

{ Program jest prostym zegarkiem, wyswietlajacym }

{ aktualna godzine, az do wcisniecia klawisza przez }

{ uzytkownika. }

{ Katalog r4_03 : 4_18.pas }


uses

  Crt,

  Dos;


var

  Godzina, Minuta, Sekunda, S100 : Word;

  OstatniaGodzina : Word;


function Uzup0 (N : Word) : String;

{ Funkcja zwraca lancuch reprezentujacy podana liczbe }

{ uzupelniony z przodu zerem, o ile liczba jest mniejsza }

{ od 10. }

var

  StrPom : String;

begin

  Str (N : 2, StrPom);

  if StrPom[1] = ' ' then StrPom[1] := '0';

  Uzup0 := StrPom;

end; {------------------------------------------- Uzup0 -}


begin

  ClrScr;

  OstatniaGodzina := 0;

  repeat

    GetTime (Godzina, Minuta, Sekunda, S100);

    GotoXY (37, 12);

    Write (Uzup0(Godzina), ':' , Uzup0(Minuta), ':', Uzup0(Sekunda));

    if ((Minuta=0) and (Godzina <> OstatniaGodzina)) then

    begin

      OstatniaGodzina := Godzina;

      Sound (1000); Delay (200); NoSound;

    end;

    Delay (200);

  until Keypressed;

end.

Program pochodzi z ftp : http://helion.pl/ksiazki/turbo-pascal-cwiczenia-praktyczne-wydanie-ii-andrzej-kierzkowski,cwtp2.htm

I tutaj po prostu będzie mniej zagłębiania niżeli ty próbujesz robić. Bi ja niestety nie widzę sam sensu robienia czegoś w taki sposób, jaka jest zbudowana litera @@@@@@

Protected_48 , przecież parę postów temu zaproponowałem coś w tym stylu, zaś w ostatnim poście od autora tematu dostałem pytanie co to jest function i co to jest str(). No i autor chce aby to było napisano dużymi cyframi składającymi się ze znaków ‘@’ (akurat tu nie zbyt jasne czy to tak jest w zadaniu czy to pomysł autora). Więc jak się okazuje śmieszny jesteś ty, bo nawet nie przeczytałeś o co chodzi w tym temacie. Autor tematu nie ma doświadczenia z dos i crt on ma doświadczenie z “pascalem na jego poziomie” to oznacza owszem pascal ale okrojony z każdej strony do … i tu jest problem bo nie wiemy do czego. Jest duże prawdopodobieństwo że w twoim kodzie autor tematu nie zrozumie repeat, until, sound, delay, nosound oprócz function i str ma się rozumieć.

Pytanie tylko czy autor nie przecenia oczekiwań w jakich miał ten program być napisany, co do wyobrażenia nauczyciela informatyki, bo sądząc po pytaniach za wiele tego pascala nie mieli i na jego spytałbym się dokładnie, jakie są oczekiwania od nauczyciela. Skąd masz pewność o repeat itd, a ja słyszałem, że pętla z opóźnieniem nie będzie problemem. To, co zrobiłeś było po prostu pisaniem na ślepo :slight_smile:

Do zamknięcia, dziekuje.

Wg mnie nauczyciel w żadnym stopniu nie zabrania uczniom uczyć się samodzielnie (no chyba że jest kompletnym kretynem). Tylko że autor nie chcę czegoś się nauczyć, chce mieć gotowca ale takiego który używa wyłącznie tego co było na zajęciach, bojąc się pytań na zaliczeniu w stylu “A co to FormatDateTime i co on robi”, chcę na każde podobne pytanie mieć jedną gotową odpowiedź: “było na zajęciach”.

A propos repeat, nie powiedziałem że mam pewność, powiedziałem że jest duże prawdopodobieństwo, skoro nie wie co to Inc(),Chr(),Ord() to repeat until jako że jest bardziej egzotyczne …

Nie robiłem na ślepo, robiłem w sposób najbardziej prosty w pascalu, potem dopiero się okazało że ma być napisane nie w pascalu zaś w “pascalu na jego poziomie”, czyli w nieznanym mnie języku.

Więc prostego rozwiązania w stylu:

czas:=Format('%.2d:%.2d:%.2d',[h,m,s]);

nawet nie proponowałem.

Z góry określasz, że ktoś nie uważał na lekcjach :slight_smile:

Wiesz z Twoim tłumaczeniem to się nie dziwię. To, że można Inc() zastąpić na inny zapis to mało mówi dla osoby początkującej bardziej należało wspomnieć o Inkrementacji, a przykład z książki pokazuje że nie koniecznie trzeba to znać w tym przypadku.

To nie jest funkcja “tworząca”, tylko zwracająca znak odpowiadającemu kodowi ASCII. Tworząca to bardziej tyczy przykładowo się brył obrotowych a sposób jaki ty to zrobiłeś jest lekkim nie merytorycznym nadużyciem, czyli teraz własna funkcja, którą napiszemy nie będzie obliczać dodawania tylko będzie funkcją tworzącą dodawanie, ciekawe ;). Także w przyszłości zwróć również uwagę na rozumienie tekstów pisanych.

Widzę że z góry określasz jak chcesz najechać na mnie a potem przypinasz to do pierwszego z brzegu cytatu. Może wytłumaczysz jak ty doszedłeś do takiego wniosku z tego mojego wypowiedzenia.

Kolejny przykład mówienia nie wiadomo o czym. Inc() został użyty w przykładzie piszącym na ekran czas dużymi cyframi. W jakiej książce znalazłeś taki przykład?

Nie wiesz co oznaczają cudzysłowy? Poza tym radzę nie wyrywać wypowiedzi z kontekstu. Po wyrwaniu wypowiedzi z kontekstu wściekle broniłeś dynamicznego przydzielania zmiennej typu bool. Zwykle ludzie uczą się na własnych błędach. Są zaś mądrzy ludzi którzy uczą się nawet na cudzych błędach. Ale ty nie uczysz się nawet na własnych błędach - sam zalicz siebie do jakieś grupy.

Doszedłem poprzez, jak to nazwałeś ignorancję co do słuszności tylko i wyłącznie własnych metod i stwierdzeń.

Twój wyraz w cudzysłowie nie ma nic wspólnego z faktycznym powiązaniem odpowiedniej definicji dla podanej funkcji

Bardzo lubię Twoje domysły komentujące osobę, której nie znasz na temat podejścia człowieka, co do faktycznych problemów w życiu. Mimo, że na etapie forum to jest już szczyt chamstwa z Twojej strony. Co do uczenia się na własnych błędach, znajdź mi powiązanie miedzy moim działającym błędem do którego się przyznałem , niestety ty tego nie widzisz. Przepraszam Cię bardzo, że zrobiłem błąd w innym temacie, jednak nie jestem osobą, która ma ogromną wiedzę na temat C++ i wybacz mi, że próbuję zrobić coś szybciej niżeli mam to w szkolę(Dokładnie obecnie jesteśmy przy switch) naprawdę widzę własne błędy, a w poprzednim temacie chyba wynikły z braku czytania od A…Z, tylko zabierania się od razu za listingi, miałem świadomość, że powinno deklarować się w poprzednim wypadku ewentualnie duże tablicę, ale nie widziałem nic złego deklarowania w sposób, jaki zrobiłem(mimo, że kod się kompilował), wy mi przejrzeliście na “oczy” i bardzo wam dziękuję, a prawda jest że nikt nie lubi się mylić. Naprawdę nie szukam żadnego pretekstu żeby się mścić, a to mi chyba chcesz przekazać i mówię Tobie, że się mylisz :slight_smile:

PS : Proszę się nie śmiać z mojej szczerej odpowiedzi :slight_smile:

jesteś zbyt pewny siebie, tak się składa, że hasło robiłem na repeat until, więc wiem co to jest! Nie prosiłem o gotowca programu, tylko prosiłem o coś mało skomplikowanego co rozwiąże mój problem z zamianą cyfr na kombinacje znaków, wszystkie inne gettime, repeat untill, uses crt,dos itd sobie zrobię, tylko CHCE ZAMIANE CYFR NA ZNAKI! ale widzę, że szkoda waszych i moich nerwów. pozdrawiam.

Toć dostałeś odpowiedź na pierwszej stronie tematu. Krócej się tego zrobić nie da :slight_smile:

Wlaśnie tak przepuszczałem.

Ok, masz racje. Oto prawda Chr() to żadna funkcja, nie istnieje jako taka, istnieje jedynie do zachowania pozoru.

c:=Chr(13);

kompiluje się do:

mov al,13

Czy takie wyjaśnienie mam dać początkującemu?

I właśnie ten sam błąd popełniłeś w tym temacie.

No cóż, pomyłka w jednym z czterech założeń wg mnie to bardzo dobra dokładność, zwłaszcza uwzględniając że założenia byli oparte jedynie na kilku postach w jednym temacie z pytaniami od ciebie.

Da się znacznie krócej zaś byłem absolutnie pewien że tego krótszego autor tematu nie zrozumie za chińskiego (przynajmniej na razie). Pomysł: “wydłubanie” mapy pikseli dla znaków z jakieś czcionki (najprościej - rastrowej), więc bez tej wielkiej tabeli, więc jednak krócej.

Już wiem jak to skomplikować do bezsensu :smiley:

uses crt,dos;


procedure writedigit(Digit:Byte);

var px,py:Integer;

begin

  px:=WhereX;

  py:=WhereY;

  if Digit=0 then

  begin

    GotoXY(px,py-2); Write(' @@ ');

    GotoXY(px,py-1); Write('@ @');

    GotoXY(px,py-0); Write('@ @');

    GotoXY(px,py+1); Write('@ @');

    GotoXY(px,py+2); Write(' @@ ');

  end

  else if Digit=1 then

  begin

    GotoXY(px,py-2); Write(' @ ');

    GotoXY(px,py-1); Write(' @@ ');

    GotoXY(px,py-0); Write(' @ ');

    GotoXY(px,py+1); Write(' @ ');

    GotoXY(px,py+2); Write(' @@@');

  end

  else if Digit=2 then

  begin

    GotoXY(px,py-2); Write(' @@ ');

    GotoXY(px,py-1); Write('@ @');

    GotoXY(px,py-0); Write(' @@');

    GotoXY(px,py+1); Write('@ ');

    GotoXY(px,py+2); Write('@@@@');

  end

  else if Digit=3 then

  begin

    GotoXY(px,py-2); Write(' @@ ');

    GotoXY(px,py-1); Write('@ @');

    GotoXY(px,py-0); Write(' @ ');

    GotoXY(px,py+1); Write('@ @');

    GotoXY(px,py+2); Write(' @@ ');

  end

  else if Digit=4 then

  begin

    GotoXY(px,py-2); Write('@ @');

    GotoXY(px,py-1); Write('@ @');

    GotoXY(px,py-0); Write('@@@@');

    GotoXY(px,py+1); Write(' @');

    GotoXY(px,py+2); Write(' @');

  end

  else if Digit=5 then

  begin

    GotoXY(px,py-2); Write('@@@@');

    GotoXY(px,py-1); Write('@ ');

    GotoXY(px,py-0); Write(' @@');

    GotoXY(px,py+1); Write('@ @');

    GotoXY(px,py+2); Write(' @@ ');

  end

  else if Digit=6 then

  begin

    GotoXY(px,py-2); Write(' @@ ');

    GotoXY(px,py-1); Write('@ ');

    GotoXY(px,py-0); Write('@@@ ');

    GotoXY(px,py+1); Write('@ @');

    GotoXY(px,py+2); Write(' @@ ');

  end

  else if Digit=7 then

  begin

    GotoXY(px,py-2); Write('@@@@');

    GotoXY(px,py-1); Write(' @');

    GotoXY(px,py-0); Write(' @ ');

    GotoXY(px,py+1); Write(' @ ');

    GotoXY(px,py+2); Write('@ ');

  end

  else if Digit=8 then

  begin

    GotoXY(px,py-2); Write(' @@ ');

    GotoXY(px,py-1); Write('@ @');

    GotoXY(px,py-0); Write(' @@ ');

    GotoXY(px,py+1); Write('@ @');

    GotoXY(px,py+2); Write(' @@ ');

  end

  else if Digit=9 then

  begin

    GotoXY(px,py-2); Write(' @@ ');

    GotoXY(px,py-1); Write('@ @');

    GotoXY(px,py-0); Write(' @@@');

    GotoXY(px,py+1); Write(' @');

    GotoXY(px,py+2); Write(' @@ ');

  end

  else

  begin

    GotoXY(px,py-2); Write(' ');

    GotoXY(px,py-1); Write(' @@ ');

    GotoXY(px,py-0); Write(' ');

    GotoXY(px,py+1); Write(' @@ ');

    GotoXY(px,py+2); Write(' ');

  end;

  GotoXY(px+5,py);

end;


procedure writetime(h,m,s:Word);

begin

  writedigit(h div 10);

  writedigit(h mod 10);

  writedigit(10);

  writedigit(m div 10);

  writedigit(m mod 10);

  writedigit(10);

  writedigit(s div 10);

  writedigit(s mod 10);

end;


procedure animatetime;

var px,py:Integer;

var h,m,s,x,sec:Word;

begin

  px:=WhereX;

  py:=WhereY;

  sec:=60;

  while true do

  begin

    gettime(h,m,s,x);

    if sec<>s then

    begin

      GotoXY(px,py);

      writetime(h,m,s);

      sec:=s;

    end;

  end;

end;


begin

  WriteLn;

  WriteLn;

  Write('Aktualna godzina ');

  animatetime;

end.

Powiem Ci tak, ten “bezsens” jak najbardziej mi pasuje :wink: Wszystko jest w porządku, tylko takie małe pytanie: w którym miejscu dać clrscr;? bo nie chce tych

^CRunning "lokalizacja programu"

A ktoś mówił że nie chce gotowca …

Bo myślałem, że bez wprowadzania “nowości” się obejdzie …

O ■■■■■■■, nawet w tym masz “nowości” ?

Hmm, jeśli tam są nowości to proszę bardzo:

http://pastebin.com/FGm6SW6A - program działa, ale za takie coś pewnie będę się smażył w piekle :wink:

Nowości na które można tam natrafić:

delay - “zamraża” aplikację na parę milisekund (w przypadku naszego “programu” pozwala wyeliminować miganie)

gotoxy - ustawia kursor w danej pozycji

Już bardziej durnego i źle napisanego programu, chyba nie da się zrobić…

PS: W moim odczuciu ktoś kto chcę zająć się poważnie programowaniem, nie może ograniczać się do rzeczy w stylu “bo tego jeszcze nie było na lekcjach” - po to jest dokumentacja aby z niej korzystać.

adammo , brawo ja myślałem że bardziej sknocić od tej mojej ostatniej wersji to się nie da :smiley:

Problem nie w tym że tego nie było na lekcjach, problem w tym że jeżeli to było na lekcjach to na pytanie wykładowcy na temat jakiegoś fragmentu kodu można odpowiedzieć: “To było na lekcjach.” niezależnie od tego co to jest, natomiast jeżeli tego nie było to niema gotowej odpowiedzi i trzeba to rozumieć - i to właśnie jest tu problemem.