Sprawdź się
Zadanie 3. Ciągi geometryczne
W Uniksie Północnej przeprowadzono badanie wieku mieszkańców. Ze względów praktycznych obywatele nie przekazywali swoich danych pojedynczo, lecz grupowo, w ramach gospodarstw domowych, w których zamieszkiwali. Władze dodatkowo poprosiły, by wiek domowników posortować niemalejąco.
Dany jest plik wiek.txt
zawierający 100
ciągów liczbowych. Każdy ciąg zapisany jest w dwóch wierszach: w pierwszym znajduje się liczba mieszkańców gospodarstwa domowego, natomiast w drugim wiek domowników uszeregowany niemalejąco.
wiek.txt
Napisz program wyznaczający, ile w Uniksie Północnej jest gospodarstw domowych, w przypadku których wiek ich mieszkańców posortowany niemalejąco tworzy ciąg geometryczny. Wynik zapisz do pliku domostwa.txt
.
Uwaga:
Ciąg jest geometryczny, jeśli każdy jego kolejny wyraz, od drugiego począwszy, jest iloczynem wyrazu poprzedniego i pewnej stałej nazywanej ilorazem ciągu.
Do oceny oddajesz:
plik
domostwa.txt
zawierający odpowiedź (liczbę naturalną)plik(i) z komputerową realizacją zadania (kodem programu)
Przedstaw rozwiązanie zadania, pisząc program w języku C++, Java lub Python. Odpowiedź znajdziesz w pliku pod sekcją ćwiczeń.
Z uwagi na format modułów sprawdzających rozwiązania, w ćwiczeniach przyjmujemy liczebność każdego domostwa równą 5
.
JĘZYK C++
#include <iostream>
using namespace std;
int main()
{
int wiek[10][5] = {
{5,10,21,42,63},
{2,4,10,34,45},
{3,6,12,24,48},
{1,3,9,26,54},
{2,7,10,20,40},
{3,9,20,40,51},
{1,4,16,64,70},
{2,4,8,16,32},
{3,6,12,24,45},
{2,4,8,16,33}};
int licznik = 0, poprzednik, nastepca;
float iloczyn;
bool czyGeometryczny;
for (int i = 0; i < 10; i++){
poprzednik = wiek[i][0];
nastepca = wiek[i][1];
iloczyn = (float) nastepca / poprzednik;
czyGeometryczny = true;
for (int j = 2; j < 5; j++){
if((float) wiek[i][j]/nastepca == iloczyn){
poprzednik = nastepca;
nastepca = wiek[i][j];
}
else{
czyGeometryczny = false;
break;
}
}
if(czyGeometryczny) licznik ++;
}
cout << licznik << endl;
return 0;
}
JĘZYK JAVA
public class Main {
public static void main(String[] args) {
int[][] wiek = {
{5,10,21,42,63},
{2,4,10,34,45},
{3,6,12,24,48},
{1,3,9,26,54},
{2,7,10,20,40},
{3,9,20,40,51},
{1,4,16,64,70},
{2,4,8,16,32},
{3,6,12,24,45},
{2,4,8,16,33}
};
int licznik = 0, poprzednik, nastepca;
float iloczyn;
boolean czyGeometryczny;
for (int i = 0; i < 10; i++){
poprzednik = wiek[i][0];
nastepca = wiek[i][1];
iloczyn = (float) nastepca / poprzednik;
czyGeometryczny = true;
for (int j = 2; j < 5; j++){
if((float) wiek[i][j] / nastepca == iloczyn){
poprzednik = nastepca;
nastepca = wiek[i][j];
}
else{
czyGeometryczny = false;
break;
}
}
if(czyGeometryczny) {
licznik ++;
}
}
System.out.println(licznik);
}
}
JĘZYK PYTHON
wiek = [
[5,10,21,42,63],
[2,4,10,34,45],
[3,6,12,24,48],
[1,3,9,26,54],
[2,7,10,20,40],
[3,9,20,40,51],
[1,4,16,64,70],
[2,4,8,16,32],
[3,6,12,24,45],
[2,4,8,16,33]
]
licznik = 0
for i in range(len(wiek)):
poprzednik = wiek[i][0]
nastepca = wiek[i][1]
iloczyn = nastepca / poprzednik
czy_geometryczny = True
for j in range(2,5):
if wiek[i][j] / nastepca == iloczyn:
poprzednik = nastepca
nastepca = wiek[i][j]
else:
czy_geometryczny = False
break
if czy_geometryczny:
licznik += 1
print(licznik)
Schemat oceniania:
2 pkt – za poprawną odpowiedź
0 pkt – za błędną odpowiedź lub jej brak
Odpowiedź do zadania
domostwa.txt