Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Schriftsetzer (Felder)

Ein Schriftsetzer musste bei einem Buch die Seitenzahlen mit Lettern drucken. Lettern sind spiegelverkehrte Schriftzeichen, die heute nur noch selten für den Buchdruck verwendet werden. Dafür musste unser Schriftsetzer wissen, wie viele solcher Lettern er für die Seitennummerierung benötigt. Seitennummerierungen bestehen ausschließlich aus den Ziffern 0 bis 9. In dieser Aufgabe werden Lettern und Ziffern synonym verwendet. Ab Seite 5 waren die Seiten nummeriert. Die Seite 10 benötigt als Erste zwei Ziffern (nämlich die Ziffer "1" und die Ziffer "0"). Die Lettern konnten für verschiedene Seiten nicht rezykliert werden, da alle Seiten gleichzeitig für den Druck bereitstehen mussten. Schreiben Sie ein Programm, das für eine gegebene Anzahl Seiten die benötigten Anzahlen für jede Ziffer ausgibt. Da die Nummerierung erst bei 5 beginnt, hatte ein Buch mit 4 Seiten noch keine Ziffern. Ein Buch mit 11 Seiten benötigte bereits die Ziffern 5 (1x), 6 (1x), 7 (1x), 8 (1x), 9 (1x), 1 (3x) und 0 (1x).

Zur Programmierung verwenden Sie ein Array von [0] bis [9] (also mit 10 Einträgen), worin je die Anzahl der benötigten Ziffern steht. Die Anwenderin kann die letzte Seitennummer beliebig wählen. Zählen Sie in einer Schleife ab 5 bis zur letzten Seitennummer die benötigten Ziffern zu den Arraywerten dazu und geben Sie am Ende alle zehn Werte aus.

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

6 Lösung(en)

def buchdruck(j):
    l=[]
    s=''
    for i in range(10):
        l.append(0)
    for i in range(5,j+1):
        s = str(i)
        for j in range(len(s)):
            l[int(s[j])]+=1
        
    return l

print buchdruck(11)
print buchdruck(110)
                
import java.util.Scanner;

public class Schriftsetzer {
  public static void main(String[] args) {
    new Schriftsetzer().top();}
 
  void top() {
    int   seiten;
    int[] lettern;
    seiten  = einlesen("Seitenzahl");
    lettern = berechneAnzahlen(seiten);
    ausgabe(lettern); }


  void ausgabe(int[] lettern) {
    System.out.println("Es werden folgende Lettern benötigt:");
    for(int ziffer = 0; ziffer <=9; ziffer ++) {
        System.out.println(ziffer + ": " + lettern[ziffer] + "-mal."); }
  }

  int[] berechneAnzahlen(int seiten) {
    int[] lettern = new int[10];
    for(int seite = 5; seite <= seiten; seite++) {
        addiereZiffern(lettern, seite); }
    return lettern; }

  void addiereZiffern(int[] lettern, int seite) {
    while(seite > 0) {
        int ziffer      = seite % 10;
        lettern[ziffer] = lettern[ziffer] + 1;
        seite           = seite / 10;  }
  }  
  int einlesen(String was) {
    System.out.println("Bitte " + was + " eingeben:");
    return (new Scanner(System.in)).nextInt(); }
 
} // end of class Schriftsetzer
                
import java.util.Scanner;


public class Schriftsetzer {

    
    public static void main(String[] args) {
        new Schriftsetzer().exeCute();
    }
    void exeCute() {
        int pages = getPages();
        if (pages < 5) {
            System.out.println("zu wenig Seiten für eine Seitenanzeige");
            System.exit(0);
        }
        int[] counterArray = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        countLetters(counterArray, pages);
        for (int i = 0; i < counterArray.length; i++) {
            System.out.println("Die Ziffer " + i + " wird " + counterArray[i] + " mal verwendet");
        }
    }
    int getPages() {
        Scanner sc = new Scanner(System.in);
        System.out.println("Geben Sie die Anzahl Seiten ein: ");
        return sc.nextInt();
    }
    int[] countLetters(int[] count, int pages) {
        if (pages < 10) {
            for (int i = 5; i < count.length; i++) {
                count[i] = count[i] + 1;
                return count;
            }
        }
        for (int i = 5; i < 10; i ++) {
            count[i] = count[i] + 1;
        }
        for (int i = 10; i <= pages; i++) {
            for (int j = 0; j < count.length; j++) {
                count[j] = count[j] + checkContainment(i, j);
            }
        }
        return count;
    }
    int checkContainment(int number, int index) {
        String intString   = "" + number;
        String indexString = "" + index ;
        int tmp = intString.length() - intString.replace(indexString, "").length();
        return tmp;
    }
}
                

Lösung von: Name nicht veröffentlicht

function getLetters(num) {
  let txt = '',
      letters = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], i;
  for (i = 5; i <= num; i++) txt += i;
  for (i = 0; i < txt.length; i++) letters[parseInt(txt[i])]++;
  return letters;
}

console.table(getLetters(prompt('Anzahl der Seiten: ')));    // lissalanda@gmx.at
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

// NET 6.x | C# 10.x | VS-2022

// Variante 1 (kurz und kompakt, aber ineffizient, da int in string konvertiert werden muss)
var firstPage = 5;
var lastPage = 250;
string.Join("", Enumerable.Range(firstPage, lastPage - firstPage + 1).Select(x => x.ToString()))
    .ToCharArray().GroupBy(x => x).Select(x => (letter: x.Key, count: x.Count()))
    .OrderBy(x => x.letter).ToList()
    .ForEach(x => Console.WriteLine(x));

// Variante 2 (schnell, da keinerlei Konvertierung stattfindet)
static int[] LettersCount(int firstPage, int lastPage)
{
    var arr = new int[10];
    for (int i = firstPage; i <= lastPage; i++)
    {
        var num = i;
        while (num > 0)
        {
            arr[num % 10]++;
            num /= 10;
        }
    }
    return arr;
}

var r = LettersCount(5, 250);
for (int i = 0; i < r.Length; i++)
{
    Console.WriteLine($"({i}, {r[i]})");
}
                

Lösung von: Jens Kelm (@JKooP)

// C++ 14 | VS-2022
#include <iostream>
#include <vector>

constexpr size_t START_PAGE{ 5 }, VEC_MAX{ 10 };

class Pages { 
	size_t first_, last_;
public:
	Pages(): first_{ START_PAGE }, last_{ START_PAGE } {}
	Pages(size_t last) : first_{ START_PAGE }, last_{ last } {}
	Pages(size_t first, size_t last): first_{first}, last_{last} {}
	const auto get_first() const { return first_; }
	const auto get_last() const { return last_; }
	const auto set_first(const size_t& first) { first_ = first; };
	const auto set_last(const size_t& last) { last_ = last; };
};

inline const auto digits_count(const Pages& page) noexcept {
    std::vector<size_t>v(VEC_MAX);
	for (size_t i{ std::max(page.get_first(), START_PAGE)}; i <= page.get_last(); ++i) {
		auto num{ i };
		while (num) {
			v[num % 10]++;
			num /= 10;
		}
	}
	return v;
}

inline const std::ostream& operator<<(std::ostream& os, const Pages& page) noexcept {
	os << "\nvon " << page.get_first() << " bis " << page.get_last() << ":\n";
	const auto digits{ digits_count(page) };
	for (size_t i{ 0 }; i < VEC_MAX; ++i)
		os << "  " << i << ": " << digits[i] << "\n";
	return os;
}

inline const std::ostream& print(std::ostream& os, const std::vector<Pages>& pages) noexcept {
	for (const auto& p : pages) std::cout << p;
	return os;
}

int main() {
	std::vector<Pages>pages{ Pages(), Pages(250), Pages(0, 250), Pages(5, 250) };
	pages[0].set_last(250);
	print(std::cout, pages);
}
                

Lösung von: Jens Kelm (@JKooP)

Verifikation/Checksumme:

Für ein Buch mit 250 Seiten werden folgende Lettern benötigt:
0: 45-mal.
1: 154-mal.
2: 105-mal.
3: 54-mal.
4: 54-mal.
5: 46-mal.
6: 45-mal.
7: 45-mal.
8: 45-mal.
9: 45-mal.

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: k.A.
Webcode: p8vk-9x7k
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen