Sprawdź się
Zadanie 3. Mieszkania
Na osiedlu Kalkulacyjnym znajduje się wiele bloków pełniących rolę budynków mieszkalnych. Wszystkie nowo wybudowane bloki zapisywane są przez deweloperów w spisie budynków.
Spis budynków składa się z następujących danych:
IdBudynku– unikalny identyfikator, który posiada każdy budynekUlicaNrBudynku– liczba całkowita z zakresu [1; 107]LiczbaMieszkańCzyBalkon– czy mieszkania zostały wybudowane z balkonem („tak” lub „nie”)
Wszystkie informacje zostały zapisane kolejno w plikach: IdBudynku.txt, Ulica.txt, NrBudynku.txt, LiczbaMieszkan.txt oraz CzyBalkon.txt.
Każdy plik zawiera 300 wierszy z danymi dotyczącymi informacji o blokach znajdujących się na osiedlu Kalkulacyjnym.
Informacje w wierszach opisują kolejne budynki w taki sposób, że indeksy wierszy w poszczególnych plikach odpowiadają sobie, opisując jeden blok.
Część informacji w spisie, z biegiem lat, uległa uszkodzeniu lub wyblakł tusz na kartkach. Postanowiono więc odnowić spis.
Utracone informacje można odzyskać dzięki temu, że są one wzajemnie zależne od innych informacji w spisie.
Zależności są następujące:
Każdy kolejny budynek w spisie posiada
IdBudynkuo 1 większe od poprzedniego.Wszystkie bloki na ulicach: Matecznego, Sienkiewicza oraz Oliwkowa posiadają dokładnie 30 mieszkań.
Balkony są w blokach, których numery budynków są liczbami pierwszymi (przyjmij, że 2 jest najmniejszą liczbą pierwszą).
Utracone informacje są zapisane w plikach jako „###”.
Uzupełnij dane w plikach, a następnie wykonaj zadania:
Policz, ile jest mieszkań z balkonem.
Sprawdź, na której ulicy (lub ulicach) wybudowano najwięcej bloków.
Oceń, czy więcej mieszkań jest z balkonem, czy bez. Jeżeli więcej mieszkań ma balkon, odpowiedz „tak”, w przeciwnym wypadku „nie”.
Kolejne odpowiedzi wypisz, rozdzielając je znakami odstępu.
Przykład: „odpowiedź1 odpowiedź2 odpowiedź3”
Zadanie należy wykonać, działając na strukturze stworzonej według wzoru w zadaniu.
Korzystając z informacji z polecenia oraz wykorzystując dane zawarte w plikach tekstowych, rozwiąż zadania w wybranym języku programowania, a następnie sprawdź poprawność algorytmu dla przykładowych danych w ćwiczeniu.
IdBudynku.txt
Plik tekstowy TXT zawierający wartości liczbowe. Pobierz załącznik
Ulica.txt
NrBudynku.txt
Plik tekstowy TXT zawierający wartości liczbowe. Pobierz załącznik
LiczbaMieszkan.txt
Plik tekstowy TXT zawierający wartości liczbowe. Pobierz załącznik
CzyBalkon.txt
Plik TXT zawierający wypisane wartości tak lub nie. Pobierz załącznik
C++
#include <iostream>
#include <string>
#include <cmath>
#include <stdlib.h>
using namespace std;
bool CzyPierwsza(int x) {
for(int i = 2; i < int(x/2); i++)
if(x % i == 0)
return false;
return true;
}
struct Spis {
int id;
string ulica;
int nr;
int liczba;
string balkon;
};
int main() {
int n = 13;
Spis Budynek[n];
string IdBudynku[] = {"1", "2", "###", "###", "5", "6", "###", "8", "###", "10", "11", "12", "13"};
string Ulica[] = {"Czekoladowa", "Baziowa", "Banacha", "Matecznego", "Banacha", "Kawowa", "Matecznego", "Sienkiewicza", "Baziowa", "Oliwkowa", "Sienkiewicza", "Banacha", "Matecznego"};
int NrBudynku[] = {11, 7, 6, 7, 11, 2, 5, 5, 8, 1, 5, 10, 9};
string LiczbaMieszkan[] = {"32", "19", "17", "###", "19", "42", "30", "30", "43", "30", "###", "29", "###"};
string CzyBalkon[] = {"nie", "nie", "nie", "nie", "###", "nie", "nie", "tak", "nie", "tak", "nie", "tak", "tak"};
for(int i = 0; i < n; i++) {
Budynek[i].id = i + 1;
Budynek[i].ulica = Ulica[i];
Budynek[i].nr = NrBudynku[i];
if(Ulica[i] == "Matecznego" || Ulica[i] == "Sienkiewicza" || Ulica[i] == "Oliwkowa")
Budynek[i].liczba = 30;
else
Budynek[i].liczba = atoi(LiczbaMieszkan[i].c_str());
if(CzyPierwsza(NrBudynku[i]))
Budynek[i].balkon = "tak";
else
Budynek[i].balkon = CzyBalkon[i];
}
//Podpunkt 1
int ileBalkonow = 0;
for(int i = 0; i < n; i++)
if(Budynek[i].balkon == "tak")
ileBalkonow++;
//Podpunkt 2
string Wystepowanie[13];
int ileWyst[13];
for(int i = 0; i < n; i++){
Wystepowanie[i] = "brak";
ileWyst[i] = 0;
}
int max = 1;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++) {
if(Wystepowanie[j] == Budynek[i].ulica) {
ileWyst[j]++;
if(ileWyst[j] > max)
max = ileWyst[j];
}
else if(Wystepowanie[j] == "brak") {
Wystepowanie[j] = Budynek[i].ulica;
ileWyst[j] = 0;
}
}
//Podpunkt 3
int ileBalkon = 0;
string odp;
for(int i = 0; i < n; i++)
if(Budynek[i].balkon == "tak")
ileBalkon++;
if(ileBalkon > n / 2)
odp = "tak";
else
odp = "nie";
//Odpowiedzi
cout<<ileBalkonow<<" "<<max<<" "<<odp;
}Java
class Spis {
public int id;
public String ulica;
public int nr;
public int liczba;
public String balkon;
}
public class Main {
static boolean CzyPierwsza(int x) {
for (int i = 2; i < x / 2; i++)
if (x % i == 0)
return false;
return true;
}
public static void main(String[] args) {
int n = 13;
Spis[] Budynek = new Spis[n];
for(int i = 0; i < n; i++)
Budynek[i] = new Spis();
String[] IdBudynku = {"1", "2", "###", "###", "5", "6", "###", "8", "###", "10", "11", "12", "13"};
String[] Ulica = {"Czekoladowa", "Baziowa", "Banacha", "Matecznego", "Banacha", "Kawowa", "Matecznego", "Sienkiewicza", "Baziowa", "Oliwkowa", "Sienkiewicza", "Banacha", "Matecznego"};
int[] NrBudynku = {11, 7, 6, 7, 11, 2, 5, 5, 8, 1, 5, 10, 9};
String[] LiczbaMieszkan = {"32", "19", "17", "###", "19", "42", "30", "30", "43", "30", "###", "29", "###"};
String[] CzyBalkon = {"nie", "nie", "nie", "nie", "###", "nie", "nie", "tak", "nie", "tak", "nie", "tak", "tak"};
for (int i = 0; i < n; i++) {
Budynek[i].id = i + 1;
Budynek[i].ulica = Ulica[i];
Budynek[i].nr = NrBudynku[i];
if (Ulica[i].equals("Matecznego") || Ulica[i].equals("Sienkiewicza") || Ulica[i].equals("Oliwkowa"))
Budynek[i].liczba = 30;
else
Budynek[i].liczba = Integer.parseInt(LiczbaMieszkan[i]);
if (CzyPierwsza(NrBudynku[i]))
Budynek[i].balkon = "tak";
else
Budynek[i].balkon = CzyBalkon[i];
}
//Podpunkt 1
int ileBalkonow = 0;
for (int i = 0; i < n; i++)
if (Budynek[i].balkon.equals("tak"))
ileBalkonow++;
//Podpunkt 2
String[] Wystepowanie = new String[13];
int[] ileWyst = new int[13];
for (int i = 0; i < n; i++) {
Wystepowanie[i] = "brak";
ileWyst[i] = 0;
}
int max = 1;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) {
if (Wystepowanie[j].equals(Budynek[i].ulica)) {
ileWyst[j]++;
if (ileWyst[j] > max)
max = ileWyst[j];
} else if (Wystepowanie[j].equals("brak")) {
Wystepowanie[j] = Budynek[i].ulica;
ileWyst[j] = 0;
}
}
//Podpunkt 3
int ileBalkon = 0;
String odp;
for (int i = 0; i < n; i++)
if (Budynek[i].balkon.equals("tak"))
ileBalkon++;
if (ileBalkon > n / 2)
odp = "tak";
else
odp = "nie";
//Odpowiedzi
System.out.println("" + ileBalkonow + " " + max + " " + odp);
}
}Python
def CzyPierwsza(x):
for i in range(2, int(x/2)):
if x % i == 0:
return False
return True
n = 13
Budynek = []
for i in range(n):
Budynek.append({
"id":0,
"ulica":"",
"nr":0,
"liczba":0,
"balkon":""
})
IdBudynku = ["1", "2", "###", "###", "5", "6", "###", "8", "###", "10", "11", "12", "13"]
Ulica = ["Czekoladowa", "Baziowa", "Banacha", "Matecznego", "Banacha", "Kawowa", "Matecznego", "Sienkiewicza", "Baziowa", "Oliwkowa", "Sienkiewicza", "Banacha", "Matecznego"]
NrBudynku = [11, 7, 6, 7, 11, 2, 5, 5, 8, 1, 5, 10, 9]
LiczbaMieszkan = ["32", "19", "17", "###", "19", "42", "30", "30", "43", "30", "###", "29", "###"]
CzyBalkon = ["nie", "nie", "nie", "nie", "###", "nie", "nie", "tak", "nie", "tak", "nie", "tak", "tak"]
for i in range(n):
Budynek[i]['id'] = i + 1
Budynek[i]['ulica'] = Ulica[i]
Budynek[i]['nr'] = NrBudynku[i]
if Ulica[i] == "Matecznego" or Ulica[i] == "Sienkiewicza" or Ulica[i] == "Oliwkowa":
Budynek[i]['liczba'] = 30
else:
Budynek[i]['liczba']= int(LiczbaMieszkan[i])
if CzyPierwsza(NrBudynku[i]):
Budynek[i]['balkon'] = "tak"
else:
Budynek[i]['balkon'] = CzyBalkon[i]
# Podpunkt 1
ileBalkonow = 0
for i in range(n):
if Budynek[i]['balkon'] == "tak":
ileBalkonow+=1
# Podpunkt 2
Wystepowanie = [""] * 13
ileWyst = [0] * 13
for i in range(n):
Wystepowanie[i] = "brak"
ileWyst[i] = 0
max = 1
for i in range(n):
for j in range(n):
if Wystepowanie[j] == Budynek[i]['ulica']:
ileWyst[j]+=1
if ileWyst[j] > max:
max = ileWyst[j]
elif Wystepowanie[j] == "brak":
Wystepowanie[j] = Budynek[i]['ulica']
ileWyst[j] = 0;
# Podpunkt 3
ileBalkon = 0
for i in range(n):
if Budynek[i]['balkon'] == "tak":
ileBalkon+=1
if ileBalkon > n / 2:
odp = "tak"
else:
odp = "nie"
# Odpowiedzi
print("{} {} {}".format(ileBalkonow, max, odp))Odpowiedzi do zadań z pliku:
92,
Banacha Oliwkowa,
nie.
Forma wypisania odpowiedzi:
92 Banacha Oliwkowa nie