Archiwum autora: Marcin

O Marcin

Projektant, programista fascynat

Laboratoria nr 2 program nr 1

Środowisko Microsoft Visual Studio 2008 Express Edition. Stworzenie projektu w Microsoft Visual C++ 2008 Express Edition. Ogólna struktura programu w języku C. Wprowadzanie kodu, kompilacja i uruchamianie programu w Środowisku Visual C++. Sposób zapisu kodu programu. Wyświetlanie tekstów przy użyciu funkcji printf. Najczęściej popełniane błędy i reakcje kompilatora. Program, pokazujące podstawowe funkcje służące do wyprowadzania treści na standardowe wyjście konsolowe. Wprowadzenie do zmiennych, działania na zmiennych oraz wprowadzania danych do programu i operacji na nich.

#include "stdafx.h"
#include 
#include 

/**
*
* Program Główny prezentujący funckje C++ wyprowadzania treści na wyjście konsoli.
* Wprowadzanie danych do programu i podstawowe operacje arytmetyczne.
*
* @author Marcin Mirończuk
*
*/
int main()
{
	using namespace std;

	float a,b,p;

	a=b=p = 0;

	std::cout << "Program do obliczania pola powierzchni prostokąta" << std::endl;
	std::cout << "Program wykonał Marcin Mironczuk" << std::endl;
	std::cout << "P - Pole powierzchni" << std::endl;
	std::cout << "a - dlugosc pierwszej krawedzi" << std::endl;
	std::cout << "b - dlugosc drugiej krawedzi" << std::endl;
	std::cout << "P = a*b" << std::endl;

	std::cout << "1. Podaj dlugosc krawedzi a: " << std::endl;
	std::cin >> a;
	std::cout << "Podana przez ciebie dlugosc krawedzi a = " << a << std::endl;

	std::cout << std::endl;

	std::cout << "2. Podaj dlugosc krawedzi b: " << std::endl;
	std::cin >> b;
	std::cout << "Podana przez ciebie dlugosc krawedzi b = " << b << std::endl;

	std::cout << std::endl;

	std::cout << "3. Wcisnij dowolny klawisz aby obliczyc pole powierzchni" << std::endl;
	
	std::cin.get();
	std::cin.get();

	std::cout << std::endl;

	std::cout << "4. Pole powierzchni prostokata P wynosi: " << std::endl;

	// Obliczenie pola powierzchni
	p = a*b;

	std::cout << p;

	std::cin.get(); 
	std::cin.get(); 
	
	return 0;
}

Laboratoria nr 1 program nr 3

Program komputerowy, etapy tworzenia programu, uruchomienie programu. Definicje algorytmu, podstawowe cechy algorytmu, metody opisu algorytmów. Przykłady schematów blokowych algorytmów. Prezentacja programów, pokazujących podstawowe funkcje służące do wyprowadzania treści na standardowe wyjście konsolowe.

#include "stdafx.h"	//dyrektywa PREPROCESORA
#include 	//dyrektywa PREPROCESORA
#include 

/**
*
* Program Główny prezentujący funckje C++ wyprowadzania treści na wyjście konsoli.
* Tabulacje tekstu, łamanie linii etc.
*
* @author Marcin Mirończuk
*
*/
int main()		//nagłówek funkcji
{			//początek treści funkcji

	/** Komentarz - Zdefiniowanie przestrzeni nazw*/
	using namespace std;

	std::cout << "Jestem w swiecie programowania C/C++."; //komunikat

	std::cout << std::endl;						//zaczynamy nowy wiersz

	/** Kolejny komunikat */
	std::cout << "Jestem \tw  \t swiecie \vprogramowania \v C/C++ \vale \vbardziej \vC++ niz C." << std::endl;

	/** Wywołanie metody "funkcji" zatrzymującej okienko DOSa */
	std::cin.get();

	return 0;
}

Laboratoria nr 1 program nr 2

Program komputerowy, etapy tworzenia programu, uruchomienie programu. Definicje algorytmu, podstawowe cechy algorytmu, metody opisu algorytmów. Przykłady schematów blokowych algorytmów. Prezentacja programów, pokazujących podstawowe funkcje służące do wyprowadzania treści na standardowe wyjście konsolowe.

#include "stdafx.h"		//dyrektywa PREPROCESORA
#include <stdio.h>		//dyrektywa PREPROCESORA
#include <conio.h>		//dyrektywa PREPROCESORA

