<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=TI%2FProgramowanie_II%2FWej%C5%9Bcie_i_wyj%C5%9Bcie</id>
	<title>TI/Programowanie II/Wejście i wyjście - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=TI%2FProgramowanie_II%2FWej%C5%9Bcie_i_wyj%C5%9Bcie"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Programowanie_II/Wej%C5%9Bcie_i_wyj%C5%9Bcie&amp;action=history"/>
	<updated>2026-05-03T15:16:01Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=TI/Programowanie_II/Wej%C5%9Bcie_i_wyj%C5%9Bcie&amp;diff=1785&amp;oldid=prev</id>
		<title>Jarekz: /* Zadania */</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Programowanie_II/Wej%C5%9Bcie_i_wyj%C5%9Bcie&amp;diff=1785&amp;oldid=prev"/>
		<updated>2015-05-23T09:58:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Zadania&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pl&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← poprzednia wersja&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Wersja z 09:58, 23 maj 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l191&quot; &gt;Linia 191:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 191:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Zapisz liczbę 42 do pliku, tak, aby zajmowała 64 bity w formacie big endian. Jaka będzie wartość takiej liczby zinterpretowanej jako little endian?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Zapisz liczbę 42 do pliku, tak, aby zajmowała 64 bity w formacie big endian. Jaka będzie wartość takiej liczby zinterpretowanej jako little endian?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Zapisz liczbę 42 do pliku jako 64 bitową liczbę zmiennoprzecinkową.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Zapisz liczbę 42 do pliku jako 64 bitową liczbę zmiennoprzecinkową.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Zapisz do pliku liczbę 0.1 jako double, korzystając z polecenia struct.pack(&amp;quot;d&amp;quot;,0.1). Następnie otwierając plik do odczytu binarnego, odczytaj wartość: znaku, wykładnika i mantysy (tzn napisz funkcję, która zwraca krotkę (znak, wykładnik, mantysa)). (pierwszy bit to znak, kolejne 11 bitów to wykładnik, kolejne 52 bity to mantysa ([[&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;wikipl&lt;/del&gt;:Liczba zmiennoprzecinkowa|Liczba zmiennoprzecinkowa]]))&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Zapisz do pliku liczbę 0.1 jako double, korzystając z polecenia struct.pack(&amp;quot;d&amp;quot;,0.1). Następnie otwierając plik do odczytu binarnego, odczytaj wartość: znaku, wykładnika i mantysy (tzn napisz funkcję, która zwraca krotkę (znak, wykładnik, mantysa)). (pierwszy bit to znak, kolejne 11 bitów to wykładnik, kolejne 52 bity to mantysa ([[&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;wikipedia&lt;/ins&gt;:Liczba zmiennoprzecinkowa|Liczba zmiennoprzecinkowa]]))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Utwórz plik o nazwie &amp;quot;binarny&amp;quot;, otwórz go do zapisu i zapisz sekwnencję bajtów oznaczającą zdanie &amp;quot;Hello world&amp;quot;. Psłuż się do pomocy tablicą ASCII z wikipedii. Otwórz plik edytorem tekstowym i zwróć uwagę na to, że nie widzisz tekstu, tylko &amp;quot;krzaczki&amp;quot;. Otwórz następnie powyższy plik do odczytu w formie binarnej, i zobacz co się dzieje, jak korzystasz z funkcji fromfile podając jej różne typy (np. int8, int16, int32).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Utwórz plik o nazwie &amp;quot;binarny&amp;quot;, otwórz go do zapisu i zapisz sekwnencję bajtów oznaczającą zdanie &amp;quot;Hello world&amp;quot;. Psłuż się do pomocy tablicą ASCII z wikipedii. Otwórz plik edytorem tekstowym i zwróć uwagę na to, że nie widzisz tekstu, tylko &amp;quot;krzaczki&amp;quot;. Otwórz następnie powyższy plik do odczytu w formie binarnej, i zobacz co się dzieje, jak korzystasz z funkcji fromfile podając jej różne typy (np. int8, int16, int32).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Rysowanie plansz &amp;amp;mdash; przygotowanie bodźców na Pracownię Sygnałów Biologicznych==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Rysowanie plansz &amp;amp;mdash; przygotowanie bodźców na Pracownię Sygnałów Biologicznych==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=TI/Programowanie_II/Wej%C5%9Bcie_i_wyj%C5%9Bcie&amp;diff=1783&amp;oldid=prev</id>
		<title>Jarekz: /* Zadanie 1 */</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Programowanie_II/Wej%C5%9Bcie_i_wyj%C5%9Bcie&amp;diff=1783&amp;oldid=prev"/>
		<updated>2015-05-23T09:56:27Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Zadanie 1&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pl&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← poprzednia wersja&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Wersja z 09:56, 23 maj 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l73&quot; &gt;Linia 73:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 73:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Przyjrzyj się uważniej sygnałowi, z poszczególnych kanałów. Co możesz o nim powiedzieć? Czym jest sygnał z pierwszego i drugiego kanału? A czym z ostatniego? Przedostatniego?&amp;lt;br/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Przyjrzyj się uważniej sygnałowi, z poszczególnych kanałów. Co możesz o nim powiedzieć? Czym jest sygnał z pierwszego i drugiego kanału? A czym z ostatniego? Przedostatniego?&amp;lt;br/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Jak długi (w sekundach) jest sygnał w pliku?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Jak długi (w sekundach) jest sygnał w pliku?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Zadanie 2====Obejrzyj następujący [http://escher.fuw.edu.pl/~mm/swps/swps_ania.raw plik z danymi]. Jego opis można znaleźć [http://escher.fuw.edu.pl/~mm/swps/swps_ania.xml tu]. Wybierz fragment sygnału z środka pliku i spróbuj narysować widmo na różne sposoby. Co zauważyłeś interesującego w sygnale?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Zadanie 3====Pobierz dane z [http://brain.fuw.edu.pl/~asia/BCICIV_calib_ds1a.mat jeden z plików z IV BCI Competition]. Zapoznaj się z [http://bbci.de/competition/iv/desc_1.html opisem tych danych]. Napisz program, który:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Zadanie 2====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Obejrzyj następujący [http://escher.fuw.edu.pl/~mm/swps/swps_ania.raw plik z danymi]. Jego opis można znaleźć [http://escher.fuw.edu.pl/~mm/swps/swps_ania.xml tu]. Wybierz fragment sygnału z środka pliku i spróbuj narysować widmo na różne sposoby. Co zauważyłeś interesującego w sygnale?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Zadanie 3====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Pobierz dane z [http://brain.fuw.edu.pl/~asia/BCICIV_calib_ds1a.mat jeden z plików z IV BCI Competition]. Zapoznaj się z [http://bbci.de/competition/iv/desc_1.html opisem tych danych]. Napisz program, który:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* zwróci sygnał z danego kanału,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* zwróci sygnał z danego kanału,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* zwroci listę wszystkich fragmentów sygnału odpowiadający danej klasie bodźca i danemu kanałowi,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* zwroci listę wszystkich fragmentów sygnału odpowiadający danej klasie bodźca i danemu kanałowi,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l80&quot; &gt;Linia 80:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 84:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* narysuje i zapisze do pliku widma z triali odpowiadających danej klasie bodźca i danemu kanałowi (w nazwie pliku ma się znaleźć informacja o tym dla którego triala, której klasy i którego kanału jest to widmo),&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* narysuje i zapisze do pliku widma z triali odpowiadających danej klasie bodźca i danemu kanałowi (w nazwie pliku ma się znaleźć informacja o tym dla którego triala, której klasy i którego kanału jest to widmo),&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* narysuje widmo po uśrednieniu widm ze wszystkich triali dla danej klasy bodźca.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* narysuje widmo po uśrednieniu widm ze wszystkich triali dla danej klasy bodźca.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Zapisywanie do pliku==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Zapisywanie do pliku==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=TI/Programowanie_II/Wej%C5%9Bcie_i_wyj%C5%9Bcie&amp;diff=1782&amp;oldid=prev</id>
		<title>Jarekz: Utworzono nową stronę &quot; ==Wczytywanie z pliku==    ===Pliki binarne=== Przyjemnie jest skorzystać z wygodnej funkcji, która wczyta nasz plik lub jego fragment i następnie stworzy na jego po...&quot;</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Programowanie_II/Wej%C5%9Bcie_i_wyj%C5%9Bcie&amp;diff=1782&amp;oldid=prev"/>
		<updated>2015-05-23T09:54:54Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot; ==Wczytywanie z pliku==    ===Pliki binarne=== Przyjemnie jest skorzystać z wygodnej funkcji, która wczyta nasz plik lub jego fragment i następnie stworzy na jego po...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
==Wczytywanie z pliku==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Pliki binarne===&lt;br /&gt;
Przyjemnie jest skorzystać z wygodnej funkcji, która wczyta nasz plik lub jego fragment i następnie stworzy na jego podstawie (i na podstawie informacji, które my podamy) obiekt odpowiedniego typu (&amp;lt;tt&amp;gt;ndarray&amp;lt;/tt&amp;gt;), tak samo, jak korzystaliśmy z funkcji &amp;lt;tt&amp;gt;numpy.loadtxt()&amp;lt;/tt&amp;gt;, wczytując dane z plików tekstowych.&lt;br /&gt;
&lt;br /&gt;
Przypomnij sobie składnię funkcji [http://docs.scipy.org/doc/numpy/reference/generated/numpy.fromfile.html?highlight=fromfile#numpy.fromfile] &amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;numpy.fromfile(file, dtype=float, count=-1, sep='')&amp;lt;/source&amp;gt;. Parametry funkcji:&lt;br /&gt;
*&amp;lt;tt&amp;gt;file&amp;lt;/tt&amp;gt; &amp;amp;mdash; otwarty plik lub nazwa pliku.&lt;br /&gt;
*&amp;lt;tt&amp;gt;dtype&amp;lt;/tt&amp;gt; &amp;amp;mdash; typ danych. Informacja ta będzie służyła do konstrukcji tablicy. W przypadku plików binarnych używana jest również do ustalenia przez funkcję wielkości i kolejności liczb w pliku.&lt;br /&gt;
*&amp;lt;tt&amp;gt;count&amp;lt;/tt&amp;gt; &amp;amp;mdash; ile próbek ma wczytać. Domyślna ilość &amp;lt;tt&amp;gt;-1&amp;lt;/tt&amp;gt; oznacza wczytanie całego pliku.&lt;br /&gt;
*&amp;lt;tt&amp;gt;sep&amp;lt;/tt&amp;gt; &amp;amp;mdash; separator między kolejnymi elementami pliku w pliku tekstowym. Gdy podany jest pusty string, oznacza to, że plik jest binarny.&lt;br /&gt;
&lt;br /&gt;
Wczytując pliki, lubisz nadać wynikowi własny kształt. W tym celu używasz metody &amp;lt;tt&amp;gt;reshape()&amp;lt;/tt&amp;gt;, której argumentem jest krotka z docelowy rozmiarem. Być może tablicę wynikową będziesz musiał transponować, żeby miała porządany kształt (np. kolejny sygnał w kolejnej kolumnie).&lt;br /&gt;
&lt;br /&gt;
===Pliki *.mat===&lt;br /&gt;
Plików matlabowe &amp;amp;mdash; z końcówką &amp;lt;tt&amp;gt;.mat&amp;lt;/tt&amp;gt; &amp;amp;mdash; wczytywać można za pomocą modułu &amp;lt;tt&amp;gt;scipy.io&amp;lt;/tt&amp;gt;. Ma ona następujący nagłówek: &amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;scipy.io.loadmat(file_name, mdict=None, appendmat=True, **kwargs)&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;file_name&amp;lt;/tt&amp;gt; &amp;amp;mdash; nazwa pliku. Jeżeli parametr &amp;lt;tt&amp;gt;appendmat&amp;lt;/tt&amp;gt; ma wartość True, w &amp;lt;tt&amp;gt;file_name&amp;lt;/tt&amp;gt; nie musi mieć końcówki &amp;lt;tt&amp;gt;.mat&amp;lt;/tt&amp;gt;, bo zostanie ona automatycznie dodana.&lt;br /&gt;
* &amp;lt;tt&amp;gt;mdict&amp;lt;/tt&amp;gt; &amp;amp;mdash; słownik, w który moga zosrtać wsadzone zmienne matlabowe. Domyślna wartość &amp;lt;tt&amp;gt;None&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;appendmat&amp;lt;/tt&amp;gt; &amp;amp;mdash; dołącz do &amp;lt;tt&amp;gt;file_name&amp;lt;/tt&amp;gt; końcówkę &amp;lt;tt&amp;gt;.mat&amp;lt;/tt&amp;gt;, jeżeli jej tam nie ma.&lt;br /&gt;
* &amp;lt;tt&amp;gt;byte_order&amp;lt;/tt&amp;gt; &amp;amp;mdash; porządek bajtów. Domyślnie &amp;lt;tt&amp;gt;None&amp;lt;/tt&amp;gt; &amp;amp;mdash; zgadywany z pliku. Może też przyjmować wartość: ‘native’, ‘=’, ‘little’, ‘&amp;lt;’, ‘BIG’, ‘&amp;gt;’.&lt;br /&gt;
* &amp;lt;tt&amp;gt;mat_dtype&amp;lt;/tt&amp;gt; &amp;amp;mdash; domyślnie True. Jeżeli True zwraca macierze tego samego typu, jaki zostałby załadowany do Matlaba (a nie w takim w jakim zostały zachowane)/&lt;br /&gt;
* &amp;lt;tt&amp;gt;squeeze_me&amp;lt;/tt&amp;gt; &lt;br /&gt;
* &amp;lt;tt&amp;gt;chars_as_strings&amp;lt;/tt&amp;gt; &amp;amp;mdash; czy ma zamienić &amp;lt;tt&amp;gt;char&amp;lt;/tt&amp;gt; na napisy.&lt;br /&gt;
* &amp;lt;tt&amp;gt;matlab_compatible&amp;lt;/tt&amp;gt; &amp;amp;mdash; (&amp;lt;tt&amp;gt;squeeze_me=False&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;chars_as_strings=False&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;mat_dtype=True&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;struct_as_record=True&amp;lt;/tt&amp;gt;).&lt;br /&gt;
* &amp;lt;tt&amp;gt;struct_as_record&amp;lt;/tt&amp;gt; &amp;amp;mdash;Whether to load MATLAB structs as numpy record arrays, or as old-style numpy arrays with dtype=object. Setting this flag to False replicates the behaviour of scipy version 0.7.x (returning numpy object arrays). The default setting is True.&lt;br /&gt;
* &amp;lt;tt&amp;gt;variable_names&amp;lt;/tt&amp;gt; &amp;amp;mdash; if None (the default) &amp;amp;mdash; read all variables in file. Otherwise variable_names should be a sequence of strings, giving names of the matlab variables to read from the file. The reader will skip any variable with a name not in this sequence, possibly saving some read processing.&lt;br /&gt;
Funkcja zwaraca słownik &amp;lt;tt&amp;gt;mat_dict&amp;lt;/tt&amp;gt; z nazwami zmiennych jako kluczami i macierzami jako wartościami.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Widmo===&lt;br /&gt;
Wartości zwracane przez &amp;lt;tt&amp;gt;fft(a,n)&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; sygnał, &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; ilość punktów transformaty) mają następujący ''standardowy'' porządek:    &lt;br /&gt;
Jeśli &amp;lt;tt&amp;gt;A = fft(a, n)&amp;lt;/tt&amp;gt;, to &lt;br /&gt;
* &amp;lt;tt&amp;gt;A[0]&amp;lt;/tt&amp;gt; zawiera składową stałą (średnią sygnału),&lt;br /&gt;
* &amp;lt;tt&amp;gt;A[1:n/2]&amp;lt;/tt&amp;gt; zawiera współczynniki odpowiadające dodatnim częstościom,&lt;br /&gt;
* &amp;lt;tt&amp;gt;A[n/2+1:]&amp;lt;/tt&amp;gt; zawiera współczynniki odpowiadające ujemnym częstościom w kolejności od bardziej do mniej ujemnych.&lt;br /&gt;
* Dla parzystego ''n''  &amp;lt;tt&amp;gt;A[n/2]&amp;lt;/tt&amp;gt; reprezentuje dodatnia i ujemną częstość Nyquista i dla sygnałów rzeczywistych jest liczbą rzeczywistą. &lt;br /&gt;
* Dla nieparzystego &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt;, element &amp;lt;tt&amp;gt;A[(n-1)/2]&amp;lt;/tt&amp;gt; zawiera współczynnik dla największej częstości dodatniej a element &amp;lt;tt&amp;gt;A[(n+1)/2]&amp;lt;/tt&amp;gt; zawiera współczynnik dla największej częstości ujemnej.&lt;br /&gt;
====&amp;lt;tt&amp;gt;numpy.fft.fftfreq&amp;lt;/tt&amp;gt;====&lt;br /&gt;
Funkcja &amp;lt;tt&amp;gt;numpy.fft.fftfreq(len(A),1.0/Fs)&amp;lt;/tt&amp;gt; zwraca macierz częstości odpowiadających poszczególnym elementom wyjściowym.&lt;br /&gt;
&lt;br /&gt;
Składnia:  &amp;lt;tt&amp;gt;numpy.fft.fftfreq(n, d=1.0)&amp;lt;/tt&amp;gt;&lt;br /&gt;
Parametry:&lt;br /&gt;
:&amp;lt;tt&amp;gt;n : int&amp;lt;/tt&amp;gt; &amp;amp;mdash; długość okna.&lt;br /&gt;
:&amp;lt;tt&amp;gt;d : skalar&amp;lt;/tt&amp;gt; &amp;amp;mdash; okres próbkowania (odwrotność częstości próbkowania).&lt;br /&gt;
:Zwracane częstości są obliczane w następujący sposób:&lt;br /&gt;
:&amp;lt;tt&amp;gt;f = [0,1,...,n/2-1,-n/2,...,-1]/(d*n)&amp;lt;/tt&amp;gt;         jeśli &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; jest przyste&lt;br /&gt;
:&amp;lt;tt&amp;gt;f = [0,1,...,(n-1)/2,-(n-1)/2,...,-1]/(d*n) &amp;lt;/tt&amp;gt;  jeśli  &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; jest nieparzyste. &lt;br /&gt;
Funkcja &amp;lt;tt&amp;gt;numpy.fft.fftshift(A)&amp;lt;/tt&amp;gt; przestawia wektor wyjściowy &amp;lt;tt&amp;gt;fft&amp;lt;/tt&amp;gt; i wektor częstości, tak aby częstość zero wypadała w środku. Zastosowanie funkcji &amp;lt;tt&amp;gt;numpy.fft.ifftshift(A)&amp;lt;/tt&amp;gt; odwraca działanie &amp;lt;tt&amp;gt;numpy.fft.fftshift(.)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
====Zadanie 1====&lt;br /&gt;
Multipleksowany sygnał binarny w [http://escher.fuw.edu.pl/~mm/TESTY/test_1024hz_glowa.obci.dat pliku]  ma następujące parametry:&lt;br /&gt;
* częstość próbkowania: 1024 hz &lt;br /&gt;
* liczba kanałów: 26&lt;br /&gt;
* typ liczb: double (8 bajtów)&lt;br /&gt;
Wczytaj pierwsze 10 sekund z pierwszych 5 kanałów, i zapisz je w pliku tekstowym sygnal.txt, tak, że plik sygnal.txt będzie miał następującą postać:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;ch1[0];ch2[0];ch3[0];ch4[0];ch5[0]&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;ch1[1];ch2[1]...            ch5[1]&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
.&amp;lt;br/&amp;gt;&lt;br /&gt;
.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;ch1[n];ch2[n]...            ch5[n]&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
gdzie &amp;lt;tt&amp;gt;chi[j]&amp;lt;/tt&amp;gt; to liczby całkowite.&lt;br /&gt;
&lt;br /&gt;
Narysuj cztery wykresy &amp;amp;mdash; 4 sekundy sygnału z dwóch pierwszych oraz dwóch ostatnich kanałów, oraz jego widmo; na jednym rysunku, wykorzystując polecenie &amp;lt;tt&amp;gt;sublot&amp;lt;/tt&amp;gt;. Rysunek powinien mieć następujący układ:&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 sygnal 1  widmo1&amp;lt;br/&amp;gt;&lt;br /&gt;
 sygnal 2  widmo2&amp;lt;br/&amp;gt;&lt;br /&gt;
 sygnal 3  widmo3&amp;lt;br/&amp;gt;&lt;br /&gt;
 sygnal 4  widmo4&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wszystkie wykresy powinny być wyskalowane &amp;amp;mdash; osie rzędnych i odciętych wykresów przedstawiających sygnały powinny mieć takie same podziałki i wartości, tak samo osie rzędnych i odciętych na wykresach widma.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Przyjrzyj się uważniej sygnałowi, z poszczególnych kanałów. Co możesz o nim powiedzieć? Czym jest sygnał z pierwszego i drugiego kanału? A czym z ostatniego? Przedostatniego?&amp;lt;br/&amp;gt;&lt;br /&gt;
Jak długi (w sekundach) jest sygnał w pliku?&lt;br /&gt;
====Zadanie 2====Obejrzyj następujący [http://escher.fuw.edu.pl/~mm/swps/swps_ania.raw plik z danymi]. Jego opis można znaleźć [http://escher.fuw.edu.pl/~mm/swps/swps_ania.xml tu]. Wybierz fragment sygnału z środka pliku i spróbuj narysować widmo na różne sposoby. Co zauważyłeś interesującego w sygnale?&lt;br /&gt;
====Zadanie 3====Pobierz dane z [http://brain.fuw.edu.pl/~asia/BCICIV_calib_ds1a.mat jeden z plików z IV BCI Competition]. Zapoznaj się z [http://bbci.de/competition/iv/desc_1.html opisem tych danych]. Napisz program, który:&lt;br /&gt;
* zwróci sygnał z danego kanału,&lt;br /&gt;
* zwroci listę wszystkich fragmentów sygnału odpowiadający danej klasie bodźca i danemu kanałowi,&lt;br /&gt;
* zwróci uśredniony sygnał odpowiadający danej klasie bodźca i danemu kanałowi (uśredniamy &amp;quot;triale&amp;quot;),&lt;br /&gt;
* narysuje i zapisze do pliku widma z triali odpowiadających danej klasie bodźca i danemu kanałowi (w nazwie pliku ma się znaleźć informacja o tym dla którego triala, której klasy i którego kanału jest to widmo),&lt;br /&gt;
* narysuje widmo po uśrednieniu widm ze wszystkich triali dla danej klasy bodźca.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zapisywanie do pliku==&lt;br /&gt;
=== Sposoby dostępu do plików - przypomnienie ===&lt;br /&gt;
* Korzystanie z obiektu file:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
napis = &amp;quot;42&amp;quot;&lt;br /&gt;
f1 = open('plik_tekstowy', 'w') # 'w' oznacza, że będziemy pisać do pliku&lt;br /&gt;
f1.write(napis)&lt;br /&gt;
f1.close()       # 'wypchnięcie' zmian do pliku przez jego zamknięcie&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Zapisaliśmy do pliku napis &amp;quot;42&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Teraz chcemy zapisać do pliku liczbę 42. Aby zapisać do pliku coś innego niż napis, przy pomocy funkcji write(), musimy najpierw zrobić z tego czegoś napis. Z liczby całkowitej z zakresu 0-127, którą chcemy zapisać na 8 bitach, robimy napis używając funkcji chr().&lt;br /&gt;
&lt;br /&gt;
Z bardziej skomplikowanych typów robimy napis korzystając z funkcji struck.pack()&lt;br /&gt;
[http://docs.python.org/release/2.5.2/lib/module-struct.html  modul struct]&lt;br /&gt;
* korzystanie z modułu numpy:&lt;br /&gt;
** do danych binarnych &amp;amp;mdash; fromfile&lt;br /&gt;
** do danych ASCII &amp;amp;mdash; loadtxt&lt;br /&gt;
** wczytywanie plików matlabowych &amp;amp;mdash; loadmat:&lt;br /&gt;
=== Podstawy o reprezentacji danych ===&lt;br /&gt;
* Liczby naturalne są zapisywane w postaci ciągu zer i jedynek oddających ich reprezentację binarną&lt;br /&gt;
* Liczby całkowite wymagają jeszcze określenia w jakiś sposób znaku, na przykład poprzez uznanie pierwszego bitu za znak. Dlatego też typy integer oraz unsigned integer mają różne zakresy wartości. Najczęściej stosowanym sposobem zapisu liczb ze znakiem jest tzw [http://wazniak.mimuw.edu.pl/index.php?title=WDP_Reprezentacja_liczb#Kod_uzupe.C5.82nieniowy kod uzupełnieniowy] &lt;br /&gt;
* &amp;quot;Ułamki&amp;quot; wymagają już reprezentacji zmiennoprzecinkowej. Reprezentacja zmiennoprzecinkowa przedstawia się następująco:&lt;br /&gt;
:: &amp;lt;math&amp;gt;x = (-1)^S \cdot M \cdot 2^{E - \textrm{bias&amp;lt;/math&amp;gt; gdzie ''S'' to bit znaku; liczba jest ujemna, gdy bit znaku jest równy 1, w przeciwnej sytuacji ma on wartość 0.&lt;br /&gt;
&lt;br /&gt;
Typowe wartości przesunięcia (''bias'') dla koprocesora x87 (występującego w procesorach x86) wynoszą:&lt;br /&gt;
* 127 (7FH) w formacie 32-bitowym&lt;br /&gt;
* 1023 (3FFH) w formacie 64-bitowym&lt;br /&gt;
* 16383 (3FFFH) w formacie 80-bitowym&lt;br /&gt;
[[Plik:floatingpoint.svg.png|thumb|350px|Reprezentacja zmiennoprzecinkowa ]]&lt;br /&gt;
* Kolejność w jakiej odczytujemy kolejne bajty i składamy w liczbę zależy od architektury danego komputera:&lt;br /&gt;
** little endian (spotykane także ''cienkokońcowość'') to forma zapisu danych, w której mniej znaczący bajt (zwany też dolnym bajtem, ''low-order byte'') umieszczony jest jako pierwszy. Procesory, które używają formy ''little endian'', to między innymi wszystkie z rodziny x86. Jest ona odwrotna do używanego na co dzień sposobu zapisu liczb. Procesor zapisujący 32-bitowe wartości w pamięci, przykładowo 4A3B2C1D pod adresem 100, umieszcza dane zajmując adresy od 100 do 103 w następującej kolejności:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=4 style=&amp;quot;border: 1px solid #ffffff; background-color: #ffffff; border-collapse: collapse; margin: 0.4em 0.4em; text-align: center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
|style=&amp;quot;padding: 0em 1em;&amp;quot;| &lt;br /&gt;
|style=&amp;quot;padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;100&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;101&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;102&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;103&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;padding: 0em 1em;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: 1px solid #000000; border-left: 1px solid #ffffff; padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;...&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;border: 1px solid #000000; padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;1D&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;border: 1px solid #000000; padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;2C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;border: 1px solid #000000; padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;3B&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;border: 1px solid #000000; padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;4A&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;border: 1px solid #000000; border-right: 1px solid #ffffff; padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;...&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
** big endian (spotykane także ''grubokońcowość'') to forma zapisu danych, w której najbardziej znaczący bajt  (''high-order byte'') umieszczony jest jako pierwszy. Procesory, które używają formy ''big endian'', to między innymi SPARC, PowerPC 970, IBM System/360, Siemens SIMATIC S7.  Jest ona analogiczna do używanego na co dzień sposobu zapisu liczb. Procesor zapisujący 32-bitowe wartości w pamięci, przykładowo 4A3B2C1D pod adresem 100, umieszcza dane, zajmując adresy od 100 do 103 w następującej kolejności:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=4 style=&amp;quot;border: 1px solid #ffffff; background-color: #ffffff; border-collapse: collapse; margin: 0.4em 0.4em; text-align: center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
|style=&amp;quot;padding: 0em 1em;&amp;quot;| &lt;br /&gt;
|style=&amp;quot;padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;100&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;101&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;102&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;103&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;padding: 0em 1em;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: 1px solid #000000; border-left: 1px solid #ffffff; padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;...&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;border: 1px solid #000000; padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;4A&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;border: 1px solid #000000; padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;3B&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;border: 1px solid #000000; padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;2C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;border: 1px solid #000000; padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;1D&amp;lt;/tt&amp;gt;&lt;br /&gt;
|style=&amp;quot;border: 1px solid #000000; border-right: 1px solid #ffffff; padding: 0em 1em;&amp;quot;| &amp;lt;tt&amp;gt;...&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
* Przyjrzyjmy się reprezentacji liczb:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pycon&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; y = struct.pack(&amp;quot;i&amp;quot;, 1)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; y&lt;br /&gt;
'\x01\x00\x00\x00'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Napis 0x.. oznacza zapis szesnastkowy jednego bajtu. &lt;br /&gt;
Zapis 0xx_{1}x_{2} = x_{2} * 16^0 + x_{1} * 16.&lt;br /&gt;
x_{i} należy do zbioru {0,1,...,9,a,b,...,f}, gdzie przyjmujemy:&lt;br /&gt;
*a = 10&lt;br /&gt;
*b = 11&lt;br /&gt;
*c = 12&lt;br /&gt;
*d = 13&lt;br /&gt;
*e = 14&lt;br /&gt;
*f = 15 &lt;br /&gt;
Widzimy, że liczba 1 została zapisana na 4 bajtach = 32 bitach. Pierwszy bajt, bajt o najniższym adresie, jest najmniej znaczący, jak przystało na architekturę little endian &amp;amp;mdash; gdybyśmy chcięli ją zapisać na kartce na 32 bitach, zrobilibyśmy to odwrotnie &amp;amp;mdash; pierwsze 31 bitów to byłyby zera, dopiero ostatni byłby jedynką. Tak byłoby też w systemie Big Endian.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pycon&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import struct&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; x = struct.pack(&amp;quot;i&amp;quot;, -1)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; x&lt;br /&gt;
'\xff\xff\xff\xff'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Przy zapisaniu liczby -1 musimy już w jakiś sposób uwzględnić znak. Widzimy, że nie jest tu stosowane zapisywanie znaku na pierwszym bicie, lecz [http://wazniak.mimuw.edu.pl/index.php?title=WDP_Reprezentacja_liczb#Kod_uzupe.C5.82nieniowy kod uzupełnieniowy]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pycon&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; z = struct.pack(&amp;quot;h&amp;quot;, 1)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; z&lt;br /&gt;
'\x01\x00'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;quot;h&amp;quot; oznacza typ short, zajmujący 16 bitów.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pycon&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; chr(1)&lt;br /&gt;
'\x01'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
chr() zapisuje liczbę na 8 bitach.&lt;br /&gt;
&lt;br /&gt;
=== Zadania ===&lt;br /&gt;
* Zapoznaj się z działaniem funkcji chr(), ord(), struct.pack/unpack, numpy.fromfile, bin(), int()&lt;br /&gt;
* Utwórz plik file_string, do którego zapiszesz liczbę 42 poleceniem f.write('42'), oraz plik file_bin, do ktorego zapiszesz liczbę 42 jako integer korzystając z polecenia struct.pack(&amp;quot;i&amp;quot;,42). Otwórz plik edytorem tekstu. Jaka jest różnica i dlaczego? &lt;br /&gt;
* Zapisz liczbę 42 do pliku, tak, aby zajmowała 64 bity w formacie little endian&lt;br /&gt;
* Zapisz liczbę 42 do pliku, tak, aby zajmowała 64 bity w formacie big endian. Jaka będzie wartość takiej liczby zinterpretowanej jako little endian?&lt;br /&gt;
* Zapisz liczbę 42 do pliku jako 64 bitową liczbę zmiennoprzecinkową.&lt;br /&gt;
* Zapisz do pliku liczbę 0.1 jako double, korzystając z polecenia struct.pack(&amp;quot;d&amp;quot;,0.1). Następnie otwierając plik do odczytu binarnego, odczytaj wartość: znaku, wykładnika i mantysy (tzn napisz funkcję, która zwraca krotkę (znak, wykładnik, mantysa)). (pierwszy bit to znak, kolejne 11 bitów to wykładnik, kolejne 52 bity to mantysa ([[wikipl:Liczba zmiennoprzecinkowa|Liczba zmiennoprzecinkowa]]))&lt;br /&gt;
* Utwórz plik o nazwie &amp;quot;binarny&amp;quot;, otwórz go do zapisu i zapisz sekwnencję bajtów oznaczającą zdanie &amp;quot;Hello world&amp;quot;. Psłuż się do pomocy tablicą ASCII z wikipedii. Otwórz plik edytorem tekstowym i zwróć uwagę na to, że nie widzisz tekstu, tylko &amp;quot;krzaczki&amp;quot;. Otwórz następnie powyższy plik do odczytu w formie binarnej, i zobacz co się dzieje, jak korzystasz z funkcji fromfile podając jej różne typy (np. int8, int16, int32).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Rysowanie plansz &amp;amp;mdash; przygotowanie bodźców na Pracownię Sygnałów Biologicznych==&lt;br /&gt;
Na zajeciach z pracowni będziecie przeprowadzać następujący eksperyment:&lt;br /&gt;
* pacjentowi są prezentowane &amp;quot;bodźce&amp;quot; &amp;amp;mdash; obrazki, z różnymi wzorami&lt;br /&gt;
* obrazki wyglądają następująco: ekran jest podzielony na 9 pól, część pól jest biała, część czarna.&lt;br /&gt;
* pacjent dostaje instrukcję, że ma zareagować na konkretny układ pól na ekranie &amp;amp;mdash; tzn. na przykład, gdy 3 górne pola są czarne, pozostałe natomiast białe&lt;br /&gt;
* pacjent dostaje do ręki przycisk, który jest podłączony do jednego z kanałów wzmacniacza. Dodatkowo, na kciuku i ręce ma przyczepione elektrody do zbierania sygnałów z mięśni. Pacjent ma reagować na umówioną planszę wciskając przycisk. Dodatkowo, reakcja będzie widoczna w sygnale z mięśnie (szczegóły zostaną omówione na pracowni)&lt;br /&gt;
&lt;br /&gt;
Waszym zadaniem jest napisanie programu, który będzie prezentował bodźce, i zapisywał do pliku czas ich wystąpienia.&lt;br /&gt;
Należy ustalić jeden wzór planszy &amp;quot;właściwej&amp;quot;, na którą pacjent ma reagowac, oraz kilka &amp;quot;plansz&amp;quot; szumów. Plansze to układy pól białych i czarnych. Będą prezentowane w losowej kolejności. Gdy wyświetlana jest plansza &amp;quot;właściwa&amp;quot;, na którą pacjent ma zareagować, należy zapisać czas systemowy do pliku.&lt;br /&gt;
Program ma pobierac parametry:&lt;br /&gt;
* liczba sekund na ile ma być wyświetlana plansza&lt;br /&gt;
* liczba powtórzeń plansz (każda plansza ma być tyle samo razy wyświetlona, gdyby ten wymóg stwarzał problem, można z niego zrezygnować)&lt;br /&gt;
* nazwa pliku, do którego mają zostac zapisane momenty wystąpienia planszy właściwej&lt;br /&gt;
Rysować plansze mozna w dowolny sposób, w jaki umiecie. Proponujemy tu dwa sposoby:&lt;br /&gt;
* korzystając z biblioteki PyQt4. Poniżej fragment kodu wyjaśniający jak skorzystać z biblioteki PyQt4&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import sys, random&lt;br /&gt;
import time&lt;br /&gt;
from PyQt4 import QtGui, QtCore&lt;br /&gt;
&lt;br /&gt;
class Colors(QtGui.QWidget):&lt;br /&gt;
    def __init__(self, parent=None):&lt;br /&gt;
        QtGui.QWidget.__init__(self, parent)&lt;br /&gt;
&lt;br /&gt;
        self.setGeometry(300, 300, 350, 280)&lt;br /&gt;
        self.setWindowTitle('Colors')&lt;br /&gt;
	self.timer = QtCore.QTimer(self)&lt;br /&gt;
     	self.connect(self.timer, QtCore.SIGNAL(&amp;quot;timeout()&amp;quot;), self, QtCore.SLOT(&amp;quot;update()&amp;quot;))&lt;br /&gt;
        self.timer.start(10000) # to decyduje o tym co ile bedzie sie wykonywac metoda paintEvent&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def paintEvent(self, event):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	Tu nalezy umiescic losowanie, ktora plansza ma sie rysowac&lt;br /&gt;
&lt;br /&gt;
	Ponizsze fragmenty rysujace prostokaty sluza tylko zeby sie z nich nauczyc jak rysowac prostokac o okreslonych wymiarach i kolorze.&lt;br /&gt;
	mozna je przeniesc odpowiednio zmodyfikowane do odpowiednich funkcji&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
        paint = QtGui.QPainter()&lt;br /&gt;
        paint.begin(self)&lt;br /&gt;
&lt;br /&gt;
        color = QtGui.QColor(0, 0, 0)&lt;br /&gt;
        color.setNamedColor('#d4d4d4')&lt;br /&gt;
        paint.setPen(color)&lt;br /&gt;
&lt;br /&gt;
        paint.setBrush(QtGui.QColor(255, 0, 0, 80))&lt;br /&gt;
        paint.drawRect(10, 15, 90, 60)&lt;br /&gt;
&lt;br /&gt;
        paint.setBrush(QtGui.QColor(255, 0, 0, 160))&lt;br /&gt;
        paint.drawRect(130, 15, 90, 60)&lt;br /&gt;
&lt;br /&gt;
        paint.setBrush(QtGui.QColor(255, 0, 0, 255))&lt;br /&gt;
        paint.drawRect(250, 15, 90, 60)&lt;br /&gt;
&lt;br /&gt;
        paint.setBrush(QtGui.QColor(10, 163, 2, 55))&lt;br /&gt;
        paint.drawRect(10, 105, 90, 60)&lt;br /&gt;
&lt;br /&gt;
        paint.setBrush(QtGui.QColor(160, 100, 0, 255))&lt;br /&gt;
        paint.drawRect(130, 105, 90, 60)&lt;br /&gt;
&lt;br /&gt;
        paint.setBrush(QtGui.QColor(60, 100, 60, 255))&lt;br /&gt;
        paint.drawRect(250, 105, 90, 60)&lt;br /&gt;
&lt;br /&gt;
        paint.setBrush(QtGui.QColor(50, 50, 50, 255))&lt;br /&gt;
        paint.drawRect(10, 195, 90, 60)&lt;br /&gt;
&lt;br /&gt;
        paint.setBrush(QtGui.QColor(50, 150, 50, 255))&lt;br /&gt;
        paint.drawRect(130, 195, 90, 60)&lt;br /&gt;
&lt;br /&gt;
        paint.setBrush(QtGui.QColor(223, 135, 19, 255))&lt;br /&gt;
        paint.drawRect(250, 195, 90, 60)&lt;br /&gt;
&lt;br /&gt;
        paint.end()&lt;br /&gt;
&lt;br /&gt;
app = QtGui.QApplication(sys.argv)&lt;br /&gt;
dt = Colors()&lt;br /&gt;
dt.show()&lt;br /&gt;
app.exec_()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* korzystając z funkcji subplot(numRows, numCols, plotNum), dzieląc ekran na 9 subplotów i zmieniając ich kolory.&lt;br /&gt;
Poniższy kawałek kodu pokazuje w jaki sposób można to zrobić:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
numPlots = 9&lt;br /&gt;
numRows = 3&lt;br /&gt;
numCols = 3&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(10,10))&lt;br /&gt;
&lt;br /&gt;
for i in range(numPlots):&lt;br /&gt;
	plt.subplot(numRows,numCols,i + 1, axisbg='y')&lt;br /&gt;
	&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A tu jest wskazówka jak uzyskać dynamicznie zmieniające się subploty korzystając z matplotlib:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import time&lt;br /&gt;
numPlots = 9&lt;br /&gt;
numRows = 3&lt;br /&gt;
numCols = 3&lt;br /&gt;
plt.ion()&lt;br /&gt;
for j in range(5):&lt;br /&gt;
        plt.clf()&lt;br /&gt;
        for i in range(j):&lt;br /&gt;
                plt.subplot(numRows,numCols,i + 1, axisbg='y')&lt;br /&gt;
        plt.draw()&lt;br /&gt;
        plt.clf()&lt;br /&gt;
        time.sleep(2)&lt;br /&gt;
&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Przykładowym prostym podejściem do rozwiązania zadania, może być stworzenie kilku funkcji &amp;amp;mdash; każda odpowiada za rysowanie pojedynczej planszy &amp;amp;mdash; określonego układu pól białych i czarnych. Następnie korzystając z modułu random losujemy liczbę z przedziału [1,liczba_plansz], i w konstrukcji &amp;quot;if&amp;quot; wywołujemy odpowiednią funkcję.&lt;br /&gt;
&lt;br /&gt;
=== Przydatne kawałki ===&lt;br /&gt;
&lt;br /&gt;
* moduł random&lt;br /&gt;
&amp;lt;source lang = &amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# tasowanie listy w miejscu&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a = 10 * [0] + 10*[1]&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a&lt;br /&gt;
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import random&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; random.shuffle(a)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a&lt;br /&gt;
[1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0]&lt;br /&gt;
&lt;br /&gt;
# losowanie liczby z przedziału&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; random.randint(5,10)&lt;br /&gt;
6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* moduł sys:&lt;br /&gt;
** poleceniem sys.exit(0) możemy zakończyć program, kiedy już wyrysujemy wszystkie plansze&lt;br /&gt;
** kiedy odpalamy program polecenim: python moj_program,py arg1 arg2 arg3&lt;br /&gt;
to wartości arg1, arg2 i arg3 znajdują się odpowiednio na sys.argv[1], sys.argv[2], sys.argv[3] -- należy z tego skorzystać do podania liczby powtórzeń plansz oraz nazwy pliku&lt;br /&gt;
&lt;br /&gt;
* Przy zapisie timestampu do pliku f.write(repr(time.time)) daje nam większą dokładność niż f.write(str(time.time()))&lt;br /&gt;
&lt;br /&gt;
* Własne funkcje nalezy definiować wewnątrz klasy Color, definiując taką funkcję wewnątrz klasy należy pamiętać, że pierwszym parametrem jest zawsze self:&lt;br /&gt;
def moja_funkcja(self, pozostale_argumenty)&lt;br /&gt;
&lt;br /&gt;
wywołując ją wewnątrz tej klasy, należy pisać:&lt;br /&gt;
self.moja_funkcja(pozostale_argumenty)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Skrócony przepis -- jeśli ktoś nie ma pomysłu, jak to zrobić, można się posłużyć tym schematem ===&lt;br /&gt;
Dla ułatwienia opis możliwej realizacji programu (używając wersji z PyQt):&lt;br /&gt;
* tworzymy zmienną klasową self.ilosc_plansz i wpisujemy &amp;quot;na sztywno&amp;quot; jakąć ilość plansz&lt;br /&gt;
* tworzymy zmienną klasową self.sekwencja, i umieszczamy na niej przetasowaną sekwencję plansz do pokazywania &lt;br /&gt;
* tworzymy zmienną klasową self.licznik -- będzie mówiła, którą planszę z sekwencji należy teraz narysować&lt;br /&gt;
* tworzymy obok funkcji paintEvent naszą własną funkcję def rysuj(self, nr_planszy)&lt;br /&gt;
* w tej funkcji robimy wielką konstrukcję &amp;quot;if&amp;quot;, &lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
if  nr_plansza == 1:&lt;br /&gt;
    9 instrukcji rysowania prostokatow o odpowiednich kolorach w odpowiednich miejscach -- tak by tworzyły planszę 1&lt;br /&gt;
elif nr_planszy == 2:&lt;br /&gt;
    9 instrukcji rysowania prostokątów tworzących planszę nr 2&lt;br /&gt;
&lt;br /&gt;
itd&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
* funkcja paintEvent wywołuje się sama co określony czas, z jakim ją inicjowaliśmy. Zatem wystarczy wstawić w jej wnętrzu wybieranie kolejnego elementu z sekwencji plansz, i wywolanie naszej funkcji self.rysuj(nr_planszy).&lt;br /&gt;
&lt;br /&gt;
=== trick jesli nie dziala close() ===&lt;br /&gt;
&amp;lt;source lang = &amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
#import matplotlib.pyplot as plt&lt;br /&gt;
import time&lt;br /&gt;
import matplotlib as mpl&lt;br /&gt;
                  &lt;br /&gt;
mpl.rcParams['backend'] = &amp;quot;Qt4Agg&amp;quot;&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
numPlots = 9&lt;br /&gt;
numRows = 3&lt;br /&gt;
numCols = 3&lt;br /&gt;
plt.ion()&lt;br /&gt;
plt.clf()&lt;br /&gt;
for i in range(9):&lt;br /&gt;
        plt.subplot(numRows,numCols,i + 1, axisbg='y')&lt;br /&gt;
plt.draw()&lt;br /&gt;
time.sleep(2)&lt;br /&gt;
plt.close()&lt;br /&gt;
time.sleep(2)&lt;br /&gt;
print &amp;quot;closed&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
</feed>