Skocz do zawartości

Recommended Posts

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]){
Link to post
Share on other sites

#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ć. ;)

Link to post
Share on other sites
  • 1 miesiąc temu...
  • 2 tygodnie później...
  • 3 tygodnie później...
  • 1 rok później...

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 :P 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ć :]

Link to post
Share on other sites
  • 3 tygodnie później...

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.

Link to post
Share on other sites
  • 1 miesiąc temu...

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

Link to post
Share on other sites
  • 2 miesiące temu...
Gość DANNY_79

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

Link to post
Share on other sites

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.

Link to post
Share on other sites

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ą.

Gość
Odpowiedz w tym wątku...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...