/**
*
* Program Główny prezentujący funckje C wyprowadzania treści na wyjście konsoli
* @author Marcin Mirończuk 
*
*/
int main()	//nagłówek funkcji
{		//początek treści funkcji
	printf("Jestem w swiecie programowania C/C++."); //komunikat

	printf("\n"); //zaczynamy nowy wiersz

	/** Kolejny komunikat */
	printf("Jestem w  swiecie programowania C/C++ ale bardziej C niz C++.\n");

	/** Komunikat z nowym wierszem */
	printf("Moge zapisac takze powyzsze wyrazenia jako jeden ciag z uzyciem \\n jako znaku podzialu.\n");

	/** Dodatkowy komunikat */
	printf("Jestem w swiecie programowania C/C++.\nJestem w  swiecie programowania C/C++ ale bardziej C niz C++.");

	/** Wywołanie funkcji zatrzymującej okienko DOSa */
	getch();

	return 0;
}

Laboratoria nr 1 program nr 1

Program komputerowy, etapy tworzenia programu, uruchomienie programu. Definicje algorytmu, podstawowe cechy algorytmu, metody opisu algorytmów. Przykłady schematów blokowych algorytmów. Prezentacja programów, pokazujących podstawowe funkcje służące do wyprowadzania treści na standardowe wyjście konsolowe.

#include "stdafx.h"       //dyrektywa PREPROCESORA
#include  <iostream>    //dyrektywa PREPROCESORA
#include  <stdio.h>     //dyrektywa PREPROCESORA

/**
*
* Program Główny prezentujący funckje C++ wyprowadzania treści na wyjście konsoli
* @author Marcin Mirończuk 
*
*/
int main()										//nagłówek funkcji
{												//początek treści funkcji

	/** Komentarz - Zdefiniowanie przestrzeni nazw*/
	using namespace std;

	std::cout << "Jestem w swiecie programowania C/C++."; //komunikat

	std::cout << std::endl;						//zaczynamy nowy wiersz

	/** Kolejny komunikat */
	std::cout << "Jestem w  swiecie programowania C/C++ ale bardziej C++ niz C." << std::endl;

	/** Komunikat z nowym wierszem */
	std::cout << "Moge zapisac takze powyzsze wyrazenia jako jeden ciag z uzyciem \\n jako znaku podzialu." << std::endl;

	/** Dodatkowy komunikat */
	std::cout << "Jestem w swiecie programowania C/C++.\nJestem w  swiecie programowania C/C++ ale bardziej C++ niz C.";

	/** C/C++ mix */
	printf("\nWpisalem kod C do kodu C++");

	/** Wywołanie metody "funkcji" zatrzymującej okienko DOSa */
	std::cin.get();

	return 0;
}

Zaproszenie na seminarium

Zapraszam na seminaria odbywające się w zakładzie Informatyki i Łączności  Szkoły Głównej Służby Pożarniczej (SGSP). Planowane są co tydzień w poniedziałek o godzinie 14.00, przedstawiana będzie na nich różnego rodzaju problematyka związana z analizą danych tekstowych i nie tylko. Szczegóły dotyczące prezentacji i ich terminarz umieszczony jest na stronie zakładu (seminaria).

Osobiście zaprezentuje 14 marca 2011 roku temat poświęcony jakościowej analizie danych tekstowych z systemu EWID-99, tytuł prezentacji brzmi „System informacyjny na temat sieci hydrantów dla krajowego systemu ratowniczo-gaśniczego: metoda analizy systemu EWID-99”. W wystąpieniu zostanie zaprezentowana opracowana, przez autora i zastosowana w podjętych przez niego badaniach, zmodyfikowana analiza przyczyn i skutków błędów (ang. failure modes and effects analysis – FMEA) zawierająca drzewo analizy błędów oprogramowania (ang. software failure tree analysis – SFTA). Analiza ta została wykorzystana do sfalsyfikowania możliwości zastosowania, w aktualnej tekstowej – wyrażonej za pomocą języka naturalnego – postaci, elektronicznej sekcji Dane opisowe do informacji ze zdarzenia systemu EWID99 jako operacyjnej bazy danych na temat sieci hydrantów. W wystąpieniu zostanie także przedstawiona alternatywna struktura danych do zapisywania i przeszukiwania informacji na temat hydrantów. Omówiony zostanie, zaprojektowany, przykładowy system wyszukiwania informacji na temat hydrantów zawarty w nierelacyjnym katalogowym rejestrze (ang. Not Only SQL – noSQL). Jego propozycja wynika z przeprowadzonej analizy i stanowi alternatywę dla aktualnego systemu wyszukiwania informacji w systemie EID99.

Notka z badań

