Seite 1 von 4

Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 12:44
von Blue Flare
Habe die Aufgabe über die Ferien ein Programm zu schreiben das mir das eins mal eins mit ein for schleife ausrechnet...

habe hier mal den Code:

Code: Alles auswählen

zahl = 1
mult = 1
for i in range(zahl * mult , 90):
    print(zahl,"*",mult,"=",i)
    mult += 1
    if mult == 10:
        mult = 1
        zahl += 1
        print("")
        print("")
        print("")

    
so weit so gut leider funktioniert nur der erste block ;(

der zweite sieht dann beispielsweiße so aus:

2 * 1 = 10
2 * 2 = 11
2 * 3 = 12
2 * 4 = 13
2 * 5 = 14
2 * 6 = 15
2 * 7 = 16
2 * 8 = 17
2 * 9 = 18



3 * 1 = 19
3 * 2 = 20
3 * 3 = 21
3 * 4 = 22
3 * 5 = 23
3 * 6 = 24
3 * 7 = 25
3 * 8 = 26
3 * 9 = 27




4 * 1 = 28
4 * 2 = 29
4 * 3 = 30
4 * 4 = 31
4 * 5 = 32
4 * 6 = 33
4 * 7 = 34
4 * 8 = 35
4 * 9 = 36


das stimmt natürlich alles iwie nicht nur frage ich mich warum ??

bitte um hilfe !

lg kevin

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 12:52
von BlackJack
@Blue Flare: Ich weiss nicht was ich dazu sagen soll, ausser dass das *offensichtlich* nicht funktionieren kann. Überleg doch mal was `i` für Werte annimmt. Und warum das eben nicht das Ergebnis ist, was Du haben möchtest. *Berechne* das Ergebnis. Hinter dem Gleichheitszeichen soll ja das Ergebnis einer Multiplikation stehen.

Ansonsten ist die Art wir Du das machst auch nicht besonders übersichtlich. Schreib das mal einfacher. Ohne das ``if`` und ohne dass Du *drei* "Laufvariablen" benötigst.

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 13:09
von Xynon1
zB. so:

Code: Alles auswählen

einmaleins = ("{0} * {1} = {2}".format(x, y, x*y) for x in xrange(1, 11) for y in xrange(1, 11))
print("\n".join(einmaleins))

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 13:15
von BlackJack
Ich hätt's ja so gelöst.

Code: Alles auswählen

from itertools import product

def main():
    RANGE = xrange(1, 11)
    print '\n'.join(
        '%2d x %-2d = %d%s' % (b, a, a * b, '\n' if b == 10 else '')
        for a, b in product(RANGE, RANGE)
    )

if __name__ == "__main__":
    main()
Aber wir wollen dem Blue Flare seine Hausaufgaben doch nicht lösen. ;-)

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 13:21
von Xynon1
ups, hatte ich überlesen :D - macht aber nichts, es gibt noch andere Lösungsmöglichkeiten (zumindest anders aussehen)

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 13:49
von Hyperion
Xynon1 hat geschrieben:ups, hatte ich überlesen :D - macht aber nichts, es gibt noch andere Lösungsmöglichkeiten (zumindest anders aussehen)
Ok, fangen wir mal an mit "Bash" :-)

Code: Alles auswählen

for ((i=1; i<11; i++)); do 
    for((j=1; j<11; j++)); do 
        printf "\n%2s x %2s = %3s" $j $i  $[$j * $i]; 
    done; 
    echo; 
done

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 14:07
von BlackJack
Haskell:

Code: Alles auswählen

n = 10
r = [1..n]
x = [show b ++ " * " ++ show a ++ " = " ++ show (a * b)
        ++ (if b == n then "\n" else "")
            | a <- r, b <- r]

main = putStr $ unlines x

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 14:16
von Hyperion
Ähnlich zur Bash-Löung, C:

Code: Alles auswählen

#include <stdio.h>

int main(int argc, char **argv) {
    int a, b;
    for(a=1; a<11; a++) {
        for(b=1; b<11; b++) {
            printf("%2d x %2d = %3d\n", a, b, a*b);
        }
        printf("\n");
    }
    return 0;
}

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 14:31
von BlackJack
Das ganze in Java:

Code: Alles auswählen

public class Main {

    private static final int N = 10;

    public static void main(String[] args) {
        for (int a = 1; a <= N; a++) {
            for (int b = 1; b <= N; b++) {
                System.out.format("%2d * %-2d = %d\n", b, a, a * b);
            }
            System.out.println();
        }
    }
}

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 14:47
von lunar
@BlackJack: Ich hätte ja "Text.Printf" verwendet:

