Zadanie

Użytkowanie arkusza kalkulacyjnego
damc
Posty: 6
Rejestracja: pt lut 04, 2011 11:10 pm

Zadanie

Post autor: damc »

Mam następujące zadanie:
Dane są trzy pliki tekstowe o nazwach: lekarze.txt, pacjenci.txt, wizyty.txt.
Zawierają one informacje na temat lekarzy, pacjentów i odbytych wizyt domowych.
W każdym z plików dane w wierszu oddzielone są znakami tabulacji.
Plik o nazwie lekarze.txt zawiera informacje na temat lekarzy: numer identyfikacyjny
lekarza, jego nazwisko, imię, specjalność, datę urodzenia, numer NIP i numer PESEL.
Przykład:
23 Kadaj Monika pediatra 1965-03-16 879-122-69-94 65031687654
34 Nowak Anna nefrolog 1965-03-16 879-122-69-94 65031687654
Plik o nazwie pacjenci.txt zawiera dane na temat pacjentów: numer identyfikacyjny
pacjenta, jego nazwisko, imię, numer PESEL i datę urodzenia.
Przykład:
122 Nowakowska Joanna 73050512356 1973-05-05
124 Witkowski Hubert 88030422345 1988-03-04
Plik o nazwie wizyty.txt zawiera informacje na temat domowych wizyt lekarskich
przeprowadzonych przez lekarzy u pacjentów: numer identyfikacyjny lekarza, numer
identyfikacyjny pacjenta oraz datę wizyty lekarskiej przeprowadzonej przez lekarza
u pacjenta.
Przykład:
23 124 2006-12-13
34 122 2007-02-20
Wykorzystując dane zawarte w tych plikach i dostępne narzędzia informatyczne, wykonaj
poniższe polecenia, a wyniki zapisz w pliku o nazwie zad_6.txt. Wyniki do każdego
podpunktu poprzedź literą oznaczającą ten podpunkt.
a) Utwórz zestawienie zawierające nazwiska i imiona lekarzy oraz liczbę wizyt
przeprowadzonych przez każdego z nich. Informacje w zestawieniu uporządkuj
nierosnąco według liczby wizyt.
b) Utwórz zestawienie zawierające nazwiska i imiona pacjentów oraz liczbę wizyt lekarzy
u każdego z pacjentów, którzy urodzili się przed 1 lipca 1973 roku. Informacje
w zestawieniu uporządkuj niemalejąco według liczby wizyt.
c) Utwórz zestawienie zawierające informacje: nazwisko, imię i specjalność lekarzy
posiadających numer NIP rozpoczynający się od cyfry 8. Informacje w zestawieniu
uporządkuj alfabetycznie według nazw specjalności.
d) Utwórz zestawienie dla każdego pacjenta, zawierającego informację, u ilu lekarzy się
leczył, to znaczy wskaż, ilu różnych lekarzy było z wizytą u danego pacjenta.
W zestawieniu podaj nazwisko, imię pacjenta oraz liczbę lekarzy. Informacje
w zestawieniu uporządkuj alfabetycznie według nazwisk.
1. Czy to zadanie "robi się" w Calc czy Base? Myślę, że wiele z tych rzeczy łatwiej byłoby zrobić w Base, ale w Calc bardzo łatwo można te dane wczytać wybierając Otwórz i Tekst CVS, a w Base nie wiem, czy można tak zrobić (jeżeli można, to jak?). Mogę to jeszcze zrobić w języku programowania, ale wydaje mi się, że to jest typowe zadanie na program użytkowy i zaoszczędzę w ten sposób dużo czasu.

W Calc zrobiłbym to tak, że wczytałbym do osobnych arkuszów wszystkie dane (lekarze, wizyty, pacjenci) jako Tekst CVS. Tylko że:

1. Jakiej funkcji użyć na przykład do policzenia, ile w danej kolumnie jest jakichś wartości. Innymi słowy - jak zrobić na przykład podpunkt a? Znalazłem w pomocy funkcję BD.ILE_REKORDOW, ale ta funkcja jest bardzo skomplikowana więc nie wiem za bardzo tutaj jak jej użyć.
2. Jak wybrać te wiersze, które spełniają jakiś warunek (np. że pierwsza liczba w jakiejś kolumnie to 8)? Przeglądając dane, myślę że nie ma tego aż tak dużo żeby nie dało się tego zrobić ręcznie, ale chyba nie o to chodzi...
OpenOffice 2.4 Windows XP
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Zadanie

Post autor: Jan_J »