Ostatnio cały czas spędzam nad składaniem rozprawy i szlifowaniem tez w celu ich prezentacji. Szczerze jest to niebanalne wyzwanie. W czasie tych 3 lat, sporo się działo, powstało parę ciekawych opracowań i artykułów. Większość jest jeszcze w recenzjach. W końcu znalazłem problem badawczy, aktualnie jestem w dalszym ciągu na etapie implementacji oprogramowania do jego zbadania. Wszystko jest na papierze, teraz należy to sprawdzić w praktyce. Co z tego wyjdzie, kto wie. Chyba właśnie na tym polega nauka i badania, że do końca nie wiadomo co z tego wszystkiego wyniknie. Na początku jest mgliste pojęcie o pewnych sprawach i zjawiskach, na szczęście wraz z zawężaniem problemu, mgła niewiadomej się trochę rozwiewa. Najważniejsze jest teraz zebranie wszystkich materiałów oraz otrzymanych wyników ze wstępnych analiz w jedną całość. Nie ma co zwlekać, trzeba ruszać z powrotem do badań nad raportami.

Ciekawe miejsca w sieci

Dzisiaj nic o rozwiązaniach tych czy innych… Dzisiaj po prostu mam do polecenia, blog kolegi po PHPowym fachu, z którym miałem możliwości i przyjemność realizować parę ciekawych projektów. Na pewno w miarę czasu znajdziecie na nim garść   informacji. Zachęcam więc do jego regularnego, mniej lub bardziej, odwiedzania. Zapiski blogowe możecie znależć na stronie http://dev.kardasz.eu/. Ponadto zachęcam do zapoznania się z przez niego rozwijanym frameworkiem w ZFie pt. Nweb Framework. Miłej lektury.

PHP – co robić gdy musimy wymusić typy

Jak wiadomo PHPe nie jest językiem o silnym typowaniu. W wyniku tego do funkcji możemy przesyłać praktycznie wszystko. Często brak wstępnego określania typu parametrów w deskryptorze metod/funkcji pogarsza jakość i czytelność kodu. Osobiście czytając czyjś kod lubię wiedzieć co przyjmuje funkcja/metoda tzn. jaki konkretny typ parametrów one przyjmują. Dość często powstaje różnego rodzaju pomieszania typów, czyli wchodzi string potem przemieniany jest na inta a na wyjściu na dodatek możemy dostać obiekt… Ponadto w PHPe pomimo bogatej proceduralnej biblioteki do obsługi łańcuchów znaków nie istnieje jej wersja obiektowa, a szkoda… Z tego też względu pokusiłem opisać szkicowe rozwiązanie umożliwiające połączenie przyjemnego z pożytecznym tj. utworzenie klasy osłonowej na typ String ułatwiającej operację na obiektach tego typu. Rozwiązanie to daje:
1. Możliwość pośredniego rzutowania na dobrze zdefiniowany typ String
2. Możliwość sprawdzania typu String przez interpreter, tego czy przekazujemy prawidłowy parametr do funkcji/metody
3. Ustala konwencję w kodowaniu i aplikacji.
W miarę możliwość w następnych dniach postaram się opisać prezentowane rozwiązanie. Póki co ograniczę się do przedstawienia samego kodu. Czytaj dalej

PHP – co robić gdy potrzeba coś przeciążyć?

Jednym z najbardziej dla mnie niekomfortowych żeczy w PHPe jest brak możliwości przeciążania czy to funkcji czy też metod w kontekście OO.  Jak wiadomo związane jest to z brakiem m.in. ścisłej kontroli typów. No cóż rzeczywistość jest jaka jest i trzeba do niej się dostosować. Najczęściej pojawiającym się zabiegiem w celu implementacji „przeciążania” metod jest użycie magicznych metod. Sposób takiej implementacji można podejrzeć w wpisie „Method Overloading in PHP5” na blogu Caught in a Web. Osobiście nie przepadam za tego rodzaju rozwiązaniami. Tak więc w wolnym czasie zacząłem główkować i kombinować jak to można by był zrobić troszkę inaczej. Z przemyśleń narodził się pomysł aby do „przeciążania”  (pseudo przeciążania) wykorzystać namespace (opis dostępny w manualu PHP oraz na stronie z poradnikami IBMa „Create better namespaces in PHP”). Pomysł bazuje na prostych zasadach:

– wykorzystaniu  bazowej przestrzeni nazw dla metod podstawowych które będą przeciążane, zaimplementowane lub nadpisane w klasach potomnych. Najlepiej wykorzystać abstrakcje,

– wykorzystaniu predefiniowanych przestrzeni nazw  do enkapsulacji przeciążanych klas i ich metod,

– zamknięcie przestrzeni bazowej i predefiniowanej w jednym pliku (daje to swego rodzaju konwencję utrzymania kodu i jego standaryzację w obrębie realizowanego projektu). Ewentualnie można odpowiednio sobie porozbijać klasy na pliki. Opisu tego rozwiązania jednak nie dokonałem i jedynie skupiłem się na podstawowej strukturze – jeden plik.

Przykładową implementację całości rozwiązania bazującego na ww. zasadach przedstawiłem poniżej. Miłego czytania i zapoznawanie się z pomysłem.  Czytaj dalej