#include #include #include #include using namespace std; #define DEBUG 0 #define CLS 1 #if CLS #include #endif // Definicje potrzebnych stalych const int K = 10, L = 15, M = 20, N = 30, P = 50, Q = 100; // Deklaracje innych zmiennych i typów struct Autor { char imie[20]; char nazwisko[30]; unsigned int numerAlbumu; }; // Deklaracje zapowiadajace funkcji void wypiszAutoraProgramu(const Autor &autor, const bool nrAlbumu = true); float min(const float a, const float b); float min(const float a, const float b, const float c); void gwiazdka1(const int n); void gwiazdka2(const int n); bool czyTrojkat(const float a, const float b, const float c); bool czyProstokatny(const float a, const float b, const float c); void naTekst(float a); void wypisz1D(const int *tab, const int ilosc); void wypelnij1D(int *tab, const int ilosc, const int min, const int max); void sortuj(int *tab, const int ilosc); void sito(int *tab, const int ilosc, const int maxElement); void wypelnij2D(int tab[][L], const int ilosc, const int min, const int max); void wypelnij2Duni(int *t, const int iloscKol, const int iloscWie, const int min, const int max); void wypisz2D(int tab[][L], const int ilosc); void wypisz2Duni(int *t, const int kol, const int wie); int sumaPar(int tab[][L], const int ilosc); void minMax(int tab[][L], const int ilosc, int& min, int& max); void minMaxIndeks(int tab[][L], const int ilosc, int& minIdxX, int& minIdxY, int& maxIdxX, int& maxIdxY); int minKol(int tab[][L], const int ilosc); void mnozenie2D(int m1[][L], const int wysokosc1, int m2[][M], int wynik[][M]); void mediana(int *t, const int kol, const int wie, const int dlugoscZbioru); void sortujWiersze(int tab[][L], const int ilosc); void mieszaj1D(int tab[], const int ilosc); void mieszaj2D(int tab[][L], const int ilosc); int main() { // Wypisanie autora programu Autor borys = { "Borys", "Cywinski", 204192 }; cout << "Program:\tZadania swiateczne\nAutor: \t\t"; wypiszAutoraProgramu(borys); cout << endl << endl; // Definicje potrzebnych stalych lokalnych const int p = -10, q = 10; // Definicje zmiennych float i wczytanie ich przez uzytkownika float a, b, c; #if !DEBUG cout << "Podaj trzy zmienne typu float:" << endl; cin >> a >> b >> c; cout << endl; #else a = 638.12; b = 4; c = 6.7760; #endif // Definicje zmiennych int i wczytanie ich przez uzytkownika int k, l, m, n; #if !DEBUG cout << "Podaj cztery zmienne typu int:" << endl; cin >> k >> l >> m >> n; cout << endl; #else k = 45; l = 12; m = -19; n = 12; #endif #if CLS // Kontrolne wyczyszczenie ekranu system("cls"); #endif // Zwrocenie liczby mniejszej z podanych cout << "Liczba najmniejsza ze zbioru {" << a << ", " << b << "} to " << min(a, b) << endl; cout << "Liczba najmniejsza ze zbioru {" << a << ", " << b << ", " << c << "} to " << min(a, b, c) << endl << endl; // Wykonanie funkcji gwiazdka1 i gwiazdka2 gwiazdka1(n); cout << endl; gwiazdka2(n); cout << endl << endl; // Wykonanie funkcji czyTrojkat na zmiennych a, b, c bool res = czyTrojkat(a, b, c); cout << "Z odcinkow {" << a << ", " << b << ", " << c << "} "; if(res) cout << "mozna utworzyc trojkat." << endl << endl; else cout << "nie mozna utworzyc trojkata." << endl << endl; // Wykonanie funkcji czyProstokatny na zmiennych a, b, c res = czyProstokatny(a, b, c); cout << "Z odcinkow {" << a << ", " << b << ", " << c << "} "; if(res) cout << "mozna utworzyc trojkat prostokatny." << endl << endl; else cout << "nie mozna utworzyc trojkata prostokatnego." << endl << endl; // Wykonanie funkcji naTekst cout << a << " to kwota: "; naTekst(a); cout << endl << endl; // Definicja tablicy wypelnionej zerami i i wywolanie funkcji wypisz1D int tablica[L] = {0}; wypelnij1D(tablica, L, p, q); wypisz1D(tablica, L); cout << endl << endl; // Sortowanie tablicy srand(time(NULL)); int *tablicaP = new int[P]; wypelnij1D(tablicaP, P, 0, 999); cout << "Tablica nieposortowana:" << endl; wypisz1D(tablicaP, P); cout << "\n\nSortowanie tablicy..."; sortuj(tablicaP, P); cout << "\tTablica posortowana:" << endl; wypisz1D(tablicaP, P); cout << endl << endl; delete [] tablicaP; // Definicja tablicy o rozmiarze Q i wykonanie sita int *tablicaQ = new int[Q]; wypelnij1D(tablicaQ, Q, 0, Q); cout << "\nWylosowana tablica " << Q << "-elementowa:" << endl; wypisz1D(tablicaQ, Q); cout << "\n\nPo pozostawieniu tylko elementow pierwszych:" << endl; sito(tablicaQ, Q, Q); wypisz1D(tablicaQ, Q); cout << endl << endl; delete [] tablicaQ; // Definicja tablicy dwuwymiarowej, wylosowanie jej i wypisanie int t2[K][L]; cout << "Tablica dwuwymiarowa [" << K << "][" << L << "]:" << endl; wypelnij2D(t2, K, k, l); wypisz2D(t2, K); cout << endl << endl; // Wywolanie funkcji sumaPar cout << "Suma elementow o parzystej sumie indeksow: " << sumaPar(t2, K) << endl << endl; // Wywolanie funkcji minMax cout << "Wyszukiwanie najmniejszego i najwiekszego\nelementu tablicy dwuwymiarowej..."; minMax(t2, K, m, n); cout << "\n\telement najmniejszy: " << m << "\n\telement najwiekszy: " << n << endl << endl; // Wywolanie funkcji minMaxIndeks minMaxIndeks(t2, K, k, l, m, n); cout << "Element o najmniejszej wartosci ma indeksy [" << k << "][" << l << "]," << endl; cout << "element o najwiekszej wartosci ma indeksy [" << m << "][" << n << "]." << endl << endl; // Wywolanie funkcji minKol cout << "Kolumna o najmniejszej sumie elementow ma indeks " << minKol(t2, K) << endl << endl; // Mnozenie macierzy int t3[L][M]; int wynikowa[K][M]; wypelnij2Duni(&t3[0][0], M, L, 1, 2); mnozenie2D(t2, K, t3, wynikowa); cout << "Macierz wynikowa (po mnozeniu [" << K << "][" << L << "] x [" << L << "][" << M << "]):" << endl; wypisz2Duni(&wynikowa[0][0], M, K); cout << endl << endl; // Wywolanie funkcji mediana cout << "Ta sama macierz po zamianie kazdego elementu\nna mediane jego 9-elementowego otoczenia:" << endl; mediana(&wynikowa[0][0], K, M, 9); wypisz2Duni(&wynikowa[0][0], M, K); cout << endl << endl; // Sortowanie wierszy cout << "Tablica dwuwymiarowa [" << K << "][" << L << "] po operacji sortowania wierszy rosnaco\nwedlug sum elementow w wierszach:" << endl; sortujWiersze(t2, K); wypisz2D(t2, K); cout << endl << endl; // Mieszanie tablic cout << "Ta sama tablica po przemieszaniu: " << endl; mieszaj2D(t2, K); wypisz2D(t2, K); cout << endl << endl; cout << "Tablica jednowymiarowa o " << L << " elementach (pierwsza z programu)\npo przemieszaniu elementow:" << endl; mieszaj1D(tablica, L); wypisz1D(tablica, L); cout << endl << endl; return 0; } // Definicje funkcji void wypiszAutoraProgramu(const Autor &autor, const bool nrAlbumu) { cout << autor.imie << ' ' << autor.nazwisko; if(nrAlbumu) cout << ",\t Numer albumu: " << autor.numerAlbumu; } float min(const float a, const float b) { return (a < b) ? a : b; } float min(const float a, const float b, const float c) { return (a < b) ? ((a < c) ? a : c ) : ((b < c) ? b : c); } static float max(const float a, const float b, const float c) { return (a > b) ? ((a > c) ? a : c ) : ((b > c) ? b : c); } void gwiazdka1(const int n) { char *gw = new char[n + 1]; for(int i = 0; i < n; i++) { gw[i] = '*'; gw[i + 1] = NULL; cout << gw << endl; } delete [] gw; } void gwiazdka2(const int n) { char *gw = new char[n + 1]; int i = 0; for(i = 0; i < n; i++) gw[i] = '*'; gw[i + 1] = NULL; i = 0; do { cout << gw << endl; gw[i++] = ' '; } while(i < n); delete [] gw; } bool czyTrojkat(const float a, const float b, const float c) { if(a <= 0 || b <= 0 || c <= 0) return false; float m = max(a, b, c); if(m < (a + b + c - m)) return true; else return false; } bool czyProstokatny(const float a, const float b, const float c) { if(a <= 0 || b <= 0 || c <= 0) return false; float m = max(a, b, c); m *= m; if(m == (a*a + b*b + c*c - m)) return true; else return false; } void naTekst(float a) { if(a < 0 || a > 1000) { cout << "Blad! Zakres kwoty przekroczony!"; return; } char s = ' '; char jednosci[][10] = { "zero", "jeden", "dwa", "trzy", "cztery", "piec", "szesc", "siedem", "osiem", "dziewiec" }; char dziesiatki[][18] = { "dziesiec", "dziesiec", "dwadziescia", "trzydziesci", "czterdziesci", "piecdziesiat", "szescdziesiat", "siedemdziesiat", "osiemdziesiat", "dziewiecdziesiat" }; char nastki[][16] = { "jedenascie", "jedenascie", "dwanascie", "trzynascie", "czternascie", "pietnascie", "szesnascie", "siedemnascie", "osiemnascie", "dziewietnascie" }; char setki[][13] = { "tysiac", "sto", "dwiescie", "trzysta", "czterysta", "piecset", "szescset", "siedemset", "osiemset", "dziewiecset" }; int tmp = (int)a; int zlote = tmp % 1000; a *= 100.00; tmp = static_cast(a); int grosze = tmp % 100; if(a == 1000) cout << setki[0] << s; else { if(zlote > 100) cout << setki[(zlote % 1000) / 100] << s; if( (zlote % 100) > 19 || (zlote % 100) == 10 ) cout << dziesiatki[(zlote % 100) / 10] << s; else if( (zlote % 100) <= 19 && (zlote % 100) > 10 ) cout << nastki[zlote % 10] << s; if( (zlote % 100) < 10 || (zlote % 100) > 19) cout << jednosci[zlote % 10] << s; if(!zlote) cout << jednosci[0] << s; } if(zlote == 1) cout << "zloty, "; else if( (zlote % 100) > 4 && (zlote % 100) < 22 ) cout << "zlotych, "; else if( (zlote % 10) > 1 && (zlote % 10) <= 4 ) cout << "zlote, "; else cout << "zlotych, "; if(grosze > 19) cout << dziesiatki[grosze / 10] << s; if(grosze) { if(grosze < 10 || grosze > 19) cout << jednosci[grosze % 10] << s; else cout << nastki[grosze % 10] << s; } else cout << jednosci[0] << s; if(grosze == 1) cout << "grosz"; else if( grosze > 4 && grosze < 22 ) cout << "groszy"; else if( (grosze % 10) > 1 && (grosze % 10) <= 4 ) cout << "grosze"; else cout << "groszy"; } void wypisz1D(const int *tab, const int ilosc) { for(int i = 0; i < ilosc; i++) { //if(!(i%10) && i) cout << endl; cout << setw(5) << tab[i]; } } void wypelnij1D(int *tab, const int ilosc, const int min, const int max) { int min1 = min, max1 = max; if(min == max) { for(int i = 0; i < ilosc; i++) tab[i] = min; return; } else if(min > max) { min1 = max; max1 = min; } for(int i = 0; i < ilosc; i++) { tab[i] = (rand() % (max1 - min1 + 1)) + min1; } } void sortuj(int *tab, const int ilosc) { for(int i = 0; i < ilosc; i++) for(int j = 0; j < ilosc - 1 - i; j++) if(tab[j] > tab[j + 1]) { int u = tab[j]; tab[j] = tab[j + 1]; tab[j + 1] = u; } } void sito(int *tab, const int ilosc, const int maxElement) { for(int k = 0; k < ilosc; k++) { if(tab[k] < 2) { tab[k] = 0; continue; } else if(tab[k] == 2) { continue; } for(int i = 2; i * i <= maxElement; i++) { if( !(tab[k] % i) ) tab[k] = 0; } } } void wypelnij2D(int tab[][L], const int ilosc, const int min, const int max) { int min1 = min, max1 = max; if(min == max) { for(int i = 0; i < ilosc; i++) for(int j = 0; j < L; j++) tab[i][j] = min; return; } else if(min > max) { min1 = max; max1 = min; } for(int i = 0; i < ilosc; i++) for(int j = 0; j < L; j++) { tab[i][j] = (rand() % (max1 - min1 + 1)) + min1; } } void wypisz2D(int tab[][L], const int ilosc) { for(int i = 0; i < ilosc; i++) { for(int j = 0; j < L; j++) cout << setw(5) << tab[i][j]; cout << endl; } } int sumaPar(int tab[][L], const int ilosc) { int znak = 0; int suma = 0; for(int i = 0; i < ilosc; i++) { for(int j = znak; j < L; j += 2) suma += tab[i][j]; znak ^= 1; } return suma; } void minMax(int tab[][L], const int ilosc, int& min, int& max) { min = tab[0][0]; max = tab[0][0]; for(int i = 0; i < ilosc; i++) { for(int j = 0; j < L; j++) { if(tab[i][j] > max) max = tab[i][j]; if(tab[i][j] < min) min = tab[i][j]; } } } void minMaxIndeks(int tab[][L], const int ilosc, int& minIdxX, int& minIdxY, int& maxIdxX, int& maxIdxY) { minIdxX = 0; minIdxY = 0; maxIdxX = 0; maxIdxY = 0; for(int i = 0; i < ilosc; i++) { for(int j = 0; j < L; j++) { if(tab[i][j] > tab[maxIdxY][maxIdxX]) { maxIdxX = j; maxIdxY = i; } if(tab[i][j] < tab[minIdxY][minIdxX]) { minIdxX = j; minIdxY = i; } } } } int minKol(int tab[][L], const int ilosc) { int suma = 0, wynik = 0; int kol = 0; for(int j = 0; j < L; j++) { wynik += tab[0][j]; } for(int i = 1; i < ilosc; i++) { for(int j = 0; j < L; j++) { suma += tab[i][j]; } if(suma < wynik) { wynik = suma; kol = i; } suma = 0; } return kol; } void wypelnij2Duni(int *t, const int iloscKol, const int iloscWie, const int min, const int max) { int min1 = min, max1 = max; if(min == max) { for(int i = 0; i < iloscKol*iloscWie; i++) t[i] = min; //(iloscWie * iloscKol / iloscWie) + (i % iloscKol) return; } else if(min > max) { min1 = max; max1 = min; } for(int i = 0; i < iloscKol*iloscWie; i++) { t[i] = (rand() % (max1 - min1 + 1)) + min1; } } void mnozenie2D(int m1[][L], const int wysokosc1, int m2[][M], int wynik[][M]) { int suma = 0; for(int m = 0; m < M; m++) for(int n = 0; n < wysokosc1; n++) { for(int i = 0; i < L; i++) { suma += m1[n][i] * m2[i][m]; } wynik[n][m] = suma; suma = 0; } } void wypisz2Duni(int *t, const int kol, const int wie) { for(int i = 0; i < kol * wie; i++) { cout << setw(5) << t[i]; if( !(i%kol) && i ) cout << endl; } } void sortuj(int *t, int l, int r) { if(l < r) { int m = l; int tmp; for(int i = l +1; i <= r; i++) if(t[i] < t[l]) { tmp = t[++m]; t[m] = t[i]; t[i] = tmp; } tmp = t[l]; t[l] = t[m]; t[m] = tmp; sortuj(t, l, m - 1); sortuj(t, m + 1, r); } } void mediana(int *t, const int kol, const int wie, const int dlugoscZbioru) { int *mediany = new int[kol*wie]; int *zbior = new int[dlugoscZbioru]; int pdlugosc = 0; for(int i = 0; i < kol*wie; i++) { for(int k = 0; k < dlugoscZbioru / 2; k++) { if( (i - k) >= 0 ) zbior[pdlugosc++] = t[i - k]; //else zbior[pdlugosc++] = t[i]; if( (i + k + 1) < kol*wie ) zbior[pdlugosc++] = t[i + k + 1]; //else zbior[pdlugosc++] = t[i]; } //sortuj(zbior, 0, dlugoscZbioru - 1); sortuj(zbior, 0, pdlugosc); //mediany[i] = zbior[dlugoscZbioru / 2]; mediany[i] = zbior[pdlugosc / 2]; pdlugosc = 0; } for(int i = 0; i < kol*wie; i++) t[i] = mediany[i]; delete [] mediany; delete [] zbior; } void sortujWiersze(int tab[][L], const int ilosc) { struct TSuma { int suma; int idx; }; TSuma *sumy = new TSuma[ilosc]; TSuma tmp; int itmp; // zsumowanie wierszy i zapamietanie poindeksowanych sum for(int i = 0; i < ilosc; i++) { sumy[i].suma = 0; sumy[i].idx = i; for(int j = 0; j < L; j++) sumy[i].suma += tab[i][j]; } // posortowanie sum for(int i = 1; i < ilosc; i++) for(int j = ilosc - 1; j >= i; j--) if(sumy[j].suma < sumy[j-1].suma) { tmp = sumy[j]; sumy[j] = sumy[j - 1]; sumy[j - 1] = tmp; } // przestawianie wierszy wedlug posortowanych sum for(int i = 0; i < ilosc; i++) { for(int j = 0; j < L; j++) { itmp = tab[i][j]; tab[i][j] = tab[ sumy[i].idx ][j]; tab[ sumy[i].idx ][j] = itmp; } } delete [] sumy; } void mieszaj1D(int tab[], const int ilosc) { int tmp, miejsce; for(int i = 0; i < ilosc; i++) { miejsce = rand() % ilosc; tmp = tab[i]; tab[i] = tab[miejsce]; tab[miejsce] = tmp; } } void mieszaj2D(int tab[][L], const int ilosc) { int tmp, miejsce, k; for(int i = 0; i < ilosc; i++) for(int j = 0; j < L; j++) { miejsce = rand() % ilosc; k = rand() % L; tmp = tab[i][j]; tab[i][j] = tab[miejsce][k]; tab[miejsce][k] = tmp; } }