Code: Alles auswählen

import Text.Printf (printf)
main = sequence [printf "%2d * %2d = %2d\n" x y (x*y) |
                 y <- ([1..10]::[Int]), x <- [1..10]::[Int]]
Ist kürzer, die nötigen Typsignaturen allerdings nehmen dem Ganzen etwas Charme ...

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 15:08
von BlackJack
@lunar: Ja die Typsignaturen sind in der Tat unschön.

Und noch eine Lösung in Io:

Code: Alles auswählen

#!/usr/bin/env io
Range
range := 1 to(10)
range foreach(a,
    range foreach(b, "#{b} * #{a} = #{a * b}" interpolate println)
    "" println
)

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 15:12
von ntrunk
@Blue Flare:
Überleg mal: mit welchem Sprachkonstrukt kannt man eine Anweisung mehrmals wiederholen?

...

...

...

Richtig, mit einer Schleife, soweit bist du ja schon. Was brauchst du also, wenn du die Schleife selbst mehrmals ausführen willst?

...

...

...

Achtung, erst nachdenken, dann weiterlesen...

...

...

...

Eine Schleife in einer Schleife. Hilft dir das jetzt weiter? Ich hoffe, ich habe noch nicht zuviel verraten, richtig Spass macht das Programmieren ja erst, wenn man selbst auf die Lösungen kommt.

Gruß
Norbert

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 15:45
von Rebecca
Ruby:

Code: Alles auswählen

(1..10).each do |j|
  (1..10).each { |i| puts "%s * %s = %s" % [i, j, i*j] }
  puts
end

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 16:38
von BlackJack
CoffeeScript:

Code: Alles auswählen

#!/usr/bin/env coffee
for a in [1..10]
    for b in [1..10]
        console.log "#{b} * #{a} = #{a * b}"
    console.log()
Womit im Grunde die Lösung für den OP verraten ist. Man hätte es auch ein wenig ruby'esquer ausdrücken können:

Code: Alles auswählen

#!/usr/bin/env coffee
range = [1..10]
range.forEach (a) ->
    range.forEach (b) ->
        console.log "#{b} * #{a} = #{a * b}"
    console.log()
Das ist aber nicht ganz so effizient, weil hier tatsächlich eine Liste mit Zahlen angelegt wird.

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 16:43
von Rebecca
BlackJack hat geschrieben:"#{b} * #{a} = #{a * b}"
Ach, das haette ich in Ruby ja auch machen koennen. Das vergesse ich immer...

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 16:48
von BlackJack
JavaScript bring irgendwie nicht viel neues in den Thread:

Code: Alles auswählen

var a, b;
for (a = 1; a <= 10; a++) {
  for (b = 1; b <= 10; b++) {
    console.log("" + b + " * " + a + " = " + (a * b));
  }
  console.log();
}

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 17:42
von gkuhl
Fortran sieht etwas anders aus:

Code: Alles auswählen

PROGRAM einmaleins

    DO i=1,10
        DO j=1,10
            WRITE(*,1001), i, j, i*j
        ENDDO
    ENDDO

    1001 FORMAT (I2, ' x ', I2, ' = ', I3)

END PROGRAM
Grüße
Gerrit

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 17:51
von snafu
Ich kenne Fortran nicht wirklich und kann das Programm mangels Lochkarten leider nicht testen, aber müsste die untenstehende Formatierungszeile nicht mit einem I1 beginnen? Wäre für mich jetzt logischer, sofern sich das auf abgespeicherte Integer-Werte/-Register beziehen soll bzw halt für die mitgegebenen Argumente steht.

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 17:55
von Hyperion
snafu hat geschrieben:Ich kenne Fortran nicht wirklich und kann das Programm mangels Lochkarten leider nicht testen, aber müsste die untenstehende Formatierungszeile nicht mit einem I1 beginnen? Wäre für mich jetzt logischer, sofern sich das auf abgespeicherte Integer-Werte/-Register beziehen soll bzw halt für die mitgegebenen Argumente steht.
Ich denke eher das steht für Integer und die Länge der Stellen ;-)

Re: Hilfe 1*1 !

Verfasst: Dienstag 8. Februar 2011, 17:58
von snafu
Das wäre natürlich auch eine Erklärung und ist hinsichtlich dem, was man vom String-Formatting her kennt, auch recht naheliegend. So weit hatte ich in dem Moment nicht gedacht.