o sztuce picia szklanki mleka....
o sztuce picia szklanki mleka....
Witam wszystkich!
Zapraszam wszystkich chętnych do małej zabawy...
Mamy "wygenerować" i wypić szklankę pełną mleka...
Pytanie brzmi: jak poszczególni przedstawiciele języków programowania musieliby stawić czoła temu problemowi?
Moja sugestia:
Programista asemblera: "Dajcie mi węgla, azotu i tlenu na mleko, krzemu na szklankę i "trochę" czasu na pomyślenie jak to zrobić a zrobię tyle mleka ile będę chciał!"
Programista BASIC'a:....
Programista C:....
Programista JAVY:...
Pozdrawiam
GrzesiekG
Zapraszam wszystkich chętnych do małej zabawy...
Mamy "wygenerować" i wypić szklankę pełną mleka...
Pytanie brzmi: jak poszczególni przedstawiciele języków programowania musieliby stawić czoła temu problemowi?
Moja sugestia:
Programista asemblera: "Dajcie mi węgla, azotu i tlenu na mleko, krzemu na szklankę i "trochę" czasu na pomyślenie jak to zrobić a zrobię tyle mleka ile będę chciał!"
Programista BASIC'a:....
Programista C:....
Programista JAVY:...
Pozdrawiam
GrzesiekG
Programista C++: dajcie mi klasę szklanka (kontener danych) - to będzie kolejka FIFO - to co pierwsze wlewamy pierwsze wypijamy, chyba że zadziałamy metodą Mieszaj(), wtedy kolejność jest losowa, dajcie mi klasę mleko - właściwa treść programu - to jest nasz content. Teraz tworzymy nowy obiekt klasy szklanka, potem w pętli for 200 obiektów klasy mleko (jeden obiekt klasy mleko zawiera 1ml produktu o nazwie mleko), i sekwencyjnie ładujemy wygenerowane obiekty klasy mleko do obiektu klasy szklanka.
Dostepne operacje:
Szklanka.Pij() - pobranie najmłodszego elementu z kontenera szklanka;
Szklanka.Wlej() - załadowanie do kontenera obiektów klasy mleko;
Szklanka.Mieszaj() - zrandomizowanie zawartości obiektu klasy szklanka.
Klasa szklanka jest klasą dziedziczącą od klasy naczynie, więc można wypić mleko w następujący sposób:
naczynie_szklane->szklanka->Pij();
Metoda Pij() zwraca jako rezultat zawartość obiektu typu mleko i inkremetuje wskaźnik na następny obiekt tego typu w kontenerze. Nie przyjmuje argumentów.
Metoda Wlej() zwraca void a jako argument przyjmuje inny kontener danych np. kontener o nazwie pojemnikMleka()
Metoda Mieszaj() - zwraca void, nie przyjmuje argumentów. Używa funkcji rand() na obiektach klasy mleko w kontenerze typu szklanka.
Dostepne operacje:
Szklanka.Pij() - pobranie najmłodszego elementu z kontenera szklanka;
Szklanka.Wlej() - załadowanie do kontenera obiektów klasy mleko;
Szklanka.Mieszaj() - zrandomizowanie zawartości obiektu klasy szklanka.
Klasa szklanka jest klasą dziedziczącą od klasy naczynie, więc można wypić mleko w następujący sposób:
naczynie_szklane->szklanka->Pij();
Metoda Pij() zwraca jako rezultat zawartość obiektu typu mleko i inkremetuje wskaźnik na następny obiekt tego typu w kontenerze. Nie przyjmuje argumentów.
Metoda Wlej() zwraca void a jako argument przyjmuje inny kontener danych np. kontener o nazwie pojemnikMleka()
Metoda Mieszaj() - zwraca void, nie przyjmuje argumentów. Używa funkcji rand() na obiektach klasy mleko w kontenerze typu szklanka.
Asemblerowiec według mnie:
Dodaj węgla,azotu,tlenu do rejestru mleka.Dodaj krzemu do rejestru szklanki.Wywołaj funkcje trochę_ czasu.Dodaj mleko do rejestru żołądka.Kod źródłowy:
Dodaj węgla,azotu,tlenu do rejestru mleka.Dodaj krzemu do rejestru szklanki.Wywołaj funkcje trochę_ czasu.Dodaj mleko do rejestru żołądka.Kod źródłowy:
Kod: Zaznacz cały
mov ACC,C
mov B,N
mov R1,O
mov R2,Si
call trochę_czasu
mov żołądek,Acc
trochę_czasu :
add ACC,B
add ACC,R1
Add ACC,R2
oczywicie zarówno z matematycznego jak i bascomowego punktu widzenia program jest do bani bo komilator wywalił by same błędy, ale przecież chodzi o zabawę, tak?
Bascom:
Bascom:
Kod: Zaznacz cały
Dim krowa as word
Dim szklanka_mleka as byte
Dim rzoladek as byte
const mleko = 1
const pelny = 255
const pusty = 0
krowa = 65535
szklanka_mleka = pusty
Do
szklaknka_mleka = krowa - mleko
if szklanka_mleka = pelny then
gosub chcialbym_sie_napic
exit do
end if
loop
cls
lcd"to sie opilem"
end
chcialbym_sie_napic:
do
if rzoladek = pusty then
rzoladek = szklanka_mleka - mleko
if szklanka_mleka = pusty or rzoladek = pelny then
exit do
end if
end if
loop
return-
keruseykaryu
Java...
wersja dla spragnionych:
wersja dla mniej spragnionych:
oczywiście klasy Mleko, Szklanka z odpowiednimi metodami też trzeba sobie napisać
(pomiedzy jednym łykiem a drugim)
pa,
Natasza
wersja dla spragnionych:
Kod: Zaznacz cały
public class Main {
public static void main(String[] args) {
new Szklanka( new Mleko() ).wypij();
}
}
Kod: Zaznacz cały
public class Main {
public static void main(String[] args) {
Szklanka szklanka = new Szklanka();
Mleko mleko = new Mleko();
szklanka.setMleko( mleko );
while ( !szklanka.pusta() ) {
szklanka.pijPoJednymLyku();
}
}
}
(pomiedzy jednym łykiem a drugim)
pa,
Natasza
- michalstec1
- Użytkownik
- Posty: 202
- Rejestracja: 20 kwie 2007, 13:24
- Lokalizacja: Jazowsko
- Kontakt:
Kod w vhdl 
Ciekawe czy się zsyntezuje
bo dawno nic nie pisałem i nie wiem jak przeprowadzić symulację 
Ciekawe czy się zsyntezuje
Kod: Zaznacz cały
--mleko ma wartość 110 gdzie:
--mleko(2)-substancje nieprzyswajalne,
--mleko(1)-substancje przyswajalne,
--mleko(0)-niektóre enzymy (uwzględniono tylko wątrobowe)
entity picie_mleka is
port(
mleko : in std_logic_vector(2 downto 0);
odbyt : out std_logic_vector(2 downto 0);
);
end picie_mleka;
architecture behavioral of picie_mleka is
signal obecność_mleka : std_logic;
signal zawartość_szklanki : std_logic_vector(2 downto 0);
signal jama_ustna : std_logic_vector(2 downto 0);
signal gardło : std_logic_vector(2 downto 0);
signal przełyk : std_logic_vector(2 downto 0);
signal żołądek : std_logic_vector(2 downto 0);
signal jelito_cienkie : std_logic_vector(2 downto 0);
signal jelito_grube : std_logic_vector(2 downto 0);
begin
obecność_mleka <= 1 when mleko="110";
napełnianie_szklanki: process (obecność_mleka) is
variable szklanka : unsigned (2 downto 0);
begin
if rising_edge(obecność_mleka) then szklanka <= mleko ;
end if;
zawartość_szklanki <= std_logic_vector(szklanka);
end process napełnianie_szklanki;
jama_ustna <= zawartość_szklanki when zawartość_szklanki="110";
gardło <= jama_ustna;
przełyk <= gardło;
żołądek <= przełyk;
jelito_cienkie <= żołądek or "001";
jelito_grube <= jelito_cienkie and "101";
odbyt <= jelito_grube;
end behavioral;-
keruseykaryu
Niestety:
Już nie mówiąc o tym, że
to wszystko wykona się jednocześnie i to co wypijesz to o razu w....iadomo.
Kod: Zaznacz cały
/hdl/mleko.vhd(46): ERROR: type std_logic does not match with the integer literal (VHDL-1278)
/hdl/mleko.vhd(51): ERROR: use := to assign to variable szklanka (VHDL-1289)
/hdl/mleko.vhd(51): ERROR: type error near mleko ; expected type unsigned (VHDL-1272)
/hdl/mleko.vhd(63): ERROR: unit behavioral ignored due to previous errors (VHDL-1284)
4 ERROR(S), 0 WARNING(S).
ERROR: The command 'check_hdl' failed.Kod: Zaznacz cały
gardło <= jama_ustna;
przełyk <= gardło;
żołądek <= przełyk;
jelito_cienkie <= żołądek or "001";
jelito_grube <= jelito_cienkie and "101";
odbyt <= jelito_grube;Nie możesz zostawiać samej jedynki, powinno być (apostrofy):michalstec1 pisze:obecność_mleka <= 1 when mleko="110";
Kod: Zaznacz cały
obecność_mleka <= '1' when mleko="110";Jako że w Javie już było, moja propozycja w C:
Kod: Zaznacz cały
#define ILOSC_LYKOW 20
typedef struct {
double objetosc;
double waga;
double kalorie;
double bialko;
char* witaminy;
time_t data_produkcji;
time_t data_ważności;
char *imie_krowy;
} lyk_mleka;
int main() {
lyk_mleka *krowa, *mleko, *szklanka, *zoladek;
mleko = (lyk_mleka*)malloc(ILOSC_LYKOW * sizeof(lyk_mleka));
szklanka = mleko;
zoladek = NULL;
numer_lyku = ILOSC_LYKOW;
while(numer_lyku--) {
zoladek = mleko + numer_lyku;
szklanka = mleko + ILOSC_LYKOW - numer_lyku;
system("polykanie");
}
free(mleko);
return 0;
}- michalstec1
- Użytkownik
- Posty: 202
- Rejestracja: 20 kwie 2007, 13:24
- Lokalizacja: Jazowsko
- Kontakt:
@keruseykaryu
W każdym razie poprawiłem i zsyntezowało się
Czy to znaczy że syntezer pominie kolejne przypisania, i od razu mleko zostanie przypisanie do wyjścia? Bo przecież organizm nie działa np. z szybkością 10ns jak cpld więc chyba powinno być ok - zakładając realne opóźnienia przy kolejnych przypisaniach.to wszystko wykona się jednocześnie
W każdym razie poprawiłem i zsyntezowało się
Kod: Zaznacz cały
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
--mleko ma wartosc 110 gdzie:
--mleko(2)-substancje nieprzyswajalne,
--mleko(1)-substancje przyswajalne,
--mleko(0)-niektóre enzymy (uwzgl?dniono tylko watrobowe)
entity picie_mleka is
port(
mleko : in std_logic_vector(2 downto 0);
odbyt : out std_logic_vector(2 downto 0)
);
end picie_mleka;
architecture behavioral of picie_mleka is
signal obecnosc_mleka : std_logic;
signal zawartosc_szklanki : std_logic_vector(2 downto 0);
signal jama_ustna : std_logic_vector(2 downto 0);
signal gardlo : std_logic_vector(2 downto 0);
signal przelyk : std_logic_vector(2 downto 0);
signal zoladek : std_logic_vector(2 downto 0);
signal jelito_cienkie : std_logic_vector(2 downto 0);
signal jelito_grube : std_logic_vector(2 downto 0);
begin
obecnosc_mleka <= '1' when mleko="110";
napelnianie_szklanki: process (obecnosc_mleka) is
variable szklanka : std_logic_vector (2 downto 0);
begin
if rising_edge(obecnosc_mleka) then szklanka := mleko ;
end if;
zawartosc_szklanki <= std_logic_vector(szklanka);
end process napelnianie_szklanki;
jama_ustna <= zawartosc_szklanki when zawartosc_szklanki="110";
gardlo <= jama_ustna;
przelyk <= gardlo;
zoladek <= przelyk;
jelito_cienkie <= zoladek or "001";
jelito_grube <= jelito_cienkie and "101";
odbyt <= jelito_grube;
end behavioral;