Liste von Suchresultaten (Unterprogramme)
Ein Suchresultat einer Anfrage in eine Datenbank kann sehr viele Resultate liefern (z. B. trefferTotal=423). Pro Seite (Liste in der Webseite) sollen lediglich wenige Suchresultate (Treffer) aufs Mal angezeigt werden (z. B. trefferProSeite=15). Schreiben Sie Funktionen, um die folgenden Problemchen zu lösen. Verwenden Sie dazu unter anderem auch den Modulo-Operator (% in Java, C und anderen Sprachen; MOD() in Pascal, Modula und anderen Sprachen):
- seitenTotal(int trefferTotal, int trefferProSeite) liefert die Anzahl Seiten, die darzustellen sind.
- startElementAufSeite(int trefferTotal, int trefferProSeite, int aktSeitenNummer) liefert die erste Treffernummer, die auf der aktuellen Seite (aktSeitenNummer) dargestellt werden sollte. Auf Seite 1 (1 = aktSeitenNummer) wird natülich 1 zurückgegeben.
- endElementAufSeite(int trefferTotal, int trefferProSeite, int aktSeitenNummer) liefert die letzte Treffernummer, die auf der aktuellen Seite dargestellt werden sollte. Beachten Sie insbesondere die letzte Seite, die dargestellt wird. Diese hat im Allgemeinen weniger Einträge als in der Variable angegeben sind.
- seitenNummer(int trefferTotal, int trefferProSeite, int aktSuchResultatNummer) liefert die Seitennummer, auf der der Treffer aktSuchresultatNummer dargestellt werden sollte.
0 Kommentare
7 Lösung(en)
import math
class Suchresultat:
def __init__(self, trefferTotal, trefferProSeite, aktSeitenNummer, aktuellGesucht):
self.trefferTotal = trefferTotal
self.trefferProSeite = trefferProSeite
self.aktSeitenNummer = aktSeitenNummer
self.aktuellGesucht = aktuellGesucht
self.trefferliste = []
def generiereListe(self):
for i in range(self.trefferTotal):
self.trefferliste.append(i)
print(self.trefferliste)
def startElementAufSeite(self):
print("Erstes Element der Trefferliste: ", self.trefferliste[0])
def anzahlSeiten(self):
print("Anzahl der Seiten bei", self.trefferProSeite, "Treffer pro Seite ist",
math.ceil(self.trefferTotal/self.trefferProSeite))
def aktuelleSeite(self):
zeichen_letzte_seite = (self.trefferTotal-(self.trefferTotal-(self.trefferTotal%self.trefferProSeite)))
print("Anzahl der Zeichen auf letzer Seite: ", zeichen_letzte_seite)
def zeichenAktuelleSeite(self):
letztes_zeichen = self.aktSeitenNummer*self.trefferProSeite
try:
print("Letztes Zeichen auf aktueller Seiste ist ", self.trefferliste[letztes_zeichen])
except:
print("Das letzte Zeichen der letzten Seite ist: ", self.trefferliste[len(self.trefferliste)-1])
def aktSuchresultat(self):
stelle_in_liste = self.trefferliste.index(self.aktuellGesucht)
print("Das gesuchte Zeichen (", self.aktuellGesucht, ") ist an Stelle ", stelle_in_liste+1, "in der Suchliste")
seitennummer_index = self.trefferTotal/stelle_in_liste
print("Der gesuchte Eintrag (", self.aktuellGesucht, ") ist auf Seite: ", math.floor(seitennummer_index))
suche = Suchresultat(10,6,5,8)#trefferTotal,trefferProSeite, aktSeitenNummer, aktuellGesucht
suche.generiereListe()
suche.startElementAufSeite()
suche.anzahlSeiten()
suche.aktuelleSeite()
suche.zeichenAktuelleSeite()
suche.aktSuchresultat()
Lösung von: Py Thon ()
package ch.programmieraufgaben.methoden;
//See https://github.com/pheek/javaInput/blob/master/Input.java
import static eu.gressly.io.utility.Input.*;
/**
* Programmieraufgaben.ch : Web-Code: rqte-f27b
* @version 0.1 (Feb 18, 2015)
* @author Philipp Gressly Freimann
* (philipp.gressly@santis.ch)
*/
public class ListeVonSuchresultaten {
public static void main(String[] args) {
new ListeVonSuchresultaten().top();
}
void top() {
int trefferTotal = inputInt("Bitte totale Anzahl der Treffer (trefferTotal ) eingeben: ");
int trefferProSeite = inputInt("Bitte max. Anzahl Treffer pro Seite (trefferProSeite) eingeben: ");
int aktSeitenNummer = inputInt("Bitte die aktuelle Seitennummer (aktSeitenNummer) eingeben: ");
int aktSuchResultatNummer = inputInt("Bitte die Nummer eines Suchresultats (aktSuchResultatNummer) eingeben: ");
int seitenTotal = seitenTotal(trefferTotal, trefferProSeite);
int startElementAufSeite = startElementAufSeite(trefferTotal, trefferProSeite, aktSeitenNummer);
int endElementAufSeite = endElementAufSeite(trefferTotal, trefferProSeite, aktSeitenNummer);
int seitenNummer = seitenNummer(trefferTotal, trefferProSeite, aktSuchResultatNummer);
System.out.println("Es hat total " + seitenTotal + " Seiten mit Suchresultaten.");
System.out.println("Auf Seite " + aktSeitenNummer + " ist " + startElementAufSeite + " das erste Suchresultat.");
System.out.println("Auf Seite " + aktSeitenNummer + " ist " + endElementAufSeite + " das letzte Suchresultat.");
System.out.println("Das Suchresultat mit Nummer "+ aktSuchResultatNummer + " steht auf Seite " + seitenNummer + ".");
}
int seitenTotal(int trefferTotal, int trefferProSeite) {
if(0 >= trefferTotal) {
return 0;
}
return (trefferTotal - 1) / trefferProSeite + 1;
}
//Invariant von der totalen Anzahl Treffer (trefferTotal)
int startElementAufSeite(int trefferTotal, int trefferProSeite, int aktSeitenNummer) {
return 1 + trefferProSeite * (aktSeitenNummer - 1);
}
int endElementAufSeite(int trefferTotal, int trefferProSeite, int aktSeitenNummer) {
if(aktSeitenNummer >= ( (trefferTotal - 1) / trefferProSeite ) * trefferProSeite / trefferProSeite + 1) {
return trefferTotal;
}
return aktSeitenNummer * trefferProSeite;
}
// invariant von der totalen Anzahl der Treffer
int seitenNummer(int trefferTotal, int trefferProSeite, int aktSuchResultatNummer) {
if(0 >= aktSuchResultatNummer) {
return 0;
}
return (aktSuchResultatNummer - 1) / trefferProSeite + 1;
}
} // end of class ListeVonSuchresultaten
Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int seitenTotal(int trefferTotal, int trefferProSeite);
int startElementAufSeite(int trefferTotal, int trefferProSeite, int aktSeitenNummer);
int endElementAufSeite(int trefferTotal, int trefferProSeite, int aktSeitenNummer);
int seitenNummer(int trefferTotal, int trefferProSeite, int aktSuchResultatNummer);
int main() {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
int trefferTotal,trefferProSeite,aktSeitenNummer,aktSuchResultatNummer;
cout << "Treffer Total: " << endl;
cin >> trefferTotal;
cout << "Treffer pro Seite: " << endl;
cin >> trefferProSeite;
cout << "Aktuelle Seiten Nummer: " << endl;
cin >> aktSeitenNummer;
cout << "Gesuchtes Resultat mit Nummer: " << endl;
cin >> aktSuchResultatNummer;
cout << "Anzahl Seiten: " << seitenTotal(trefferTotal, trefferProSeite)<< endl;
cout << "1. Element der " << aktSeitenNummer << ". Seite : ";
if(startElementAufSeite(trefferTotal, trefferProSeite, aktSeitenNummer)==0)
cout << "Seite existiert nicht"<< endl;
else
cout << startElementAufSeite(trefferTotal, trefferProSeite, aktSeitenNummer) << endl;
cout << "letztes Element der " << aktSeitenNummer << ". Seite : " ;
if(endElementAufSeite(trefferTotal, trefferProSeite, aktSeitenNummer)==0)
cout << "Seite existiert nicht!"<< endl;
else
cout << endElementAufSeite(trefferTotal, trefferProSeite, aktSeitenNummer) << endl;
if (seitenNummer(trefferTotal, trefferProSeite, aktSuchResultatNummer)==0)
cout << "Resutat mit der Nummer " << aktSuchResultatNummer << " existiert nicht!" << endl;
else
cout << "Das Resultat Nr. " << aktSuchResultatNummer << " ist auf der " << seitenNummer(trefferTotal, trefferProSeite, aktSuchResultatNummer)<< ". Seite."<< endl;
system("pause");
return 0;
}
int seitenTotal(int trefferTotal, int trefferProSeite){
if (trefferTotal%trefferProSeite>0)
return trefferTotal/trefferProSeite+1;
else
return trefferTotal/trefferProSeite;
}
int startElementAufSeite(int trefferTotal, int trefferProSeite, int aktSeitenNummer){
int anzSeiten;
if (trefferTotal%trefferProSeite>0)
anzSeiten= trefferTotal/trefferProSeite+1;
else
anzSeiten= trefferTotal/trefferProSeite;
if(aktSeitenNummer>anzSeiten){
return 0;
}
else
return 1+(aktSeitenNummer-1)*trefferProSeite;
}
int endElementAufSeite(int trefferTotal, int trefferProSeite, int aktSeitenNummer){
int anzSeiten;
if (trefferTotal%trefferProSeite>0)
anzSeiten= trefferTotal/trefferProSeite+1;
else
anzSeiten= trefferTotal/trefferProSeite;
if (anzSeiten<aktSeitenNummer)
return 0;
else {
if (anzSeiten==aktSeitenNummer)
return trefferTotal;
else
return aktSeitenNummer*trefferProSeite;
}
}
int seitenNummer(int trefferTotal, int trefferProSeite, int aktSuchResultatNummer){
if (aktSuchResultatNummer>trefferTotal)
return 0;
else{
if (aktSuchResultatNummer%trefferProSeite>0)
return aktSuchResultatNummer/trefferProSeite+1;
else
return aktSuchResultatNummer/trefferProSeite;
}
}
Lösung von: Christian Volz ()
// teilweise bei "Philipp Gressly Freimann (SANTIS Training AG)" abgeschaut(hatte einen Fehler)
// siehe selbes Beispiel, Lösung JAVA
var trefferTotal = prompt("Bitte die totale Anzahl an Treffern eingeben:");
var trefferProSeite = prompt("Bitte die Treffer pro Seite eingeben:");
var aktSeitenNummer = prompt("Bitte die Aktuelle Seitennummer eingeben:");
var aktSuchResultatNummer = prompt("Bitte die Nummer des gesuchten Suchresultats eingeben:");
function seitenTotal(trefferTotal, trefferProSeite) {
if (0 === trefferTotal) {
return 0;
}
return Math.floor((trefferTotal - 1) / trefferProSeite + 1);
}
function startElementAufSeite(trefferTotal, trefferProSeite, aktSeitenNummer) {
return trefferProSeite * (aktSeitenNummer - 1) + 1;
}
function endElementAufSeite(trefferTotal, trefferProSeite, aktSeitenNummer) {
if (aktSeitenNummer >= ((trefferTotal - 1) / trefferProSeite) * trefferProSeite / trefferProSeite + 1) {
return trefferTotal;
}
return aktSeitenNummer * trefferProSeite;
}
function seitenNummer(trefferTotal, trefferProSeite, aktSuchResultatNummer) {
if (0 === aktSuchResultatNummer) {
return 0;
}
return Math.floor((aktSuchResultatNummer - 1) / trefferProSeite + 1);
}
document.write(
"Zur Darstellung von " + trefferTotal + " Suchergebnissen mit "
+ trefferProSeite + " Treffern pro Seite werden "
+ seitenTotal(trefferTotal, trefferProSeite) + " Seiten benötigt.<br/>"
+ "Auf der " + aktSeitenNummer + "ten Seite ist hat das erste Element die Nummer " +
startElementAufSeite(trefferTotal, trefferProSeite, aktSeitenNummer) + ",<br/>" +
"das Letzte die Nummer " + endElementAufSeite(trefferTotal, trefferProSeite, aktSeitenNummer)
+ "<br/>" + " Das Suchergebnis Nummer " + aktSuchResultatNummer
+ " ist auf der Seite " +
seitenNummer(trefferTotal, trefferProSeite, aktSuchResultatNummer) + "."
);
Lösung von: Thomas Sallaberger (JKU Linz)
document.write(`
<p><input type="number" value="11" onchange="calc()" id="total"> Sumo del’ trovoj</p>
<p><input type="number" value="4" onchange="calc()" id="pagesize"> Trovoj po pa?o</p>
<p><input type="number" value="3" onchange="calc()" id="pagenum"> Celpa?o</p>
<p><input type="number" value="6" onchange="calc()" id="hit"> Celtrovo</p>
<div id="output"></div>
`);
function calc() {
let pageNum = document.getElementById('pagenum').value,
hit = document.getElementById('hit').value,
output = document.getElementById('output'),
pages = [], tmp = [], i = 1, h;
for (i; i <= document.getElementById('total').value; i++) {
tmp.push(i);
if (i == hit) h = pages.length+1;
if (tmp.length == document.getElementById('pagesize').value) {
pages.push(tmp); tmp = [];
}
}
if (tmp.length != 0) pages.push(tmp);
output.innerHTML = (`
<p>Sume estas <b>${pages.length}</b> trovpa?oj.</p>
<p>Pa?o n<sup>o</sup> ${pageNum} enhavas la trovojn: <b>${pages[pageNum-1].join(', ')}</b>.</p>
<p>Trovo ${hit} estas en pa?o n<sup>o</sup> <b>${h}</b>.</p>
`);
}
document.addEventListener('load', calc());
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
// NET 6.x | C# 10.x | VS-2022
var sr = new Suchresultate(11, 4, 3, 6);
Console.WriteLine(sr);
class Suchresultate {
public Suchresultate(int trefferTotal, int trefferProSeite, int aktuelleSeitennummer, int aktSuchresultatNummer) {
TrefferTotal = trefferTotal;
TrefferProSeite = trefferProSeite;
AktuelleSeitennummer = aktuelleSeitennummer;
AktSuchresultatNummer = aktSuchresultatNummer;
}
private int TrefferTotal { get; set; }
private int TrefferProSeite { get; set; }
private int AktuelleSeitennummer { get; set; }
private int AktSuchresultatNummer { get; set; }
public int SeitenTotal => TrefferTotal <= 0 ? 0 : (TrefferTotal - 1) / TrefferProSeite + 1;
public int StartElementAufSeite => 1 + TrefferProSeite * (AktuelleSeitennummer - 1);
public int EndElementAufSeite =>
AktuelleSeitennummer >= ((TrefferTotal - 1) / TrefferProSeite) * TrefferProSeite / (TrefferProSeite + 1) ?
TrefferTotal : AktuelleSeitennummer * TrefferProSeite;
public int Seitennummer => AktSuchresultatNummer <= 0 ? 0 : (AktSuchresultatNummer - 1) / TrefferProSeite + 1;
public override string ToString() => $"Es gibt total {SeitenTotal} Seiten mit Suchresultaten.\n" +
$"Auf Seite {AktuelleSeitennummer} ist {StartElementAufSeite} das erste Suchresultat.\n" +
$"Auf Seite {AktuelleSeitennummer} ist {EndElementAufSeite} das letzte Suchresultat.\n" +
$"Das Suchresultat mit Nummer {AktSuchresultatNummer} befindet sich auf Seite {Seitennummer}.\n";
}
Lösung von: Jens Kelm (@JKooP)
// C++ 17
#include <iostream>
class Suchresultate {
int treffer_total_{};
int treffer_pro_seite_{};
int aktuelle_seitennummer_{};
int akt_suchresultat_nummer_{};
public:
Suchresultate(int treffer_total, int treffer_pro_seite, int aktuelle_seitennumer, int akt_suchresultat_nummer) :
treffer_total_{ treffer_total }, treffer_pro_seite_{ treffer_pro_seite },
aktuelle_seitennummer_{ aktuelle_seitennumer }, akt_suchresultat_nummer_{ akt_suchresultat_nummer } {}
int get_treffer_total();
int get_treffer_pro_seite();
int get_aktuelle_seitennummer();
int get_akt_suchresultat_nummer();
int get_seiten_total();
int get_start_element_auf_seite();
int get_end_element_auf_seite();
int get_seitennummer();
friend std::ostream& operator<<(std::ostream&, const Suchresultate&);
};
int Suchresultate::get_treffer_total() {
return treffer_total_;
}
int Suchresultate::get_treffer_pro_seite() {
return treffer_pro_seite_;
}
int Suchresultate::get_aktuelle_seitennummer() {
return aktuelle_seitennummer_;
}
int Suchresultate::get_akt_suchresultat_nummer() {
return akt_suchresultat_nummer_;
}
int Suchresultate::get_seiten_total() {
return treffer_total_ <= 0 ? 0 : (treffer_total_ - 1) / treffer_pro_seite_ + 1;
}
int Suchresultate::get_start_element_auf_seite() {
return 1 + treffer_pro_seite_ * (aktuelle_seitennummer_ - 1);
}
int Suchresultate::get_end_element_auf_seite() {
return aktuelle_seitennummer_ >= ((treffer_total_ - 1) / treffer_pro_seite_) * treffer_pro_seite_ / (treffer_pro_seite_ + 1) ?
treffer_total_ : aktuelle_seitennummer_ * treffer_pro_seite_;
}
int Suchresultate::get_seitennummer() {
return akt_suchresultat_nummer_ <= 0 ? 0 : (akt_suchresultat_nummer_ - 1) / treffer_pro_seite_ + 1;
}
std::ostream& operator<<(std::ostream& os, Suchresultate& sr) {
os << "Es gibt total " << sr.get_seiten_total() << " Seiten mit Suchresulataten.\n";
os << "Auf Seite " << sr.get_aktuelle_seitennummer() << " ist " << sr.get_start_element_auf_seite() << " das erste Suchresultat.\n";
os << "Auf Seite " << sr.get_aktuelle_seitennummer() << " ist " << sr.get_end_element_auf_seite() << " das letzte Suchresultat.\n";
os << "Das Suchresultat mit Nummer " << sr.get_akt_suchresultat_nummer() << " befindet sich auf Seite " << sr.get_seitennummer() << ".\n";
return os;
}
int main() {
auto sr{ Suchresultate(11, 4, 3, 6) };
std::cout << sr << std::endl;
}
Lösung von: Jens Kelm (@JKooP)
Verifikation/Checksumme:
Bitte totale Anzahl der Treffer (trefferTotal ) eingeben: 11
Bitte max. Anzahl Treffer pro Seite (trefferProSeite) eingeben: 4
Bitte die aktuelle Seitennummer (aktSeitenNummer) eingeben: 3
Bitte die Nummer eines Suchresultats (aktSuchResultatNummer) eingeben: 6
Es hat total 3 Seiten mit Suchresultaten.
Auf Seite 3 ist 9 das erste Suchresultat.
Auf Seite 3 ist 11 das letzte Suchresultat.
Das Suchresultat mit Nummer 6 steht auf Seite 2.
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 1 |
Schwierigkeit: | Mittel |
Webcode: | rqte-f27b |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |