Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Anna lernt lesen (Schleifen)

Anna lernt lesen. Um sie dabei zu unterstützen, darf sie bei der Gute-Nacht-Geschichte mitlesen. Jeden Abend wird eine weitere Geschichte aus dem schier unendlich dicken Kinderbuch verwendet. Um Anna nicht zu überfordern liest sie anfänglich nicht alles selbst. Zusammen mit ihrem Vater hat sie folgende Methode entwickelt.

Am ersten Abend liest Anna das erste Wort der ersten Geschichte. Der Vater liest den Rest vor. An den darauf folgenden zwei Tagen darf Anna jeweils zwei Wörter der beiden nächsten Geschichten selbst lesen. An weiteren drei Tagen liest sie bereits je drei Wörter der Geschichte selbst.

An welchem Tag darf sie das erste Mal fünf Wörter lesen?
Wie viele Wörter darf Anna in der 23. Geschichte selbst lesen?

Schreiben Sie ein Programm, das obige beiden Fragen für beliebige Zahlen selbst löst:

a) In welcher Geschichte (also an welchem Tag) darf sie zum ersten Mal n Wörter lesen?

b) Wie viele Wörter darf Anna in der m-ten Geschichte (also am m-ten Tag) schon selbst lesen?

2 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (2)

BKluszynski 8. März 2012 16:38   reply report
hY @ALL ich hab mal eine Lösung mit Schleifen, in ABAP reingestellt, da es hier kein ABAP zur Auswahl gab hab ich "generic" angeklickt :-(...
gressly 4. Februar 2012 19:32   reply report
Es handelt sich hierbei technisch um fast dieselbe Aufgabe wie "5. 14 Zahlenmuster" aus dem Buch.
Hier jedoch schön in eine Geschichte verpackt.

16 Lösung(en)

#!/usr/bin/ruby
# -*- coding: utf-8 -*-

# @autor Philipp Gressly Freimann
# 4. Feb. 2012
#
# Aufgabe http://www.programmieraufgaben.ch / http://www.programmieren-lernen.ch
# Anna Lernt lesen (web code: oukh-6gbt)
# Bem.: Diese Lösung kommt ohne Schleifen aus, ist aber nicht so einfach zu verstehen.
#Wer schreibt eine Lösung vermittelst Schleife?

$str_woerter    = "Geschichte aus Wörtern rechnen. Gib Anzahl Wörter ein: "
$str_geschichte = "Wörter aus Geschichte. Gib Nr. der Geschichte ein: "

def hauptprogramm() 
  woerter    = einlesen($str_woerter)
  geschichte = berechneGeschichteAusWoertern(woerter)
  print "Bei der #{geschichte}. Geschichte darf Anna "
  print "zum ersten mal #{woerter} " +
        (woerter != 1 ? "Wörter":"Wort") + " lesen.\n"
  print "\n"

  geschichte = einlesen($str_geschichte)
  woerter    = berechneWoerterAusGeschichte(geschichte)
  print "Bei der #{geschichte}. Geschichte darf Anna "
  print "#{woerter} " + 
        (woerter != 1 ? "Wörter":"Wort") +" selbst lesen.\n"
end

def einlesen(frage)
  print frage
  return STDIN.gets.to_i
end

def berechneGeschichteAusWoertern(woerter)
   return (woerter * (woerter-1)) / 2 + 1
end

def berechneWoerterAusGeschichte(geschichte)
   return ((Math.sqrt(1 + 8*(geschichte-1)) + 1) / 2.0).to_i;
end

## MAIN ##

hauptprogramm()

##### END  #####
                

Lösung von: Philipp Gressly Freimann (SANTIS Training AG)

*&---------------------------------------------------------------------*
*& Report  ZT_ANNA_LERNT_LESEN
*&
*& Programmer: Benjamin Kluszynski
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*

REPORT  ZT_ANNA_LERNT_LESEN.


PARAMETERS: g_inDays TYPE i, "amount of Days, given by the user
            g_inWord TYPE i. "amount of Words, given by the user

DATA:       g_readWords TYPE i,
            g_curWords TYPE i,
            g_loopDays TYPE i,
            g_days TYPE i.


IF NOT g_inDays IS INITIAL. "If amount of words Wörtern after <g_inDays> days is requested

g_days = 1.
g_curWords = 1.
g_loopDays = 1.

WHILE g_days LE g_inDays.

  WHILE g_loopDays LE g_curWords AND g_days LE g_inDays.

    g_readWords = g_readWords + g_curWords.
    ADD 1 to g_days.
    ADD 1 to g_loopDays.

  ENDWHILE.

    g_loopDays = 1.
    ADD 1 to g_curWords .

ENDWHILE.

WRITE: / 'In', g_inDays, 'days. Anna will read ', g_readWords, 'words.'.

ELSE.   " if amount of needed days for <g_inWord> words is requested

g_days = 0.
g_curWords = 1.
g_loopDays = 1.
g_readWords = 0.

WHILE g_readWords LT g_inWord.

  WHILE g_loopDays LE g_CurWords AND g_readWords LT g_inWord.

    g_readWords = g_readWords + g_curWords.
    ADD 1 to g_days.
    ADD 1 to g_loopDays.

  ENDWHILE.

  ADD 1 to g_curWords.
  g_loopDays = 1.

ENDWHILE.

WRITE: / 'Anna will read', g_readWords, 'Words in', g_Days, 'days.'.

ENDIF.
                

Lösung von: Benjamin Kluszynski (( Coder :-) ))

"""Python 2.7"""

def gesch(n):    
    seite = 0
    for tag in range(1,n+1):
        seite+=tag
        print "Am", tag, ". Tag darf das Maedchen von der",seite-tag+1, ". Seite bis zur", seite, ". Seite lesen"
        

gesch(8)

                

Lösung von: Py Thon ()

#!/usr/bin/env python2.7
# -*- Coding: utf-8 -*-
### Lisa lernt lesen ###

schalter = raw_input('(t)age oder (w)orte? ')

if schalter == 'w':
    suche = raw_input('Wieviele Worte? ') 
    tage = 0
    for i in range(1,int(suche)):
        tage = tage + i
    tage = tage + 1
    print 'Ab dem ' + str(tage) + '. Tag liest Lisa ' + suche + ' Worte.'

elif schalter == 't':
    suche = raw_input('Welcher Tag? ')
    tage,i = 0,0
    while tage < int(suche):
        i += 1
        tage = tage + i

    if tage == suche:
        print 'Am ' + suche + '. Tag liest Lisa ' + str(i) + ' Worte.'
    else:
        print 'Am ' + suche + '. Tag liest Lisa ' + str(i) + ' Worte.'

else:
    print 'Bitte "t" oder "w" eingeben!'
                

Lösung von: Name nicht veröffentlicht

// Autor:				Andy Großhennig
// Solution for task:	Anna lernt lesen (Schleifen)

#include <iostream>

using namespace std;

// Function: Get the limits for amount of words and storys
void getData(int &iWords_Limit, int &iDays_Storys_Limit)
{
	cout << "Geben sie die Anzahl der Woerter an: ";
	cin >> iWords_Limit;
	cout << "\nGeben sie die Anzahl der Geschichten/Tage ein: ";
	cin >> iDays_Storys_Limit;
	cout << endl;
}

// Function: Simulate the periods (Day 1, Day 2-3, Day 4-6, ...), not the individual days
void calculate()
{
	int iWords = 1;
	int iWords_Limit = 5;
	int iDays_Storys = 1;
	int iDays_Storys_Limit = 23;
	int iMultiplier = 1;

	getData(iWords_Limit, iDays_Storys_Limit);

	// Loop: Count the days until its reached the limit of words and show the passed days
	while(iWords < iWords_Limit)
	{	
		iMultiplier++;
		iDays_Storys += iMultiplier;
		iWords++;
	}
	//Correct the showing last day to the first day of period
	cout << "Am " << (iDays_Storys - (iMultiplier - 1)) << ". Tag darf Anna " << iWords << " Woerter lesen." << endl;

	// Block: Reset the counted values
	{
		iWords = 1;
		iDays_Storys = 1;
		iMultiplier = 1;
	}

	// Loop: Count the words until its reached the limit of days and show the amount of words
	while(iDays_Storys < iDays_Storys_Limit)
	{
		iMultiplier++;
		iDays_Storys += iMultiplier;
		iWords++;
	}
	cout << "In der " << iDays_Storys_Limit << ". Geschichte darf Anna " << iWords << " Woerter lesen." << endl; 
}

int main()
{
	calculate();

	cout << "\n\n";
	system("Pause");
	return 0;
}
                

Lösung von: Andy Großhennig (Bundeswehr)

package annalearnsreading;

public class AnnaLearnsReading {

    static private int WORDS = 5; //Input: words, Output: days
    static private int DAYS = 23; //Input: days, Output: words

    public static void main(String[] args) {
        calcWithWords();
        calcWithDays();
    }

    private static void calcWithWords() {
        int day = 1;
        
        for (int i = 1; i < WORDS; i++){
            day += i;
        }
        System.out.println("Anna can read " + WORDS + " words at day " + day);
            
    }

    private static void calcWithDays() {
        int day = DAYS;
        int count = 1;
        
        while (day > 0){
            day-=count;
            count++;
        }
        System.out.println("Anna can read " + (count-1) + " words at day " + DAYS);
    }
}

                

Lösung von: Benedikt Starzengruber (HTL Leonding)

#!usr/bin/env python
# -*- coding: utf-8 -*-

# 2014 witti 
# http://www.programmieraufgaben.ch/aufgabe/anna-lernt-lesen/oukh6gbt

def geschichten(nwoert):
	tage = 1
	for i in range(1, nwoert):
		tage = tage + i
	return tage

def woerter(ntag):
	tage = 1
	woerter = 1
	while tage < ntag:
		woerter = woerter + 1
		tage = tage + woerter
	return woerter

print("1	Wann darf sie n Wörter lesen?")
print("2	Wie viele Wörter darf sie in der n-ten Geschichte lesen?")

menu = str(input("? "))
n = int(input("n? "))

if menu == "1":
	print("Am", geschichten(n), "Tag darf sie ", n, "Wörter lesen.")
elif menu == "2":
	print("Am", n, "Tag darf sie", woerter(n), "Wörter lesen.")
                

Lösung von: witti yoo (qwertz)

import java.util.Scanner;


/**
 * @version 0.1 (Feb 26, 2015)
 * @author Philipp Gressly Freimann 
 *         (philipp.gressly@santis.ch)
 */
public class AnnaLerntLesen {

	public static void main(String[] args) {
		new AnnaLerntLesen().top();
	}

	void top() {
		int wahl = menu(); // 1: wörter rechnen 2: tag rechnen
		if(1 == wahl) {
			woerterRechnen();
		} else {
			tagRechnen(); // TODO implementiere tagRechnen
		}
		sc.close();
	}

	 void woerterRechnen() {
		System.out.println("Bitte Tag (Geschichte) Nummer eingeben: ");
		int tag = sc.nextInt();
		int woerter = woerterBerechnen(tag);
		if(1 == woerter) {
			System.out.println("Am ersten Tag kann Anna ein Wort selbst lesen." );
		} else {
			System.out.println("Am Tag " + tag +
					" kann Anna " + woerter + " Wörter selbst lesen." );
		}
	}

	void tagRechnen() {
		System.out.println("Bitte Anzahl Wörter eingeben: ");
		int woerter = sc.nextInt();
		int tag     = tagBerechnen(woerter);
		if(1 == woerter) {
			System.out.println("Am ersten Tag kann Anna ein Wort selbst lesen." );
		} else {
			System.out.println("Am Tag " + tag +
					" kann Anna zum ersten Mal " + woerter + " Wörter selbst lesen." );
		}
	}

	int tagBerechnen(int eingegebeneAnzahlWoerter) {
			int tag     = 1;
			int woerter = 1;
			int mal     = 1; // zum sovielten Mal darf Anna gleich
			                 // viele Wörter lesen
			while(woerter != eingegebeneAnzahlWoerter) { // solange nicht erreicht
				tag = tag + 1;
				if(mal == woerter) {
					mal     = 1          ;
					woerter = woerter + 1;
				} else {
					mal     = mal + 1    ;
				}
			} // end while
			return tag;
		}

	int woerterBerechnen(int eingegebenerTag) {
		int tag     = 1;
		int woerter = 1;
		int mal     = 1; // zum sovielten Mal darf Anna gleich
		                 // viele Wörter lesen
		while(tag != eingegebenerTag) { // solange nicht erreicht
			tag = tag + 1;
			if(mal == woerter) {
				mal     = 1          ;
				woerter = woerter + 1;
			} else {
				mal     = mal + 1    ;
			}
		} // end while
		return woerter;
	}

	Scanner sc = new Scanner(System.in);
	 int menu() {
		System.out.println("Wörter aus Tag berechnen  [1]");
		System.out.println("Tag aus Wörtern berechnen [2]");
		int wahl = sc.nextInt();
		return wahl;
	}

} // end of class AnnaLerntLesen
                

Lösung von: Philipp Gressly Freimann (SANTIS Training AG)

import java.util.Scanner;


/**
 * @version 0.1 (Feb 26, 2015)
 * @author Philipp Gressly Freimann 
 *         (philipp.gressly@santis.ch)
 */
public class AnnaLerntLesen2 {

	public static void main(String[] args) {
		new AnnaLerntLesen2().top();
	}

	void top() {
		int wahl = menu(); // 1: wörter rechnen 2: tag rechnen
		if(1 == wahl) {
			woerterRechnen();
		} else {
			tagRechnen();
		}
		sc.close();
	}

	 void woerterRechnen() {
		System.out.println("Bitte Tag (Geschichte) Nummer eingeben: ");
		int tag = sc.nextInt();
		int woerter = woerterBerechnen(tag);
		if(1 == woerter) {
			System.out.println("Am ersten Tag kann Anna ein Wort selbst lesen." );
		} else {
			System.out.println("Am Tag " + tag +
					" kann Anna " + woerter + " Wörter selbst lesen." );
		}
	}

	void tagRechnen() {
		System.out.println("Bitte Anzahl Wörter eingeben: ");
		int woerter = sc.nextInt();
		int tag     = tagBerechnen(woerter);
		if(1 == woerter) {
			System.out.println("Am ersten Tag kann Anna ein Wort selbst lesen." );
		} else {
			System.out.println("Am Tag " + tag +
					" kann Anna zum ersten Mal " + woerter + " Wörter selbst lesen." );
		}
	}

	int tagBerechnen(int woerter) {
		return (woerter * (woerter-1)) / 2 + 1;
	}
// see Knuth: The Art of Computer Programming Vol 1 p. 44 Aufgabe 41
	int woerterBerechnen(int tag) {
		return (int) (((Math.sqrt(1 + 8*(tag-1)) + 1) / 2.0));
	}

	Scanner sc = new Scanner(System.in);
	 int menu() {
		System.out.println("Wörter aus Tag berechnen  [1]");
		System.out.println("Tag aus Wörtern berechnen [2]");
		int wahl = sc.nextInt();
		return wahl;
	}

} // end of class AnnaLerntLesen
                

Lösung von: Philipp Gressly Freimann (SANTIS Training AG)

<?php

	/**
	* Anna lernt lesen.
	* @author Lukas Müller
	*/

	function summe_E($zahl){
		$summe = 0;
		for($i = 0; $i <= $zahl; $i++){
			$summe += $i;
		}
		$summe -= ($zahl-1);
		return $summe;
	}
	echo "<p>Sie darf ab dem " . summe_E(5) . "-ten tag 5 Wörter lesen.<br />";
							
	function summe_E_backwrd($hoechstwert){
		$zaehler = 1;
		for($i = 1; $i <= $hoechstwert - $i; $i++){
			$hoechstwert -= $i;
			$zaehler++;
		}
		return $zaehler;
	}
	echo "Sie darf nach 23 Tagen ".summe_E_backwrd(23)." Wörter lesen. </p>";

?>
                

Lösung von: Lukas Müller (Informatik Studium)

using System;
using System.Collections.Generic;
using System.Linq;

namespace Anna_lernt_lesen {
	class Geschichte {
		static uint
			counter = 0,
			wörter = 0,
			wiederholung = 0;

		uint 
			geschichtsNr,
			liestWörter;

		public uint LiestWörter {
			get { return liestWörter; }
		}

		public uint GeschichtsNr {
			get { return geschichtsNr; }
		}

		public Geschichte() {
			this.geschichtsNr = ++Geschichte.counter;

			if (wörter == wiederholung++) {
				this.liestWörter = ++Geschichte.wörter;
				wiederholung = 1;
			}
			else {
				this.liestWörter = Geschichte.wörter;
			}
		}

		public override string ToString() {
			return
				"Geschichte Nr: "
				+ this.geschichtsNr
				+ "\nWörter zu lesen: "
				+ this.liestWörter;
		}
	}

	class Program {
		static void Main() {
			List<Geschichte> Geschichtsbuch = new List<Geschichte>();
			for(int i = 0; i < 50; i++)
				Geschichtsbuch.Add(new Geschichte());

			//Aufgabe
			Console.WriteLine("Anna liest das erste mal fünf Wörter am {0}. Tag.", Geschichtsbuch.First(x => x.LiestWörter == 5).GeschichtsNr);
			Console.WriteLine("Am 23 Tag liest Anna {0} Wörter.", Geschichtsbuch.Find(x => x.GeschichtsNr == 23).LiestWörter);

			//Gesamtausgabe
			foreach (Geschichte geschichte in Geschichtsbuch)
				Console.WriteLine("\n" + geschichte);	
			
			Console.ReadKey(true);
		}
	}
}
                

Lösung von: Marcel Kapma ()

#03.06.15
#Anna lernt lesen

print("Moechten Sie wissen in welcher Geschichte sich Anna befindet oder die Anzahl Worte welche sie lesen darf?")
inP = str(raw_input("Fuer Geschichte (g) und fuer Worte (w) eingeben: "))
print ""
if inP in ['w']:
    
    wort = int(input("Geben Sie die Anzahl Worte ein: "))
    woerter = 0
    geschichten = 0
    
    while woerter < wort:
        woerter = woerter + 1
     
        geschichten = geschichten + woerter
        anfangsGeschichte = geschichten - woerter + 1

    print ""
    if wort == 1:
         print "Anna darf nur", woerter, "Wort in der", geschichten, "Geschichte lesen"
    else:
        print "Anna darf", woerter, "Woerter lesen ab der Geschichte", anfangsGeschichte, "bis", geschichten
else:
    geschichte = int(input("Geben Sie an in welcher Geschichte sich Anna befindet: "))
    wort = 0
    geschichten = geschichte
    
    while wort < geschichte:
        wort = wort +1
        geschichte = geschichte - wort + 1
    print ""
    if wort == 1:
        print "Anna darf in der", geschichten, "Geschichte nur", wort, "Wort lesen"
    else:
        print "Anna darf in der", geschichten, "Geschichte,", wort, "Woerter lesen"
                

Lösung von: Michel Künzle ()

public static void lesen(int n)
        {
            int seite = 0;
            for (int tag = 1; tag < n; tag++)
            {
                seite += tag;
                Console.WriteLine("Am {0}. Tag darf das Mädchen von der Seite {1} bis zur Seite {2} lesen", tag, (seite-tag+1), seite);            
}
            Console.ReadKey();
        }
                

Lösung von: Py Thon ()

/* --------------------------*\
|   http://oeis.org/A002024  |
\*---------------------------*/

function getFirstDayOfWords(words) {
  var i = 0;
  while (Math.floor(Math.sqrt(i * 2) + .5) != words) i++;
  return i;
}

function getWordsOnDay(day) {
  return Math.floor(Math.sqrt(day * 2) + .5);
}

console.log(getFirstDayOfWords(8));
console.log(getWordsOnDay(10));

                

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

REPORT Lesen.

PARAMETERS lv_tag TYPE i.

DATA lv_tage TYPE i.
DATA lv_zaehler TYPE i.
lv_tage = 0.
lv_zaehler = 0.

WHILE  lv_tag > lv_tage.
    lv_zaehler = lv_zaehler + 1.
    lv_tage = lv_tage + lv_zaehler.
ENDWHILE.

WRITE lv_zaehler.
                

Lösung von: Name nicht veröffentlicht

using System;

public class AnnaLerntLesen
{
	public static void Main()
	{
		Console.WriteLine("Anna liest 1 Wort am 1.Tag"); //Tag 1 separat für die Ausgabe in Einzahl anstatt Mehrzahl
		lesen(9); //Aufruf Methode "lesen" und Übergabe des Parameters "8 Wörter", gezählt ab 0.
	}

	public static void lesen(int n)
	{
		int geschichte = 1; //Täglich wird eine Geschichte gelesen 
		for (int tag = 2; tag < n; tag++) //Zählung ab Tag 2, da Tag 1 separat
		{
			geschichte += tag;
			Console.WriteLine("Anna liest {0} Wörter am Tag {1}. bis {2}.", tag, (geschichte - tag + 1), geschichte);
		}
	}
}
                

Lösung von: Michu C# (Autodidakt)

Verifikation/Checksumme:

Aufschluss gibt die folgende Tabelle:

Wörter Tag (Geschichte)
1 1.
2 2. - 3.
3 4. - 6.
4 7. - 10.
5 11. - 15.
6 16. - 21.
7 22. - 28.
8 29. - 36.

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: Schwer
Webcode: oukh-6gbt
Autor: Philipp Gressly Freimann (SANTIS Training AG)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen