#include <iostream>
#include <cstdlib>
#include <ctime>
#include <stdio.h>
using namespace std;
/* ************************************************************************
FUNKCJE
*************************************************************************** */
void losowanie_ciagu_geom(double tab[], int n)
{
srand((unsigned int)time(NULL));
int pierwsza_losowa=1+rand()%(10);
int q_losowania=1+rand()%(10); // 1 po to aby nigdy nie wylosowano liczby 0
tab[0]=pierwsza_losowa;
for(int k=1;k<n;k++)
{
tab[k]=tab[k-1]*q_losowania;
}
cout<< "a1= "<<pierwsza_losowa<<endl;
cout<< "q= "<<q_losowania<<endl;
cout<<endl;
for(int j=0;j<n;j++)
{
cout<<tab[j]<< endl; // wypisywanie tablicy
}
}
void liczby_pseudolosowe(double tab [], int n)
{
int min, max;
srand((unsigned int)time(NULL)); // nizej generowane liczby zaleza od czasu - nie beda sie powtarzac przy kolejnym uruchomieniu programu
cout << "Podaj zakres losowania" << endl;
cin >> min >> max;
cout << "Podany zakres to: " << min << "-" << max << endl;
for (int i = 0; i<n; i++)
{
tab[i] = min + rand() % (max - min);
cout << tab[i] << " ";
}
cout << endl;
}
void elementy_ciagu(double tab[], int n)
{
printf("Podaj ciag z klawiatury:\n");
for (int i = 0; i<n; i++)
{
cin >> tab[i];
}
cout << "Liczby podane przez Ciebie to: " << endl;
for (int i = 0; i < n; i++)
{
cout << tab[i]<<" "; // wypisuje wylosowane liczby
}
cout << endl;
}
/****************** sprawdzanie czy ciag jest geometryczny*************************
// jesli drugi wyraz ciagu tab(a+1) jest rowny pierwszemu pomnozonemu przez q
// tab[a] to wyraz pierwszy
// tab[a]*q tworzy drugi wyraz
***********************************************************************************/
void sprawdzenie(double tab[], int n)
{
double q;
q=(tab[1])/(tab[0]);
int wartownik=0;
for (int a = 0; a <= n; a++)
{
if (tab[a+1]==(tab[a]*q))
wartownik++; //wartownik jest potrzebny bo nieznana jest liczba wyrazow ciagu
}
if (wartownik==n-1)
{
//cout<<(tab[1])/(tab[0])<<endl; // wyswietla wartosc q
cout << "Ciag jest geometryczny" << endl;
}
if(wartownik!=n-1)
{
cout << "Ciag nie jest geometryczny" << endl;
}
}
void suma_liczb(double tab[], int n)
{
int jaki, suma=0,i=0;
cout << "Podaj najmniejszy element do sumowania: " << endl;
cin >> jaki;
for (i = 0; i <= n; i++)
{
if (tab[i] <= jaki)
{
suma = suma + tab[i];
}
}
cout << "suma liczb: ";
cout << suma;
}
/************************************************************************************************
* glowna czesc programu *
************************************************************************************************/
int main()
{
int ktory,n;
double tab [1000];
cout << "[1] - Automatyczne wygenerowanie ciagu o szukanych wlasciwosciach" << endl;
cout << "[2] - Wygenerowanie liczb pseudolosowych z podanego zakresu" << endl;
cout << "[3] - Podanie elementow ciagu z klawiatury" << endl<<endl;
cin >> ktory;
switch (ktory)
{
case 1:
printf("Podaj ilosc wyrazow w ciagu: ");
cin >> n;
if(n<3)
printf("ciag musi posiadac minimum 3 wyrazy");
else {
losowanie_ciagu_geom(tab, n);
sprawdzenie(tab, n);
suma_liczb(tab, n);
}
break;
case 2:
printf("Podaj ilosc wyrazow w ciagu: ");
cin >> n;
if(n<3)
printf("ciag musi posiadac minimum 3 wyrazy");
else {
liczby_pseudolosowe(tab, n);
sprawdzenie(tab, n);
suma_liczb(tab, n);
}
break;
case 3:
printf("Podaj ilosc wyrazow w ciagu: ");
cin >> n;
if(n<3)
printf("ciag musi posiadac minimum 3 wyrazy");
else {
elementy_ciagu(tab, n);
sprawdzenie(tab, n);
suma_liczb(tab, n);
}
break;
}
return 0;
}