Datenpaare (Datensequenz) (Datenstrukturen)
Schreiben Sie ein Programm, das von 100 Personen die Familiennamen und Vornamen aufnehmen kann. Laden Sie die Namensliste herunter. Dabei sollen alle Angaben in einem einzigen Array (data) wie folgt abgelegt werden:
data[0] "Hans" // erster Vorname
data[1] "Meier" // -"- Familienname
data[2] "Vreni" // zweiter Vorname
data[3] "Sutter" // -"- Familienname
data[4] "Johanna" // dritter Vorname
data[5] "Keller" // -"- Familienname
data[6] "Peter" // vierter Vorname
data[7] … usw.
Schreiben Sie danach die folgenden Subroutinen:
speicherePerson (data : string[], nummer : integer,
vorname: string , familienname: string)
leseFamilienname(data : string[], nummer : integer): string
leseVorname (data : string[], nummer : integer): string
In den Subroutinen bezeichnet der Parameter nummer nicht den Index, sondern die Personennummer: 1 = "Hans Meier", 2 = "Vreni Sutter", 3 = "Johanna Keller".
Dateien:
0 Kommentare
3 Lösung(en)
import os
def speicherePerson(data,nummer,vorname,familienname):
data[(nummer-1)*2]=vorname
data[(nummer-1)*2+1]=familienname
def leseFamilienname(data,nummer):
return data[(nummer-1)*2+1]
def leseVorname (data, nummer):
return data[(nummer-1)*2]
# Leeres Array erzeugen:
data = ['']*200
f = open('namensliste.txt', 'r')
nummer = 1
while(True):
vorname = f.readline().rstrip('\n')
familienname = f.readline().rstrip('\n')
if (vorname != '' and familienname!= ''):
speicherePerson(data,nummer,vorname,familienname)
else:
break
nummer = nummer + 1
for i in range(1,len(data)/2+1):
print leseVorname(data,i).decode('utf-8')
print leseFamilienname(data,i).decode('utf-8')
/*****************************************************\
| Die personenliste wurde zuvor bearbeitet, über ein |
| tag im html-head geladen und liegt nun als string |
| $liste aller namen, getrennt durch leerzeichen vor, |
| um sich hier aufs wesentliche konzentrieren zu |
| können. |
\*****************************************************/
// namensliste als array
list = list.split(' ');
let persons = [],
id = 1;
function Person(from) {
from = (from - 1) * 2 // index vs. nummer
this.id = id++;
this.readFirstName = function() { return list[from]; }
this.readLastName = function() { return list[from+1]; }
this.firstName = this.readFirstName();
this.lastName = this.readLastName();
};
function savePerson(from) {
let p = new Person(from);
persons.push(p);
}
for (let i = 1; i <= 5; i++) savePerson(i);
console.table(persons); // lissalanda@gmx.at
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
// NET 6.x | C# 10.x | VS-2022
try {
var db = new Database(@"C:\...\namensliste.txt");
db.AddPerson("Mustermann", "Max"); // füge hinzu Person (ID autom.)
db.RemovePerson(7); // lösche Person mit ID 7
Console.WriteLine(db.GetLastname()); // alle Nachnamen (sortiert)
Console.WriteLine(db.GetFirstname()); // alle Vornamen (sortiert)
Console.WriteLine(db.GetPerson()); // alle Personen (sortiert ID)
Console.WriteLine(db.GetLastname(6)); // Nachname mit ID 6
Console.WriteLine(db.GetFirstname(101)); // Vorname mit ID 101
Console.WriteLine(db.GetPerson(66)); // Person mit ID 66
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
class Database {
private readonly List<Person> _persons = new();
private int maxId = 0;
public Database(string path) {
Path = path;
if (!File.Exists(Path)) throw new Exception($"Path not found: {Path}");
ReadPersons();
}
private string Path { get; set; }
private void ReadPersons() {
var lst = File.ReadAllLines(Path).ToList();
for (int i = 0, k = 1; i < lst.Count - 1; i += 2, k += i % 2 == 0 ? 1 : 0, maxId = k - 1)
_persons.Add(new Person(k, lst[i + 1], lst[i]));
}
public void RemovePerson(int id) => _persons.RemoveAll(x => x.Id == id);
public void AddPerson(string lastName, string firstName) =>
_persons.Add(new Person(++maxId, lastName, firstName));
public string GetPerson(int id) => _persons?.Where(x => x.Id == id).ToList().FirstOrDefault().ToString() ?? "";
public string GetPerson() => string.Join("\n", _persons);
public string GetLastname(int id) => _persons?.Where(x => x.Id == id).Select(x => x.Lastname).ToList().FirstOrDefault() ?? "";
public string GetLastname() => string.Join("\n", _persons.Select(x => x.Lastname).OrderBy(x => x).ToList());
public string GetFirstname(int id) => _persons?.Where(x => x.Id == id).Select(x => x.Firstname).FirstOrDefault() ?? "";
public string GetFirstname() => string.Join("\n", _persons.Select(x => x.Firstname).OrderBy(x => x).ToList());
}
record struct Person(int Id, string Lastname, string Firstname);
Lösung von: Jens Kelm (@JKooP)
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 2 |
Schwierigkeit: | k.A. |
Webcode: | wc4q-st5h |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |