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?
4 Kommentare (ansehen)
20 Lösung(en) (ansehen)
- ruby
- abap
- python
- python
- cpp
- java
- python
- java
- java
- php
- csharp
- python
- csharp
- javascript
- abap
- csharp
- csharp
- python
- cpp
- csharp
01.
#!/usr/bin/ruby
02.
# -*- coding: utf-8 -*-
03.
04.
# @autor Philipp Gressly Freimann
05.
# 4. Feb. 2012
06.
#
08.
# Anna Lernt lesen (web code: oukh-6gbt)
09.
# Bem.: Diese Lösung kommt ohne Schleifen aus, ist aber nicht so einfach zu verstehen.
10.
#Wer schreibt eine Lösung vermittelst Schleife?
11.
12.
$str_woerter
=
"Geschichte aus Wörtern rechnen. Gib Anzahl Wörter ein: "
13.
$str_geschichte
=
"Wörter aus Geschichte. Gib Nr. der Geschichte ein: "
14.
15.
def
hauptprogramm()
16.
woerter = einlesen(
$str_woerter
)
17.
geschichte = berechneGeschichteAusWoertern(woerter)
18.
print
"Bei der #{geschichte}. Geschichte darf Anna "
19.
print
"zum ersten mal #{woerter} "
+
20.
(woerter !=
1
?
"Wörter"
:
"Wort"
) +
" lesen.\n"
21.
print
"\n"
22.
23.
geschichte = einlesen(
$str_geschichte
)
24.
woerter = berechneWoerterAusGeschichte(geschichte)
25.
print
"Bei der #{geschichte}. Geschichte darf Anna "
26.
print
"#{woerter} "
+
27.
(woerter !=
1
?
"Wörter"
:
"Wort"
) +
" selbst lesen.\n"
28.
end
29.
30.
def
einlesen(frage)
31.
print frage
32.
return
STDIN
.gets.to_i
33.
end
34.
35.
def
berechneGeschichteAusWoertern(woerter)
36.
return
(woerter * (woerter-
1
)) /
2
+
1
37.
end
38.
39.
def
berechneWoerterAusGeschichte(geschichte)
40.
return
((Math.sqrt(
1
+
8
*(geschichte-
1
)) +
1
) /
2
.
0
).to_i;
41.
end
42.
43.
## MAIN ##
44.
45.
hauptprogramm()
46.
47.
##### END #####
Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)
*&---------------------------------------------------------------------*
*& 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 :-) ))
01.
"""Python 2.7"""
02.
03.
def
gesch(n):
04.
seite
=
0
05.
for
tag
in
range(
1
,n
+
1
):
06.
seite
+
=
tag
07.
print
"Am"
, tag,
". Tag darf das Maedchen von der"
,seite
-
tag
+
1
,
". Seite bis zur"
, seite,
". Seite lesen"
08.
09.
10.
gesch(
8
)
Lösung von: Py Thon ()
01.
#!/usr/bin/env python2.7
02.
# -*- Coding: utf-8 -*-
03.
### Lisa lernt lesen ###
04.
05.
schalter
=
raw_input(
'(t)age oder (w)orte? '
)
06.
07.
if
schalter
=
=
'w'
:
08.
suche
=
raw_input(
'Wieviele Worte? '
)
09.
tage
=
0
10.
for
i
in
range(
1
,int(suche)):
11.
tage
=
tage
+
i
12.
tage
=
tage
+
1
13.
print
'Ab dem '
+
str(tage)
+
'. Tag liest Lisa '
+
suche
+
' Worte.'
14.
15.
elif
schalter
=
=
't'
:
16.
suche
=
raw_input(
'Welcher Tag? '
)
17.
tage,i
=
0
,
0
18.
while
tage < int(suche):
19.
i
+
=
1
20.
tage
=
tage
+
i
21.
22.
if
tage
=
=
suche:
23.
print
'Am '
+
suche
+
'. Tag liest Lisa '
+
str(i)
+
' Worte.'
24.
else
:
25.
print
'Am '
+
suche
+
'. Tag liest Lisa '
+
str(i)
+
' Worte.'
26.
27.
else
:
28.
print
'Bitte "t" oder "w" eingeben!'
Lösung von: Name nicht veröffentlicht
01.
// Autor: Andy Großhennig
02.
// Solution for task: Anna lernt lesen (Schleifen)
03.
04.
#include <iostream>
05.
06.
using
namespace
std;
07.
08.
// Function: Get the limits for amount of words and storys
09.
void
getData(
int
&iWords_Limit,
int
&iDays_Storys_Limit)
10.
{
11.
cout <<
"Geben sie die Anzahl der Woerter an: "
;
12.
cin >> iWords_Limit;
13.
cout <<
"\nGeben sie die Anzahl der Geschichten/Tage ein: "
;
14.
cin >> iDays_Storys_Limit;
15.
cout << endl;
16.
}
17.
18.
// Function: Simulate the periods (Day 1, Day 2-3, Day 4-6, ...), not the individual days
19.
void
calculate()
20.
{
21.
int
iWords = 1;
22.
int
iWords_Limit = 5;
23.
int
iDays_Storys = 1;
24.
int
iDays_Storys_Limit = 23;
25.
int
iMultiplier = 1;
26.
27.
getData(iWords_Limit, iDays_Storys_Limit);
28.
29.
// Loop: Count the days until its reached the limit of words and show the passed days
30.
while
(iWords < iWords_Limit)
31.
{
32.
iMultiplier++;
33.
iDays_Storys += iMultiplier;
34.
iWords++;
35.
}
36.
//Correct the showing last day to the first day of period
37.
cout <<
"Am "
<< (iDays_Storys - (iMultiplier - 1)) <<
". Tag darf Anna "
<< iWords <<
" Woerter lesen."
<< endl;
38.
39.
// Block: Reset the counted values
40.
{
41.
iWords = 1;
42.
iDays_Storys = 1;
43.
iMultiplier = 1;
44.
}
45.
46.
// Loop: Count the words until its reached the limit of days and show the amount of words
47.
while
(iDays_Storys < iDays_Storys_Limit)
48.
{
49.
iMultiplier++;
50.
iDays_Storys += iMultiplier;
51.
iWords++;
52.
}
53.
cout <<
"In der "
<< iDays_Storys_Limit <<
". Geschichte darf Anna "
<< iWords <<
" Woerter lesen."
<< endl;
54.
}
55.
56.
int
main()
57.
{
58.
calculate();
59.
60.
cout <<
"\n\n"
;
61.
system
(
"Pause"
);
62.
return
0;
63.
}
Lösung von: Andy Großhennig (Bundeswehr)
01.
package
annalearnsreading;
02.
03.
public
class
AnnaLearnsReading {
04.
05.
static
private
int
WORDS =
5
;
//Input: words, Output: days
06.
static
private
int
DAYS =
23
;
//Input: days, Output: words
07.
08.
public
static
void
main(String[] args) {
09.
calcWithWords();
10.
calcWithDays();
11.
}
12.
13.
private
static
void
calcWithWords() {
14.
int
day =
1
;
15.
16.
for
(
int
i =
1
; i < WORDS; i++){
17.
day += i;
18.
}
19.
System.out.println(
"Anna can read "
+ WORDS +
" words at day "
+ day);
20.
21.
}
22.
23.
private
static
void
calcWithDays() {
24.
int
day = DAYS;
25.
int
count =
1
;
26.
27.
while
(day >
0
){
28.
day-=count;
29.
count++;
30.
}
31.
System.out.println(
"Anna can read "
+ (count-
1
) +
" words at day "
+ DAYS);
32.
}
33.
}
Lösung von: Benedikt Starzengruber (HTL Leonding)
01.
#!usr/bin/env python
02.
# -*- coding: utf-8 -*-
03.
04.
# 2014 witti
06.
07.
def
geschichten(nwoert):
08.
tage
=
1
09.
for
i
in
range(
1
, nwoert):
10.
tage
=
tage
+
i
11.
return
tage
12.
13.
def
woerter(ntag):
14.
tage
=
1
15.
woerter
=
1
16.
while
tage < ntag:
17.
woerter
=
woerter
+
1
18.
tage
=
tage
+
woerter
19.
return
woerter
20.
21.
print
(
"1 Wann darf sie n Wörter lesen?"
)
22.
print
(
"2 Wie viele Wörter darf sie in der n-ten Geschichte lesen?"
)
23.
24.
menu
=
str(input(
"? "
))
25.
n
=
int(input(
"n? "
))
26.
27.
if
menu
=
=
"1"
:
28.
print
(
"Am"
, geschichten(n),
"Tag darf sie "
, n,
"Wörter lesen."
)
29.
elif
menu
=
=
"2"
:
30.
print
(
"Am"
, n,
"Tag darf sie"
, woerter(n),
"Wörter lesen."
)
Lösung von: witti yoo (qwertz)
01.
import
java.util.Scanner;
02.
03.
04.
/**
05.
* @version 0.1 (Feb 26, 2015)
06.
* @author Philipp Gressly Freimann
07.
* (philipp.gressly@santis.ch)
08.
*/
09.
public
class
AnnaLerntLesen {
10.
11.
public
static
void
main(String[] args) {
12.
new
AnnaLerntLesen().top();
13.
}
14.
15.
void
top() {
16.
int
wahl = menu();
// 1: wörter rechnen 2: tag rechnen
17.
if
(
1
== wahl) {
18.
woerterRechnen();
19.
}
else
{
20.
tagRechnen();
// TODO implementiere tagRechnen
21.
}
22.
sc.close();
23.
}
24.
25.
void
woerterRechnen() {
26.
System.out.println(
"Bitte Tag (Geschichte) Nummer eingeben: "
);
27.
int
tag = sc.nextInt();
28.
int
woerter = woerterBerechnen(tag);
29.
if
(
1
== woerter) {
30.
System.out.println(
"Am ersten Tag kann Anna ein Wort selbst lesen."
);
31.
}
else
{
32.
System.out.println(
"Am Tag "
+ tag +
33.
" kann Anna "
+ woerter +
" Wörter selbst lesen."
);
34.
}
35.
}
36.
37.
void
tagRechnen() {
38.
System.out.println(
"Bitte Anzahl Wörter eingeben: "
);
39.
int
woerter = sc.nextInt();
40.
int
tag = tagBerechnen(woerter);
41.
if
(
1
== woerter) {
42.
System.out.println(
"Am ersten Tag kann Anna ein Wort selbst lesen."
);
43.
}
else
{
44.
System.out.println(
"Am Tag "
+ tag +
45.
" kann Anna zum ersten Mal "
+ woerter +
" Wörter selbst lesen."
);
46.
}
47.
}
48.
49.
int
tagBerechnen(
int
eingegebeneAnzahlWoerter) {
50.
int
tag =
1
;
51.
int
woerter =
1
;
52.
int
mal =
1
;
// zum sovielten Mal darf Anna gleich
53.
// viele Wörter lesen
54.
while
(woerter != eingegebeneAnzahlWoerter) {
// solange nicht erreicht
55.
tag = tag +
1
;
56.
if
(mal == woerter) {
57.
mal =
1
;
58.
woerter = woerter +
1
;
59.
}
else
{
60.
mal = mal +
1
;
61.
}
62.
}
// end while
63.
return
tag;
64.
}
65.
66.
int
woerterBerechnen(
int
eingegebenerTag) {
67.
int
tag =
1
;
68.
int
woerter =
1
;
69.
int
mal =
1
;
// zum sovielten Mal darf Anna gleich
70.
// viele Wörter lesen
71.
while
(tag != eingegebenerTag) {
// solange nicht erreicht
72.
tag = tag +
1
;
73.
if
(mal == woerter) {
74.
mal =
1
;
75.
woerter = woerter +
1
;
76.
}
else
{
77.
mal = mal +
1
;
78.
}
79.
}
// end while
80.
return
woerter;
81.
}
82.
83.
Scanner sc =
new
Scanner(System.in);
84.
int
menu() {
85.
System.out.println(
"Wörter aus Tag berechnen [1]"
);
86.
System.out.println(
"Tag aus Wörtern berechnen [2]"
);
87.
int
wahl = sc.nextInt();
88.
return
wahl;
89.
}
90.
91.
}
// end of class AnnaLerntLesen
Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)
01.
import
java.util.Scanner;
02.
03.
04.
/**
05.
* @version 0.1 (Feb 26, 2015)
06.
* @author Philipp Gressly Freimann
07.
* (philipp.gressly@santis.ch)
08.
*/
09.
public
class
AnnaLerntLesen2 {
10.
11.
public
static
void
main(String[] args) {
12.
new
AnnaLerntLesen2().top();
13.
}
14.
15.
void
top() {
16.
int
wahl = menu();
// 1: wörter rechnen 2: tag rechnen
17.
if
(
1
== wahl) {
18.
woerterRechnen();
19.
}
else
{
20.
tagRechnen();
21.
}
22.
sc.close();
23.
}
24.
25.
void
woerterRechnen() {
26.
System.out.println(
"Bitte Tag (Geschichte) Nummer eingeben: "
);
27.
int
tag = sc.nextInt();
28.
int
woerter = woerterBerechnen(tag);
29.
if
(
1
== woerter) {
30.
System.out.println(
"Am ersten Tag kann Anna ein Wort selbst lesen."
);
31.
}
else
{
32.
System.out.println(
"Am Tag "
+ tag +
33.
" kann Anna "
+ woerter +
" Wörter selbst lesen."
);
34.
}
35.
}
36.
37.
void
tagRechnen() {
38.
System.out.println(
"Bitte Anzahl Wörter eingeben: "
);
39.
int
woerter = sc.nextInt();
40.
int
tag = tagBerechnen(woerter);
41.
if
(
1
== woerter) {
42.
System.out.println(
"Am ersten Tag kann Anna ein Wort selbst lesen."
);
43.
}
else
{
44.
System.out.println(
"Am Tag "
+ tag +
45.
" kann Anna zum ersten Mal "
+ woerter +
" Wörter selbst lesen."
);
46.
}
47.
}
48.
49.
int
tagBerechnen(
int
woerter) {
50.
return
(woerter * (woerter-
1
)) /
2
+
1
;
51.
}
52.
// see Knuth: The Art of Computer Programming Vol 1 p. 44 Aufgabe 41
53.
int
woerterBerechnen(
int
tag) {
54.
return
(
int
) (((Math.sqrt(
1
+
8
*(tag-
1
)) +
1
) /
2.0
));
55.
}
56.
57.
Scanner sc =
new
Scanner(System.in);
58.
int
menu() {
59.
System.out.println(
"Wörter aus Tag berechnen [1]"
);
60.
System.out.println(
"Tag aus Wörtern berechnen [2]"
);
61.
int
wahl = sc.nextInt();
62.
return
wahl;
63.
}
64.
65.
}
// end of class AnnaLerntLesen
Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)
01.
<?php
02.
03.
/**
04.
* Anna lernt lesen.
05.
* @author Lukas Müller
06.
*/
07.
08.
function
summe_E(
$zahl
){
09.
$summe
= 0;
10.
for
(
$i
= 0;
$i
<=
$zahl
;
$i
++){
11.
$summe
+=
$i
;
12.
}
13.
$summe
-= (
$zahl
-1);
14.
return
$summe
;
15.
}
16.
echo
"<p>Sie darf ab dem "
. summe_E(5) .
"-ten tag 5 Wörter lesen.<br />"
;
17.
18.
function
summe_E_backwrd(
$hoechstwert
){
19.
$zaehler
= 1;
20.
for
(
$i
= 1;
$i
<=
$hoechstwert
-
$i
;
$i
++){
21.
$hoechstwert
-=
$i
;
22.
$zaehler
++;
23.
}
24.
return
$zaehler
;
25.
}
26.
echo
"Sie darf nach 23 Tagen "
.summe_E_backwrd(23).
" Wörter lesen. </p>"
;
27.
28.
?>
Lösung von: Lukas Müller (Informatik Studium)
01.
using
System;
02.
using
System.Collections.Generic;
03.
using
System.Linq;
04.
05.
namespace
Anna_lernt_lesen {
06.
class
Geschichte {
07.
static
uint
08.
counter = 0,
09.
wörter = 0,
10.
wiederholung = 0;
11.
12.
uint
13.
geschichtsNr,
14.
liestWörter;
15.
16.
public
uint
LiestWörter {
17.
get
{
return
liestWörter; }
18.
}
19.
20.
public
uint
GeschichtsNr {
21.
get
{
return
geschichtsNr; }
22.
}
23.
24.
public
Geschichte() {
25.
this
.geschichtsNr = ++Geschichte.counter;
26.
27.
if
(wörter == wiederholung++) {
28.
this
.liestWörter = ++Geschichte.wörter;
29.
wiederholung = 1;
30.
}
31.
else
{
32.
this
.liestWörter = Geschichte.wörter;
33.
}
34.
}
35.
36.
public
override
string
ToString() {
37.
return
38.
"Geschichte Nr: "
39.
+
this
.geschichtsNr
40.
+
"\nWörter zu lesen: "
41.
+
this
.liestWörter;
42.
}
43.
}
44.
45.
class
Program {
46.
static
void
Main() {
47.
List<Geschichte> Geschichtsbuch =
new
List<Geschichte>();
48.
for
(
int
i = 0; i < 50; i++)
49.
Geschichtsbuch.Add(
new
Geschichte());
50.
51.
//Aufgabe
52.
Console.WriteLine(
"Anna liest das erste mal fünf Wörter am {0}. Tag."
, Geschichtsbuch.First(x => x.LiestWörter == 5).GeschichtsNr);
53.
Console.WriteLine(
"Am 23 Tag liest Anna {0} Wörter."
, Geschichtsbuch.Find(x => x.GeschichtsNr == 23).LiestWörter);
54.
55.
//Gesamtausgabe
56.
foreach
(Geschichte geschichte
in
Geschichtsbuch)
57.
Console.WriteLine(
"\n"
+ geschichte);
58.
59.
Console.ReadKey(
true
);
60.
}
61.
}
62.
}
Lösung von: Marcel Kapma ()
01.
#03.06.15
02.
#Anna lernt lesen
03.
04.
print
(
"Moechten Sie wissen in welcher Geschichte sich Anna befindet oder die Anzahl Worte welche sie lesen darf?"
)
05.
inP
=
str(raw_input(
"Fuer Geschichte (g) und fuer Worte (w) eingeben: "
))
06.
print
""
07.
if
inP
in
[
'w'
]:
08.
09.
wort
=
int(input(
"Geben Sie die Anzahl Worte ein: "
))
10.
woerter
=
0
11.
geschichten
=
0
12.
13.
while
woerter < wort:
14.
woerter
=
woerter
+
1
15.
16.
geschichten
=
geschichten
+
woerter
17.
anfangsGeschichte
=
geschichten
-
woerter
+
1
18.
19.
print
""
20.
if
wort
=
=
1
:
21.
print
"Anna darf nur"
, woerter,
"Wort in der"
, geschichten,
"Geschichte lesen"
22.
else
:
23.
print
"Anna darf"
, woerter,
"Woerter lesen ab der Geschichte"
, anfangsGeschichte,
"bis"
, geschichten
24.
else
:
25.
geschichte
=
int(input(
"Geben Sie an in welcher Geschichte sich Anna befindet: "
))
26.
wort
=
0
27.
geschichten
=
geschichte
28.
29.
while
wort < geschichte:
30.
wort
=
wort
+
1
31.
geschichte
=
geschichte
-
wort
+
1
32.
print
""
33.
if
wort
=
=
1
:
34.
print
"Anna darf in der"
, geschichten,
"Geschichte nur"
, wort,
"Wort lesen"
35.
else
:
36.
print
"Anna darf in der"
, geschichten,
"Geschichte,"
, wort,
"Woerter lesen"
Lösung von: Michel Künzle ()
01.
public
static
void
lesen(
int
n)
02.
{
03.
int
seite = 0;
04.
for
(
int
tag = 1; tag < n; tag++)
05.
{
06.
seite += tag;
07.
Console.WriteLine(
"Am {0}. Tag darf das Mädchen von der Seite {1} bis zur Seite {2} lesen"
, tag, (seite-tag+1), seite);
08.
}
09.
Console.ReadKey();
10.
}
Lösung von: Py Thon ()
01.
/* --------------------------*\
02.
| http://oeis.org/A002024 ; |
03.
\*---------------------------*/
04.
05.
function
getFirstDayOfWords(words) {
06.
var
i = 0;
07.
while
(Math.floor(Math.sqrt(i * 2) + .5) != words) i++;
08.
return
i;
09.
}
10.
11.
function
getWordsOnDay(day) {
12.
return
Math.floor(Math.sqrt(day * 2) + .5);
13.
}
14.
15.
console.log(getFirstDayOfWords(8));
16.
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
01.
using
System;
02.
03.
public
class
AnnaLerntLesen
04.
{
05.
public
static
void
Main()
06.
{
07.
Console.WriteLine(
"Anna liest 1 Wort am 1.Tag"
);
//Tag 1 separat für die Ausgabe in Einzahl anstatt Mehrzahl
08.
lesen(9);
//Aufruf Methode "lesen" und Übergabe des Parameters "8 Wörter", gezählt ab 0.
09.
}
10.
11.
public
static
void
lesen(
int
n)
12.
{
13.
int
geschichte = 1;
//Täglich wird eine Geschichte gelesen
14.
for
(
int
tag = 2; tag < n; tag++)
//Zählung ab Tag 2, da Tag 1 separat
15.
{
16.
geschichte += tag;
17.
Console.WriteLine(
"Anna liest {0} Wörter am Tag {1}. bis {2}."
, tag, (geschichte - tag + 1), geschichte);
18.
}
19.
}
20.
}
Lösung von: Michu C# (Autodidakt)
01.
using
System;
02.
03.
// Programmieraufgaben.ch Aufgaben-Code: oukh-6gbt
04.
05.
namespace
AnnaLernLesen
06.
{
07.
class
Program
08.
{
09.
static
void
Main()
10.
{
11.
// Zahlen-Abfrage
12.
Console.WriteLine(
"Bitte geben sie die Zahl (Geschichte / Tag) an, die Sie erfahren möchten."
);
13.
if
(
int
.TryParse(Console.ReadLine(),
out
int
number))
14.
{
15.
Console.Clear();
16.
DoTheMath(number);
17.
}
18.
else
19.
{
20.
Environment.Exit(0x32);
21.
}
22.
}
23.
24.
static
void
DoTheMath(
int
inputNumber)
25.
{
26.
// a) In welcher Geschichte (also an welchem Tag) darf sie zum ersten Mal n Wörter lesen?
27.
// b) Wie viele Wörter darf Anna in der m-ten Geschichte(also am m - ten Tag) schon selbst lesen ?
28.
inputNumber = inputNumber == 0 ? 1 : inputNumber;
29.
ulong
currentDay = 0;
30.
ulong
currentInternalDay = 0;
31.
ulong
currentWordsRead = 0;
32.
bool
needDay =
true
;
33.
bool
needWords =
true
;
34.
string
[] word =
new
string
[2];
35.
ulong
[] output =
new
ulong
[2];
36.
37.
while
(needDay || needWords)
38.
{
39.
if
(currentInternalDay == currentWordsRead)
40.
{
41.
currentInternalDay = 0;
42.
currentWordsRead++;
43.
}
44.
currentInternalDay++;
45.
currentDay++;
46.
47.
Console.WriteLine($
"Tag der Geschichte {currentInternalDay}\t| Wörter {currentWordsRead}\t| Tage {currentDay}"
);
48.
49.
if
(needDay && (
ulong
)inputNumber == (
ulong
)currentWordsRead)
50.
{
51.
output[0] = currentDay;
52.
needDay =
false
;
53.
}
54.
if
(needWords && (
ulong
)inputNumber == (
ulong
)currentDay)
55.
{
56.
output[1] = currentWordsRead;
57.
needWords =
false
;
58.
}
59.
}
60.
61.
word[0] = inputNumber > 1 ?
"Wörter"
:
"Wort"
;
62.
word[1] = output[1] > 1 ?
"Wörter"
:
"Wort"
;
63.
Console.Clear();
64.
Console.WriteLine($
"Ergebnis:\na) Anna darf in der {output[0]}. Geschichte das erste mal {inputNumber} {word[0]} lesen.\nb) Anna darf {output[1]} {word[1]} in der {inputNumber}. Geschichte lesen."
);
65.
}
66.
}
67.
}
Lösung von: Howard Dennis King (IT-Schule Stuttgart)
01.
def
day(words):
02.
a, b
=
1
,
1
03.
while
b < words:
04.
a, b
=
a
+
b, b
+
1
05.
return
a
06.
07.
def
words(day):
08.
a, b
=
1
,
1
09.
while
a < day:
10.
a, b
=
a
+
b, b
+
1
11.
return
b
if
day >
=
a
else
b
-
1
Lösung von: Name nicht veröffentlicht
01.
// C++ 20
02.
#include <iostream>
03.
04.
const
auto res{ [](auto x) {
return
int
(
sqrt
(x * 2) + 0.5); } };
05.
06.
std::tuple<
int
,
int
> get_days_of_words(
int
words) {
07.
auto i{ 0 };
08.
while
(res(++i) < words);
09.
return
{ i, i + words - 1 };
10.
}
11.
12.
auto get_words_a_day(
int
day) {
return
res(day); }
13.
14.
int
main() {
15.
constexpr auto words{ 3 };
16.
constexpr auto days{ 7 };
17.
const
auto [first, last] = get_days_of_words(words);
18.
std::cout <<
"words ("
<< words <<
") -> first: "
<< first <<
", last : "
<< last <<
"\n"
;
19.
std::cout <<
"day ("
<< days <<
") -> words: "
<< get_words_a_day(days) <<
"\n"
;
20.
}
Lösung von: Jens Kelm (@JKooP)
01.
// NET 6.x | C# 10.x | VS-2022
02.
const
int
words = 3;
03.
const
int
days = 7;
04.
var d = GetDaysOfWords(words);
05.
var w = GetWordsADay(days);
06.
07.
Console.WriteLine($
"words ({words}) -> first: {d.first}, last: {d.last}"
);
08.
Console.WriteLine($
"day ({days}) -> words: {w}"
);
09.
10.
(
int
first,
int
last) GetDaysOfWords(
int
words) {
11.
var i = 0;
12.
while
(GetWordsADay(++i) < words);
13.
return
(i, i + words - 1);
14.
}
15.
16.
int
GetWordsADay(
int
day) => (
int
)(Math.Sqrt(day * 2) + 0.5);
Lösung von: Jens Kelm (@JKooP)
Verifikation/Checksumme: (ansehen)
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. |
Kommentare (4)
Gerne in Java
Hier die Aufgabenstellung: Annas Vater möchte die maximale Anzahl an Tage, die es braucht, bis Anna ein zusätzliches Wort
lesen darf, begrenzen. Z.B soll Anna nicht länger als 6 Tage die gleiche Anzahl an Wörter
verwenden, bis sie ein zusätzliches Wort verwenden darf. Das Bedeutet, dass sie auch bei 7 Wörter
schon nach dem 6. Abend 8 Wörter verwenden darf und diese auch wieder nur 6 Abende.
Erweitern Sie Ihr Programm so, dass der Benutzer eine Begrenzung am Anfang angeben und dann
wie gewohnt die Eingabe für a) und b) tätigen kann. Das Programm soll dann mit der angegeben
Begrenzung wie beschrieben fortfahren. Gibt der Benutzer die Zahl 0 ein, soll die Begrenzung
ignoriert werden.
Hier jedoch schön in eine Geschichte verpackt.