o sztuce picia szklanki mleka....

Czyli miejsce, w którym można poruszać tematy nie dające przyporządkować się do pozostałych działów ale uwaga tutaj również obowiązują przyjęte zasady na forum
Awatar użytkownika
GrzesiekG
Użytkownik
Posty: 160
Rejestracja: 11 sie 2006, 8:06
Lokalizacja: Annopol
Kontakt:

o sztuce picia szklanki mleka....

Post autor: GrzesiekG » 03 lip 2010, 20:01

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

Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

Post autor: Luminofor » 03 lip 2010, 21:54

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.

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 04 lip 2010, 9:40

Luminofor pisze:to będzie kolejka FIFO
To akurat będzie przykład LIFO, to co wlejesz jako ostatnie wychodzi jako pierwsze. Szklanka działa jak typowy stos:). Jeszcze mi tylko przeciążenia operatora zabrakło, zamiast WLEJ proponuje ++ :D

Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

Post autor: Luminofor » 04 lip 2010, 9:44

oj tam oj tam czepiasz się :D

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 04 lip 2010, 11:32

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: :mrgreen:

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

Awatar użytkownika
GrzesiekG
Użytkownik
Posty: 160
Rejestracja: 11 sie 2006, 8:06
Lokalizacja: Annopol
Kontakt:

Post autor: GrzesiekG » 04 lip 2010, 14:37

BASIC:

DIM szklanka as SI_PRODUCT, mleko as FAT_TYPE

BEGIN
BUY szklanka
MILK cow INTO szklanka
DRINK szklanka
END.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 04 lip 2010, 15:05

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:

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

Post autor: keruseykaryu » 04 lip 2010, 15:38

Łoj. Ale się Wam nudzi na tych wakacjach. Poczytalibyście jakieś książki o ARMach, FPGA, czy innych w miarę nowych rozwiązaniach.

Awatar użytkownika
GrzesiekG
Użytkownik
Posty: 160
Rejestracja: 11 sie 2006, 8:06
Lokalizacja: Annopol
Kontakt:

Post autor: GrzesiekG » 04 lip 2010, 17:48

Drogi użytkowniku keruseykaryu, to właśnie po sporej dawce powyższych lektór mamy wiedzę, którą jak widzisz pożytkujemy :wink:

PS. FPGA..... Hm.... ciekawe jak by implementacja szklanki mleka w takiej aplikacji wyglądała?
VHDL?

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 04 lip 2010, 18:51

Java...

wersja dla spragnionych:

Kod: Zaznacz cały

public class Main {
    public static void main(String[] args) {
        new Szklanka( new Mleko() ).wypij();
    }
}
wersja dla mniej spragnionych:

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();
        }
    }
}
oczywiście klasy Mleko, Szklanka z odpowiednimi metodami też trzeba sobie napisać
(pomiedzy jednym łykiem a drugim)
:mrgreen:

pa,
Natasza

Awatar użytkownika
michalstec1
Użytkownik
Posty: 202
Rejestracja: 20 kwie 2007, 13:24
Lokalizacja: Jazowsko
Kontakt:

Post autor: michalstec1 » 05 lip 2010, 0:04

Kod w vhdl :)
Ciekawe czy się zsyntezuje ;) bo dawno nic nie pisałem i nie wiem jak przeprowadzić symulację :(

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

Post autor: keruseykaryu » 05 lip 2010, 5:54

Niestety:

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.
Już nie mówiąc o tym, że

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;
to wszystko wykona się jednocześnie i to co wypijesz to o razu w....iadomo.

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 05 lip 2010, 8:43

michalstec1 pisze:obecność_mleka <= 1 when mleko="110";
Nie możesz zostawiać samej jedynki, powinno być (apostrofy):

Kod: Zaznacz cały

obecność_mleka <= '1' when mleko="110";

Awatar użytkownika
edwacc
Użytkownik
Posty: 163
Rejestracja: 14 paź 2008, 10:19
Lokalizacja: świętokrzyskie knieje

Post autor: edwacc » 05 lip 2010, 9:13

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;
}

Awatar użytkownika
michalstec1
Użytkownik
Posty: 202
Rejestracja: 20 kwie 2007, 13:24
Lokalizacja: Jazowsko
Kontakt:

Post autor: michalstec1 » 05 lip 2010, 12:16

@keruseykaryu
to wszystko wykona się jednocześnie
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.

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;
	

ODPOWIEDZ