Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

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

Bitte melde dich an um einen Kommentar abzugeben

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

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: Mittel
Webcode: rqte-f27b
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen