Dante 1 Napisano 16 Września 2008 Udostępnij Napisano 16 Września 2008 To jedziemy z tym koksem, wiem wiem może jest wiele ciekawych języków programowania, ale ja postawiłem na ten. Zaznaczam, że jestem laikiem i zaczynam dopiero zabawę. Mam nadzieje, że znajdzie się jeszcze kilku entuzjastów tego języka . No to pierwszy programik. Zadanie było takie, stworzyć program, który będzie analizował wyniki losowań dużego lotka. I będzie je układał, w pracy, trójki, czwórki , piątki. Próbka dla sprawdzenia jak będzie wyglądało na forum ---------- No to pierwszy programik. Zadanie było takie, stworzyć program, który będzie analizował wyniki losowań dużego lotka. I będzie je układał, w pracy, trójki, czwórki , piątki. Próbka dla sprawdzenia jak będzie wyglądało na forum #include <cstdlib> #include <iostream> #include <fstream> #include <sstream> #include <cstdlib> #include <iomanip> using namespace std; const int wiersz = 500, kolumna = 6, kolumienka = 6; const char *nazwa_for = "loteriada.txt"; inline void tajne() {while(cin.get() != '\n') continue; } //poprawnie wyswietla polskie znaki w konsoli - niestety nie mój patent std::string PL(std::string znak){ for (unsigned i = 0; i < znak.length(); i ++){ switch(znak[i]){ Cytuj Link to post Share on other sites
Dante 1 Napisano 17 Września 2008 Autor Udostępnij Napisano 17 Września 2008 #include <iostream> #include <fstream> #include <sstream> #include <cstdlib> #include <iomanip> using namespace std; const int wiersz = 500, kolumna = 6, kolumienka = 6; const char *nazwa_for = "loteriada.txt"; inline void tajne() {while(cin.get() != '\n') continue; } //poprawnie wyswietla polskie znaki w konsoli - niestety nie mój patent std::string PL(std::string znak){ for (unsigned i = 0; i < znak.length(); i ++){ switch(znak[i]){ case 'ą': znak[i] = static_cast<char>(165); break; case 'ć': znak[i] = static_cast<char>(134); break; case 'ę': znak[i] = static_cast<char>(169); break; case 'ł': znak[i] = static_cast<char>(136); break; case 'ń': znak[i] = static_cast<char>(228); break; case 'ó': znak[i] = static_cast<char>(162); break; case 'ś': znak[i] = static_cast<char>(152); break; case 'ź': znak[i] = static_cast<char>(171); break; case 'ż': znak[i] = static_cast<char>(190); break; case 'Ą': znak[i] = static_cast<char>(164); break; case 'Ć': znak[i] = static_cast<char>(143); break; case 'Ę': znak[i] = static_cast<char>(168); break; case 'Ł': znak[i] = static_cast<char>(157); break; case 'Ń': znak[i] = static_cast<char>(227); break; case 'Ó': znak[i] = static_cast<char>(224); break; case 'Ś': znak[i] = static_cast<char>(151); break; case 'Ź': znak[i] = static_cast<char>(141); break; case 'Ż': znak[i] = static_cast<char>(189); break; } } return znak; } //-KLASA-------------------------------------------------------------------- class cyfry{ char tab_tymczasowa[wiersz][kolumna][2]; //bufor dla pliku int tab_wynik[wiersz][kolumna]; // przechowuje wczytane liczby z pliku int w, k ; //indeksy dla tabel wiersze i kolumny public: void wczytaj_plik(); //definicje funkcji skladowych (metod) void sortuj(); void moj_for(); }; //definicja metody-------------------------------------------------------------- void cyfry::wczytaj_plik(){ bool t; //zmienna ktora zostanie uzyta by sprawdzala // czy w tablicy jest liczba dzieki uzytej funkcji w = 1; k = 1; //otwarcie pliku------------------------------------------------------------- ifstream plik; plik.open("test.txt", ios::in); if(!plik){ cout << PL("Otwarcie pliku nie powiodło się.\n"); system("pause"); exit(1); } while(!plik.eof()){ if(plik.peek() == '\n' || plik.eof()){ //-------liczy wartosc wierszy, oraz indeks tabeli------------------------------ if(k < 6){ //nie wiem czy linuch lyka te komendy pod spodem?!?! cout << PL("Błąd w linii ") << w << PL(", za mała liczba kolumn!!!") << endl; system("pause"); exit(1); }else { k = 1; } w++; } if(plik.peek() == ' '){ //liczy wartosc kolumny k++; } if(k == 7){ //nie wiem czy linuch lyka te komendy pod spodem?!?! cout << PL("Błąd w linii ") << w << PL(", za duża liczba kolumn!!!\n"); system("pause"); exit(1); } if(w > wiersz - 2){ cout << PL("Za duża liczba wierszy w plku test.txt\n"); system("pause"); exit(1); } plik >> tab_tymczasowa[w][k]; if(plik.peek() == ' ' || plik.peek() == '\n' || plik.eof()){ //--------------------sprawdza czy w ciagu jest liczba-------------------------- t = isdigit(*tab_tymczasowa[w][k]) == 0 ? false : true; if(t == true){ //isdigit - sprawdza czy jest liczba tab_wynik[w][k] = atoi(tab_tymczasowa[w][k]); //-----------------sprawdza czy dobry przedzial licznowy 1 - 49----------------- if(tab_wynik[w][k] < 0 || tab_wynik[w][k] > 49){ cout << PL("Błąd w linii ") << w << " ,oraz " << k << " kolumna !!!" <<PL(" Liczby powinny być z przedziału 1-49!\n"); system("pause"); exit(1); } }else { cout << PL("Błąd w linii ") << w << ", oraz " << k << " kolumna !!!\n"; system("pause"); exit(1); } } //-----------------sprawdza czy w wierszu nie ma dwoch takich samych liczb------ if(k == 6){ for(int i = 1, j = 1; i < 7; i++){ j = 1; j = j + i; for(j; j < 7; j++){ if(tab_wynik[w][i] == tab_wynik[w][j]){ cout << PL("Błąd w linii ") << w << PL(". Wiersz nie powinien posiadać dwóch ") << "takich samych liczb!\n"; system("pause"); exit(1); } } } } } plik.close(); } //--------------------------------------------------------------------------- void cyfry::sortuj(){ // tutaj przeszedlem sam siebie moim zdaniem, jest to int buf, t = 1, c; // jedne z ciekawszych metod sortowania chyba to // opatentuje ;-) c = w; //buf - przechowuje liczbe z talicy bufor, a "t" sluzy // do tego by liczyc parzystosc i nie parzystosc for(c; c > 0; c--){ do{ if(t & 1){ if(tab_wynik[c][1] > tab_wynik[c][2]){ buf = tab_wynik[c][1]; tab_wynik[c][1] = tab_wynik[c][2]; tab_wynik[c][2] = buf; } if(tab_wynik[c][3] > tab_wynik[c][4]){ buf = tab_wynik[c][3]; tab_wynik[c][3] = tab_wynik[c][4]; tab_wynik[c][4] = buf; } if(tab_wynik[c][5] > tab_wynik[c][6]){ buf = tab_wynik[c][5]; tab_wynik[c][5] = tab_wynik[c][6]; tab_wynik[c][6] = buf; } }else { if(tab_wynik[c][2] > tab_wynik[c][3]){ buf = tab_wynik[c][2]; tab_wynik[c][2] = tab_wynik[c][3]; tab_wynik[c][3] = buf; } if(tab_wynik[c][4] > tab_wynik[c][5]){ buf = tab_wynik[c][4]; tab_wynik[c][4] = tab_wynik[c][5]; tab_wynik[c][5] = buf; } } t++; }while(!((tab_wynik[c][1] < tab_wynik[c][2]) && (tab_wynik[c][2] < tab_wynik[c][3]) && (tab_wynik[c][3] < tab_wynik[c][4]) && (tab_wynik[c][4] < tab_wynik[c][5]) && (tab_wynik[c][5] < tab_wynik[c][6]))); } } //----Tworzenie i zapisywanie do pliku------------------------------------------ void cyfry::moj_for(){ int g = w + 1; //by nie modyfikowac wartosc "w" int h, i, j, k, l, m; // dla petli stringstream ss; // stworzony strumien do przekazywania danych miedzy string str; // tablicami i zapis do pliku struct calosc{ char wyniki_all[wiersz][kolumienka][250]; // przechowuje wyniki kombinacji }; calosc pl; cout << fixed << right; // dodawanie nowych danych do pliku ------------------------------------------- fstream fout(nazwa_for, ios::out ); if(!fout.is_open()){ cerr << PL("Nie można otworzyć pliku ") << nazwa_for << " do zapisu:\n"; system("pause"); exit(1); } fout << "Co my tu mamy mój Panie w " << nazwa_for << ":\n"; // tu zaczyna sie duza petla --------------------------------------------- for(h = 1; h < g; h++){ /* petla ktora ma za zadanie przejsc przez wszystkie wiersze wprawadzonych danych g = w */ fout << "\n"; fout << "Wiersz " << h << " zawiera taką szóstke liczb : " << tab_wynik[h][1] << ", " << tab_wynik[h][2] << ", " << tab_wynik[h][3] << ", " << tab_wynik[h][4] << ", " << tab_wynik[h][5] << ", " << tab_wynik[h][6] << endl; // Petla przechodzaca przez 6 liczb -------------------------------------- for(i = 1; i < 6; i++){ j = i + 1; strcat(pl.wyniki_all[h][2], "\n"); /* duet*/ for(j; j < 7; j++){ strcat(pl.wyniki_all[h][2], " "); ss << tab_wynik[h][i]; ss << ","; ss << tab_wynik[h][j]; ss << ";"; ss >> str; strcat(pl.wyniki_all[h][2], (str).c_str()); ss.clear(); } } strcat(pl.wyniki_all[h][2], "\n"); /* trio */ for(i = 1; i < 5; i++){ strcat(pl.wyniki_all[h][3], "\n"); for(k = i + 1; k < 6; k++) for(j = k + 1; j < 7; j++){ strcat(pl.wyniki_all[h][3], " "); ss << tab_wynik[h][i]; ss << ","; ss << tab_wynik[h][k]; ss << ","; ss << tab_wynik[h][j]; ss >> str; strcat(pl.wyniki_all[h][3], (str).c_str()); ss.clear(); } } strcat(pl.wyniki_all[h][3], "\n"); /* kwartet */ for(i = 1; i < 4; i++){ strcat(pl.wyniki_all[h][4], "\n"); for(k = i + 1; k < 5; k++) for(j = k + 1; j < 6; j++) for(l = j + 1; l < 7; l++){ strcat(pl.wyniki_all[h][4], " "); ss << tab_wynik[h][i]; ss << ","; ss << tab_wynik[h][k]; ss << ","; ss << tab_wynik[h][j]; ss << ","; ss << tab_wynik[h][l]; ss >> str; strcat(pl.wyniki_all[h][4], (str).c_str()); ss.clear(); } } strcat(pl.wyniki_all[h][4], "\n"); /* Kwintet */ for(i = 1; i < 4; i++){ strcat(pl.wyniki_all[h][5], "\n"); for(k = i + 1; k < 5; k++) for(j = k + 1; j < 6; j++) for(l = j + 1; l < 7; l++) for(m = l + 1; m < 7; m++){ strcat(pl.wyniki_all[h][5], " "); ss << tab_wynik[h][i]; ss << ","; ss << tab_wynik[h][k]; ss << ","; ss << tab_wynik[h][j]; ss << ","; ss << tab_wynik[h][l]; ss << ","; ss << tab_wynik[h][m]; ss >> str; strcat(pl.wyniki_all[h][5], (str).c_str()); ss.clear(); } } fout << endl << " Pary " ; fout << pl.wyniki_all[h][2]; fout << endl << " TRIO " ; fout << pl.wyniki_all[h][3]; fout << endl << " Kwartet " ; fout << pl.wyniki_all[h][4]; fout << endl << " Kwintet " ; fout << pl.wyniki_all[h][5]; fout << "------------------------------------------------------------" ; } /* Tu sie duza petla konczy */ fout.close(); } //--------------------------------------------------------------------------- int main(){ cyfry licz; licz.wczytaj_plik(); licz.sortuj(); licz.moj_for(); cout << endl; cout << PL(" Mój panie został stworzony plik ") << nazwa_for << endl; cout << PL(" Chciałem dodać ze kolejne uruchomienie wyczyści ") << "w/w plik !!!" << endl << endl; system("pause"); } //--------------------------------------------------------------------------- Jedno założenie plik wejściowy o nazwie test.txt, oraz dane powinny być w takim formacjie 1 2 4 49 5 3 1 2 4 49 5 3 1 2 4 49 5 3 35 22 11 2 3 4 Plik nie może się kończyć enterem, ale wprowadziłem kilka kontroli błędów! Ktoś kto zna się trochę na programowaniu powinien to w programie wyłapać. Cytuj Link to post Share on other sites
Darius 0 Napisano 21 Października 2008 Udostępnij Napisano 21 Października 2008 Brawo. Trzymaj tak dalej. Tez może coś niedługo napisze. Jak znajd czas. Cytuj Link to post Share on other sites
Dante 1 Napisano 31 Października 2008 Autor Udostępnij Napisano 31 Października 2008 Brawo. Trzymaj tak dalej. Tez może coś niedługo napisze. Jak znajd czas. A już myślałem, że nie ma tu ani jednej osoby która by coś programowała. Cytuj Link to post Share on other sites
_nick_ 19 Napisano 19 Listopada 2008 Udostępnij Napisano 19 Listopada 2008 Ja troche programuje\uczę się ale w Javie, mogę coś wrzucić na forum w sumie. Także nie jesteś sam Cytuj Link to post Share on other sites
kpmaciek 0 Napisano 3 Grudnia 2009 Udostępnij Napisano 3 Grudnia 2009 A już myślałem, że nie ma tu ani jednej osoby która by coś programowała.Nie jesteś sam nie martw się, ja tam swoich wrzucał nie będę ale to mam inne powody Dobra jak widzę zaczynasz programować dopiero więc na pewno Ci się pare uwag na początek przyda Na start wcięcia. Nie wiem czy forum je wycina, a to prawdopodobne, ale jak ich nie robisz, to najlepiej naucz się odpowiednio od początku formatować kod zauważ, że to co wkleiłeś jest totalnie nieczytelne, i raczej mało komu się będzie chciało taki kod analizować, a sam za miesiąc nie będziesz się mógł w tym połapać. Jeśli nie da się wkleić bezpośrednio wcięć itp, to zainteresuj się może serwisem http://codeviewer.org, gdzie można wklejać kody źródłowe z zachowaniem wcięć i kolorowania składni. Nazwy zmiennych. Tutaj akurat mały program więc łatwo zapamiętać, ale zobacz na ta linie z twego programu: const int wiersz = 500, kolumna = 6, kolumienka = 6;Tutaj akurat się łatwo domyśleć, program mały itp. itd. Ale w większym programie za miesiąc dwa jak będziesz potrzebować do tego wrócić to możesz w pewnym momencie stwierdzić, że nie wiesz co to "kolumna" i czym się różni od "kolumienka", wiem że nazywać sobie zmienne możesz jak chcesz nawet karaś, karp, leszcz które będą przechowywać nazwy użytkowników, jednak dobrym nawykiem jest jednak bardziej precyzyjne nazywanie co zmienna przechowuje, naprawdę z czasem docenisz że lepiej zmienne nazwać "kolumna" i "kolumna_tmp" (tmp od temporary, np. kopia zmiennej do przebiegu funkcji) niż "kolumna" i "kolumienka" Chociaż fakt przykład głupi akurat, ale to nie o to chodzi. Możesz także w komentarzach sobie pisać co jest w danej zmiennej jak już nie lubisz precyzyjnych nazw inline void tajne() {while(cin.get() != '\n') continue; }na co Ci to jak tego nigdzie nie używasz ? Kompilatory w większości to zignorują, tylko po co im dokładać pracy na sprawdzanie czy tego użyłeś Druga sprawa na kij się zaczynasz uczyć od funkcji inline ? A jak już chcesz je stosować to wiedz iż sporo kompilatorów pętle while/do..while/for wewnątrz funkcji inline i tak zignoruje i potraktuje ją jako zwyczajną funkcje. Zresztą używanie pętli w inlinach, nawet jak kompilator zinterpretuje to poprawnie i wklei tak jak trzeba, może spowodować ze plik wynikowy będzie dużo większy niż przy standardowym odwołaniu do funkcji. Pamiętaj też, że tak naprawdę nie wiesz czy twój kompilator poprawnie łyka takie funkcje Więc stosuj je już jak naprawdę musisz, bo przedobrzyć z nimi naprawdę łatwo. Hmm to tak na początek co mi przylazło do głowy po przejrzeniu programu, nie zagłębiałem się dokładnie bo powiem szczerze nie chciało mi się dochodzić "co do czego należy" (patrz -> wcięcia) P.S. Nie bijcie za podbicie tematu nie mogłem się powstrzymać Cytuj Link to post Share on other sites
Dante 1 Napisano 23 Grudnia 2009 Autor Udostępnij Napisano 23 Grudnia 2009 To bardzo dobrze, że nie umiesz się powstrzymać. Nic w tym złego. Akurat od listopada nie programuje(czyt. uczę się programować). Mam nadzieje, że kiedyś wrócę. Znalazłem dodatkowo znalazłem bardziej odpowiednie forum dla programistów. Więc, nie zaglądam tutaj. Cytuj Link to post Share on other sites
Gaja1994 0 Napisano 14 Lutego 2010 Udostępnij Napisano 14 Lutego 2010 Ja też trochę się interesuję c++, ale nauki mam tyle, że mi czasu nie starcza na wzięcie się za to na poważnie. Może w wakacje:-) Ten język jest najlepszy(wszystkie biblioteki do robienia profesjonalnych programów są pod niego pisane) ale i najtrudniejszy(te dziwne znaczki). Osobiście chciałbym napisać jakiś muzyczny program, ale niestety trzeba czasu, a mi go brak:-( Cytuj Link to post Share on other sites
_nick_ 19 Napisano 14 Lutego 2010 Udostępnij Napisano 14 Lutego 2010 ale i najtrudniejszy(te dziwne znaczki)Najtrudniejszy jest kod maszynowy a potem assembler c++ nie jest taki zły, ale wiadomo - Java czy .Net jest dużo łatwiejszy. Cytuj Link to post Share on other sites
Bany_krk 200 Napisano 14 Lutego 2010 Udostępnij Napisano 14 Lutego 2010 co ty gadasz, dla mnie assembler łatwiejszy, nienawidzę programować obiektowo, jak coś to tylko czyste C Cytuj Link to post Share on other sites
_nick_ 19 Napisano 14 Lutego 2010 Udostępnij Napisano 14 Lutego 2010 Obiektowe programowanie jest najbardziej przystępne. Osobiście lubię Javę Ale wiadomo, że do niektórych zastosowań się nie nadaje. Cytuj Link to post Share on other sites
Gość DANNY_79 Napisano 18 Kwietnia 2010 Udostępnij Napisano 18 Kwietnia 2010 Nick -- nie bardzo się zgodzę. Ja zaczynałem programować w latach '80-tych i przywykłem do programowania strukturalnego. Takie jest dla mnie osobiście najbardziej pasujące. Czasy się jednak zmieniły i niestety programista musi się dostosować, albo zmienić zawód Cytuj Link to post Share on other sites
Bartek Żak 67 Napisano 21 Kwietnia 2010 Udostępnij Napisano 21 Kwietnia 2010 Na projekt chyba się zdecyduję na napisanie gry. Gracz steruje samolotem (góra, dół), z naprzeciwka przylatują wrogie maszyny, możemy do nich strzelać (tak jak one do nas), unikać trzeba ich pocisków itd... No właśnie: czy jest jakieś grono osób z wyobraźnią, ciekawymi pomysłami i posiadających umiejętności programowania w C++/Javie oraz co najważniejsze, są chętni do pomocy przy rozwiązywaniu napotkanych problemów? :> Ma to być konsolowa aplikacja. Myślę o stworzeniu dodatkowego wątku na forum dla tego problemu. Cytuj Link to post Share on other sites
Recommended Posts
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.