Strona 1 z 1

[c++]pomoc w wyborze projektu

: 12 lip 2010, 21:37
autor: K0nio
Witam wszystkich ;) którzy zechcą otworzyć ten temat. Otóż mam wybrać projekt z programowania , na wykładach i laboratoriach przerobiliśmy tylko programowanie strukturalne. A tematy projektu wydają mi się trudne. Dlatego chciałbym zaczerpnąć wiedzy osób bardziej doświadczonych ode mnie. Nie chodzi mi o napisanie projektu tylko pomóc w wybraniu dosyć łatwego oraz udzieleniu wskazówek z czego skorzystać co doczytać ;

Przedstawię więc tematy projektów

Kod: Zaznacz cały

Tematy projektów zaawansowanych (1 projekt ? ocena max 5)

(Wymagana dokumentacja z wykorzystaniem Doxygen)

1. Prosty archiwizer umożliwiający zapisanie zawartości bieżącego katalogu wraz z podkatalogami do archiwum, jak również odtworzenie zawartości katalogu. Nie jest wymagana kompresja, należy za to przechowywać informację o datach plików i prawach dostępu.

2. Wyszukiwanie identycznych plików ? program ma znajdować wszystkie grupy plików o identycznej zawartości i rozmiarze w bieżącym katalogu.

3. Gra (projekt oceniany na zasadzie turnieju):

Stan gry ?plansza? to liczba naturalna z przedziału <0,1000000>
Program ma działać następująco: wczytać liczbę i wypisać liczbę, która stanowi opis ruchu

Niech n ? liczba wczytana
Przez ruch rozumiemy wypisanie liczby k, gdzie n-k to kwadrat liczby naturalnej.
Brak możliwego ruchu (n=0) lub wykonanie ruchu niezgodnego z zasadami oznacza przegraną.
Przegrana przeciwnika to nasza wygrana.
________________________________________

Tematy projektów prostszych (1 projekt ? ocena max 4, 2 projekty ? ocena max 5)

4. Porównywanie plików
Napisz program, który przy wywołaniu z linii poleceń postaci: cmp plik1 plik2
wypisze na ekranie pierwszą pozycję (nr bajtu), na której pliki się różnią

5. Zapełnianie dysku 
Napisz program, który zapełni wskazany dysk twardy tak by ilość wolnego miejsca wyniosła zero. Program ma mieć wskazanie ile procent zadania już wykonano i ile czasu pozostało.

6. Odwracacz pliku
Napisz program, który odwróci zawartość pliku -> ostatni bajt zamieniany jest z pierwszym, drugi z przedostatnim. Nazwa pliku do odwrócenia przekazana jest jako pierwszy parametr wywołania programu z linii poleceń.

7. Pomiar prędkości zapisu/odczytu plików. 
Program ma oszacowywać prędkość zapisu i odczytu w katalogu wskazanym pierwszym parametrem wywołania.

Odp: [c++]pomoc w wyborze projektu

: 12 lip 2010, 23:31
autor: Nadril
Jeżeli z zaawansowanych to brałbym pierwszy i zabrałbym się do niego tak:
Jeden po drugim brałbym pliki z danego katalogu i:
a) zapisywał do pliku względną ścieżkę do pliku (wraz z nazwą)
b) wstawiał ustalony znak specjalny
c) zapisywał zawartość pliku
d) wstawiał ustalony znak specjalny
e) zapisywał dane dotyczące pliku w jakimś ustalonym schemacie
f) wstawiał ustalony znak specjalny

Oczywiście należałoby sprawdzać czy wybrany znak nie występuje w zapisywanych danych i jeżeli tak to zapisywać dwa takie znaki, w celu późniejszego rozkodowania.

Nie jest to optymalne (zero kompresji, powolne działanie ze względu na szukanie znaku specjalnego), ale proste w implementacji. Jeśli chcesz coś bardziej skomplikowanego to można by się na przykład pokusić o własną implementację tara: http://en.wikipedia.org/wiki/Tar_(file_format).

Odp: [c++]pomoc w wyborze projektu

: 14 lip 2010, 17:53
autor: K0nio
ten archiwizator dla mnie jest za trudny nie mam wystarczająco czasu, poszperałem trochę i zadanie 4 oraz 6 wydaje się prostsze, może dać ktoś wskazówki z czego skorzystać

Odp: [c++]pomoc w wyborze projektu