Zadania nikt za Ciebie nie zrobi -- przynajmniej taką mam nadzieję. Ale kilka sugestii może się przydać:
1. Czy to zadanie "robi się" w Calc czy Base? Myślę, że wiele z tych rzeczy łatwiej byłoby zrobić w Base, ale w Calc bardzo łatwo można te dane wczytać wybierając Otwórz i Tekst CVS, a w Base nie wiem, czy można tak zrobić (jeżeli można, to jak?). Mogę to jeszcze zrobić w języku programowania, ale wydaje mi się, że to jest typowe zadanie na program użytkowy i zaoszczędzę w ten sposób dużo czasu.
To zależy. wiele różnych kursów, dotyczących m.in. oprogramowania systemowego, baz danych, arkuszy kalkulacyjnych i podstaw programowania zawiera podobne ćwiczenia. Można je ,,atakować'' na różnych poziomach.
1. Jakiej funkcji użyć na przykład do policzenia, ile w danej kolumnie jest jakichś wartości. Innymi słowy - jak zrobić na przykład podpunkt a? Znalazłem w pomocy funkcję BD.ILE_REKORDOW, ale ta funkcja jest bardzo skomplikowana więc nie wiem za bardzo tutaj jak jej użyć.
2. Jak wybrać te wiersze, które spełniają jakiś warunek (np. że pierwsza liczba w jakiejś kolumnie to 8)? Przeglądając dane, myślę że nie ma tego aż tak dużo żeby nie dało się tego zrobić ręcznie, ale chyba nie o to chodzi...
Ręczną pracę zdecydowanie odradzam. Przejrzyj sobie funkcje arkusza, takie jak suma.jeżeli(), licz.jeżeli(). Można sobie poradzić bez nich, ale u żywa ich się wygodnie. Druga możliwość, to wspomniane wyżej funkcje bd.*(). Prawdę mówiąc, trudno mi znaleźć uzasadnienie dla ich istnienia. Trzecia możliwość, to sumowanie iloczynów przy użyciu rozszerzone j składni arkusza (tzw. formuły tablicowe, Ctrl+Shift+Enter) -- co prawda niskopoziomowe, ale dość potężne pod względem zwartości notacji.
Co do wyboru -- trzeba wiedzieć co znaczy ,,wybrać'': zrobić ich kopię w innym miejscu (do tego służy filtr), ukryć niespełniające warunku (autofiltr), czy postawić znacznik prz yrekordwch spełniających warunek (do tego wystarczy kolumna z fomułą sprawdzającą pojedynczy rekord).
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
damc
Posty: 6
Rejestracja: pt lut 04, 2011 11:10 pm

Re: Zadanie

Post autor: damc »

1. Funkcja licz.jeżeli() jest spoko.

2. Mam w kolumnie zapisane ileś PESELI. Pierwsze dwie cyfry to rok urodzenia. Mam znaleźć najczęściej występujący rok urodzenia. W tym celu robię tak:
a) w kolumnie obok (B...) piszę: =LEWY(A1; 2) czyli wycinam pierwsze dwie cyfry
b) w następnej komórce piszę: =NAJCZĘŚCIEJ.WYST(B1:B150) i w ten sposób chcę znaleźć najczęściej występującą liczbę, a więc najczęściej powtarzający się rok urodzenia. Niestety pojawia się błąd (nieprawidłowy argument). Próbowałem to zamienić na wartość liczbową przy pomocy funkcji L() czyli tak: =L(LEWY(A1; 2)), ale L() zawsze zwraca wartość 0. Co jest nie tak?

3. Jak zrobić ostatni podpunkt z powyższego zadania?
OpenOffice 2.4 Windows XP
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Zadanie

Post autor: Jan_J »

Jeżeli traktujesz datę jak tekst, to lewy() jest OK. Ale o wiele lepiej jest traktować ją jako datę. Sprawdź funkcje obsługi dat, powinna być taka, która wyjmuje z daty rok. Nazwa jest oczywista.
Natomiast najczęściej występująca wartość w ciągu obserwacji, czyli wartość modalna. Funkcja, która ją wyznacza, w statystyce nosi nazwę moda. Pewna firma postanowiła przed laty tłumaczyć nazwy funkcji na języki lokalne, co wprowadziło nową jakość i swoisty folklor. I tak, moda po polsku w arkuszach bywa nazywana wyst.najczęściej().

Co do trzeciego zadania: musisz wiedzieć, czy chcesz wybrane dane oznaczyć, przenieść, czy też ukryć pozostałe. W pierwszym przypadku prosta formuła, w pozostałych: filtry.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Awatar użytkownika
adamderesz
Posty: 2
Rejestracja: ndz mar 06, 2011 6:54 pm
Lokalizacja: Gdańsk

Re: Zadanie

Post autor: adamderesz »

Dodałbym, że wszystko zależy co chcesz z tymi danymi potem robić i jak często... jeśli to operacja, powiedzmy, jednorazowa - to rozbicie wejściowych ciągów na drobniejsze, jak np wyciągnięcie daty urodzenia z numeru pesel i przekazanie całości dalej - można się pobawić w instrukcje warunkowe i wycinanie fragmentów - sam bym tak zrobił

Jeśli jednak te dane miały by być dalej używane do różnych zestawień itd, to jednak wcisnąłbym wszystko w base, jeśli miałby być używany OOo lub w niezależną, dobrze dobezpieczoną przed dostępem osób trzecich inną bazę danych (BTW mam nadzieję, że to nie były prawdziwe pesele i dane, które wkleiłeś w post)
pozdrawiam, Adam
OpenOffice 3.3 na Windows Vista / użytkownik od samego początku OOo
ODPOWIEDZ