: 14 lip 2010, 18:00
autor: ethanak
Zadanie numer 6 jest pozornie proste. Co dla pliku który ma np. 100 GB?

Wybierz czwórkę.

Chociaż powiem Ci że dwójka wydaje się całkiem ciekawa - a i ocenę można lepszą dostać ;)

Odp: [c++]pomoc w wyborze projektu

: 14 lip 2010, 18:25
autor: K0nio
Ciekawy jest i archiwizator , ja niestety nie posiadam umiejętności i czasu do zastanowienia się , za mało umiem po prostu . Co do zadania czwartego - wczytam znaki z plików do talibcy lub vector'a a następnie poszukam różnicy algorytmem find_first_of ().

Odp: [c++]pomoc w wyborze projektu

: 14 lip 2010, 18:30
autor: ethanak
Masz kompa z 64 MB na pokładzie. Przeciętny plik ma od 1 do 10 GB. ;)

Odp: [c++]pomoc w wyborze projektu

: 14 lip 2010, 18:34
autor: K0nio
a jeśli by to był mały plik tekstowy ?

Odp: [c++]pomoc w wyborze projektu

: 14 lip 2010, 18:36
autor: ethanak
A jeśli nie? :P

Odp: [c++]pomoc w wyborze projektu

: 14 lip 2010, 18:39
autor: K0nio
no załóżmy, że tak :D bo z czymś bardziej skomplikowanym sobie nie poradzę , na podstawach mieliśmy tylko strukturalne i to nie było kto wie jak skomplikowane, a jestem dopiero w trakcie czytania symfoni

Odp: [c++]pomoc w wyborze projektu

: 15 lip 2010, 01:06
autor: Nadril
Jeśli nie podoba Ci się archiwizator, to ja bym tak jak ethanak polecał 4 zamiast 6, jako łatwiejszą w dobrej implementacji. To jest naprawdę łatwy projekt, taki na 2 godzinne laboratorium z C++ :p. Na prawdę jak zrobisz to zobaczysz, że zmieściłeś się w bardzo małej ilości linijek. Wystarczy otworzyć oba pliki i po kolei przesuwać pointer w obu. Symfonia na pewno posiada jakiś rozdział na temat plików, zobaczysz jakie to proste. :)

Odp: [c++]pomoc w wyborze projektu

: 15 lip 2010, 10:03
autor: K0nio
a może jakieś wskazówki , muszę się zapoznać z vectorami co już zrobiłem , wczytuję dwa pliki no a później je porównuje i przerywam wtedy gdy się różnią , mogę to zrobić jakąś pętlą , lub jakąś funkcją z tego co czytałem. Czy idę dobrą drogą

Odp: [c++]pomoc w wyborze projektu

: 15 lip 2010, 12:07
autor: DDAroo
Pętlą. Apropo tego, co koledzy napisali powyżej. Tak się nie robi jak Ty to piszesz - nie wczytuje się całych plików, bo mogą się one nie zmieścić w pamięci. Na potrzeby projektu możesz oczywiście założyć, że porównywane pliki będą małe (najwyżej Ci utną punkty / ocenę za projekty), ale gdybyś pisał w życiu coś bardziej poważnego, to nie radzę robić takich założeń.

Odp: [c++]pomoc w wyborze projektu

: 15 lip 2010, 15:47
autor: K0nio

Kod: Zaznacz cały

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <iterator>

int main ()
{
    std::vector<char> vec1 ;
    std::vector<char> vec2 ;
    
    std::fstream file1 ("in1.txt") ;
    std::fstream file2 ("in2.txt") ;
    
    std::istream_iterator<char> isi1 (file1) ;
    std::istream_iterator<char> isi2 (file2) ;
    std::istream_iterator<char> eos ;
    
    std::copy (isi1, eos, back_inserter(vec1)) ;
    std::copy (isi2, eos, back_inserter(vec2)) ;
    
    std::pair< std::vector<char>::iterator, std::vector<char>::iterator > it = std::mismatch (vec1.begin (), vec1.end (), vec2.begin ()) ;
    std::cout << std::distance (vec1.begin (), it.first)+1 << std::endl ;
    
    system ("PAUSE") ;
    return 0 ;
}
coś takiego ?

Odp: [c++]pomoc w wyborze projektu

: 16 lip 2010, 18:37
autor: pixelenter
zamiast system ("PAUSE") ; Użył bym getchar