NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:24.5.2017 16:02

Ahoj, nemohu najít chybu při sestavování dvourozměrného pole. Vyzkoušel jsem hodně možností, ale nepodařilo se mi. Prosím o radu.

Odpovědět
24.5.2017 16:02
statik
Avatar
xpoproci
Člen
Avatar
xpoproci:24.5.2017 16:20

To čo si si nainicializoval nie je 2D pole ale pole o 2 prvkoch, to čo robí tvoj kód je, že sa snažíš 2x za sebou zmeniť hodnotu na pozícii poleA[3][3] = 1, nie som si istý, či práve to chceš. každopádne

pole = [[0 for x in range (5)] for y in range(5)]

toto ti vytvorí pole 5x5 kde je na každom mieste 0.

Nahoru Odpovědět
24.5.2017 16:20
Motto
Avatar
xpoproci
Člen
Avatar
xpoproci:24.5.2017 16:26

Prípadne sa to dá aj takto

pole = []
for x in range(5):
        pole.append([])
        for y in range(5):
                pole[x].append(0)
Nahoru Odpovědět
24.5.2017 16:26
Motto
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na xpoproci
Jaroslav Trojan:24.5.2017 16:36

Velké díky xpoproci !
Mým cílem je dosadit do každého prvku pole danou vypočtenou hodnotu, dle vzoru:
poleA(i,j)= hodnota v cyklu i a j . Nevím, jak to provedu.
Ale moc děkuji.

Nahoru Odpovědět
24.5.2017 16:36
statik
Avatar
xpoproci
Člen
Avatar
xpoproci:24.5.2017 16:43
pole = []
for x in range(5):
        pole.append([])
        for y in range(5):
                pole[x].append(hodnota) #hodnota je vlastne na prvku pole[x][y]

takže namiesto premennej hodnota tam stačí dať tú vypočítanú hodnotu.

Nahoru Odpovědět
24.5.2017 16:43
Motto
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na xpoproci
Jaroslav Trojan:24.5.2017 16:46

Opravdu jsi velmi ochotný a já ti moc děkuji !

Nahoru Odpovědět
24.5.2017 16:46
statik
Avatar
xpoproci
Člen
Avatar
xpoproci:24.5.2017 16:47

nie je vôbec začo. ;-)

Nahoru Odpovědět
24.5.2017 16:47
Motto
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na xpoproci
Jaroslav Trojan:29.5.2017 10:10

Ahoj, nevím proč zrovna v tomto případu je chyba u return. Kód je přiložen a nejsem si jistý správností
maticových operací , viz další. Byl bych velmi rád , kdybys mi poradil. Díky.

Nahoru Odpovědět
29.5.2017 10:10
statik
Avatar
Odpovídá na Jaroslav Trojan
Michal Haňáček:29.5.2017 10:48

Ahoj, podle screenu to vypadá, že fce. posunuti nemá ukončenou závorku v příkazu print (poslední řádek).

Editováno 29.5.2017 10:50
Nahoru Odpovědět
29.5.2017 10:48
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na Michal Haňáček
Jaroslav Trojan:29.5.2017 14:11

Díky, přehlédl jsem.

Nahoru Odpovědět
29.5.2017 14:11
statik
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na xpoproci
Jaroslav Trojan:29.5.2017 14:20

Ahoj, používám poprvé dvojrozměrná pole (matice), takže mám problémy. V příloze je část kódu, která
mi není zcela jasná. Mohl bys se na to podívat jako zkušený programátor, kde je chyba.

Nahoru Odpovědět
29.5.2017 14:20
statik
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na xpoproci
Jaroslav Trojan:29.5.2017 14:28

Ahoj, zde je ta příloha s chybou. Děkuji za radu.

Nahoru Odpovědět
29.5.2017 14:28
statik
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
gcx11:29.5.2017 21:11

Na tom řádku před chybou chybí koncová závorka.

SyntaxError = chyba v syntaxi, tj. ten kód není validní, protože někde chybí závorka, operátor, proměnná...

 
Nahoru Odpovědět
29.5.2017 21:11
Avatar
Odpovídá na gcx11
Michal Haňáček:30.5.2017 6:12

Už jsem mu to jednou říkal, ale bez výsledku ...

Nahoru Odpovědět
30.5.2017 6:12
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na gcx11
Jaroslav Trojan:30.5.2017 6:14

Díky , gcx11.

Nahoru Odpovědět
30.5.2017 6:14
statik
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:30.5.2017 8:27

Ahoj, poradí mi někdo jak odstranit chybu, viz příloha. Moc děkuji.

Nahoru Odpovědět
30.5.2017 8:27
statik
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
gcx11:30.5.2017 15:25

Tipoval bych, že tam mají být hranaté závorky místo kulatých.

 
Nahoru Odpovědět
30.5.2017 15:25
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na gcx11
Jaroslav Trojan:30.5.2017 17:00

Tipoval jsi správně, díky

Nahoru Odpovědět
30.5.2017 17:00
statik
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:1.6.2017 9:44

Ahoj, dostal jsem se do situace , kdy si nevím rady. Nevím jak si mám vysvětlit chybu - viz příloha:

Nahoru Odpovědět
1.6.2017 9:44
statik
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:1.6.2017 9:48

A mám ještě problém se zápisem text. dat. Příkaz k zápisu jsem získal z knihy prof. Summerfielda "PYTHON 3".

Nahoru Odpovědět
1.6.2017 9:48
statik
Avatar
Odpovídá na Jaroslav Trojan
Michal Haňáček:1.6.2017 10:46

Ahoj Jaroslave, vy jste generátor problémů :D. Vždyť tam přímo máte napsané kde je problém - odkazujete se na proměnou sezx dříve než jí naplníte (konkrétně metoda gener_souradnic).

Nahoru Odpovědět
1.6.2017 10:46
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Odpovídá na Jaroslav Trojan
Michal Haňáček:1.6.2017 10:48

Z toho screenu se nedá nic vyčíst vyjma toho, že se pokoušíte zapsat do čehosi pod názvem "fh" ... ono celkově tyhle screeny to je velká paráda na hledání Vašich chyb ...

Nahoru Odpovědět
1.6.2017 10:48
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
gcx11:1.6.2017 14:14

Ten soubor bude otevřený jenom pro čtení, proto se do něj nedá zapisovat. Musí se použít parametr "w" jako write (zapisovat).

f = open('muj_sobor.txt', 'w','utf-8');

https://docs.python.org/…toutput.html

 
Nahoru Odpovědět
1.6.2017 14:14
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na gcx11
Jaroslav Trojan:1.6.2017 17:32

Díky gcx11, mám otevření file na začátku programu. Mám však jiný problém s indexy seznamu sezx[ ] a sezy[ ]. Definoval jsem oba seznamy jako sezx[1: 6] a hlásí to chybu index out of range, jak je to možné? viz přílohy

Nahoru Odpovědět
1.6.2017 17:32
statik
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na gcx11
Jaroslav Trojan:1.6.2017 17:53

Totéž je u čtení dat .....souřadnice x , y,

Nahoru Odpovědět
1.6.2017 17:53
statik
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
gcx11:1.6.2017 17:57

Protože

seznam[i:j]

znamená, vrať mi část seznamu, která začíná na i-tém prvku a končí před j-tým prkvem.

Příklad:

seznam = ['a', 'b', 'c', 'd', 'e']
print(seznam[1:3]) # vytiskne ['b', 'c']
 
Nahoru Odpovědět
1.6.2017 17:57
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
gcx11:1.6.2017 18:00

Pokud chceš do seznamu postupně přidávat prvky, tak stačí volat metodu append

seznam.append(prvek)

Seznam je kolekce prvků, která se automaticky zvětšuje podle toho, jak do ní přidáváš prvky. Není třeba specifikovat počet prvků, které bude obsahovat, což bylo to, o co ses podle mě pokoušel.

 
Nahoru Odpovědět
1.6.2017 18:00
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na gcx11
Jaroslav Trojan:2.6.2017 8:08

Ahoj gcx11, seznamy : sezx[ ] a sezy[ ] mám sestavené ve funkci def gener_souradnic. To ale znamená , že neexistuje indexovaná proměnná, např. sezx[ i ] ?
Nutně potřebuji pracovat s poli, kde volám jednotlivé prvky pole dle indexu, ale jak vidím tak to nejde( např. pole K[ 5,5] volat prvek K[i , j] ). A dále nevím jak dostat seznam (pole) do hlav.programu, když ho mám ve funkci ( def něco:).
Díky za radu.

Nahoru Odpovědět
2.6.2017 8:08
statik
Avatar
xpoproci
Člen
Avatar
Odpovídá na Jaroslav Trojan
xpoproci:2.6.2017 11:10

k[5, 5] Ti asi nepôjde, dvojrozmerné pole sa volá K[5][5] a ak chceš s poľom pracovať tak si ho nainicializuj na začiatku programu, keďže pole je ak sa nemýlim referenčný datový typ tak ho posúvaj ako argument daných funkcií a pracuj rovno s ním, alebo výsledné polia v jednotlivých funkciách vracaj a ukladaj si ich do premenných v hlavnom programe.

Nahoru Odpovědět
2.6.2017 11:10
Motto
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na xpoproci
Jaroslav Trojan:2.6.2017 11:47

Vůbec ti nerozumím co tím myslíš. Jde pracovat s indexovanou proměnnou X(i) nebo třeba K( i, j) nebo nejde?
A když nejde jak to nahradím, já to nevím, nikde jsem se to nedozvěděl, ani nevím kde to hledat.

Nahoru Odpovědět
2.6.2017 11:47
statik
Avatar
Nahoru Odpovědět
2.6.2017 13:06
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Odpovídá na Jaroslav Trojan
Erik Šťastný:2.6.2017 13:14

Celé tohle vlákno mi přijde zbytečné, máš program, který je daleko nad tvé znalosti a snažíš se v něm hrabat, když neumíš úplné základy. Být tebou tak otevřu kapitolu Python I. ve zdejším tutoriálu a jdu po stupně.

 
Nahoru Odpovědět
2.6.2017 13:14
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:2.6.2017 13:40

Všechny tutoriály Pythonu jsem pročetl a vyzkoušel příklady. Takové informace, které by řešily maticové operace , tj, zpracování 2rozměrných polí , myslím třeba násobení dvou matic , to tam není určitě. Raději pošlu celý program, aby to bylo jasné. Vytvořil jsem ho v GWBASIC , a tam je
to velmi jednoduché. Je třeba možné jednotlivý prvek pole sčítat nebo násobit prvkem jiného pole velmi snadno. V Pythonu (tutoriálech) nic takového není uvedeno.

#!usr/bin/ekv Python3
# PRUT 2
import math


"""PRUT2-ROVINNA PRIHRADOVA KONSTRUKCE"""

def gener_cislovani():
    d1=0
    zat="zat"
    if N1>0 or N2>0:
        print("gener. číslování prutů :N1>0 nebo N2>0 čtení")
        fh=None
        fh=open(zat,encoding="utf8")
#       open"i",1,"zat"
    elif N1==0 and N2==0:
        print("gener. číslování prutů :N1=N2=0 zápis")
        fh=None
        fh=open(zat,"w",encoding="utf8")
#       open"o",1,"zat"
        soucK=0
    for i in range(1,pocetP+1):

        if N1==0 or N2==0:
            pass
            if i ==1:
                 print("  Dolní pas: 2-4 ")
                 cisloN=(pocetstycI1-3)/2
                 dolpas=cisloN
            elif i==dolpas+1:
                 print("  Horní pas: 1-3 ")
                 cisloN=dolpas+1
            elif i== pocetstycI1-2:
                  print("  Diagonály: 1-2 ")
                  cisloN=pocetstycI1-1
            zacP1= int(input("  čísloP1 začátku prutu?  "))
            konP2= int(input("  čísloP2 konce prutu?  "))
            plochaF= float(input("  průřezová plocha[cm^2] ?  "))
            soucK+=1
            print("  K=",soucK,"cisloN=",cisloN)
            cisloN=int(cisloN)
            sezP1=[]
            sezP2=[]
            sezF=[]
            sezP1a=[]
            sezP2a=[]
            sezFa=[]

            for j in range(1,cisloN+1):
                        print("  prut I",i,"cisloN=",cisloN)
                        if j==1:
                            sezP1.append(zacP1)
                            sezP2.append(konP2)
                            sezF.append(plochaF)
                            zacP1=str(zacP1)
                            konP2=str(konP2)
                            plochaF=str(plochaF)
                            fh.write(zacP1)
                            fh.write(konP2)
                            fh.write(plochaF)
                            #print#1,P1,P2,F
                            zacP1=zacP1
                            konP2=konP2
                            print(zacP1,konP2,plochaF)

                        elif soucK < 3 and soucK >1:

                             zacP1= konP2
                             konP2= konP2+2
                             sezP1.append(zacP1)
                             sezP2.append(konP2)
                             sezF.append(plochaF)
                             print(zacP1,konP2,plochaF)
                             zacP1=str(zacP1)
                             konP2=str(konP2)
                             fh.write(zacP1)
                             fh.write(konP2)
                             fh.write(plochaF)
                        elif soucK==3:
                              zacP1= konP2
                              konP2= konP2+1
                              sezP1.append(zacP1)
                              sezP2.append(konP2)
                              sezF.append(plochaF)
                              zacP1=str(zacP1)
                              konP2=str(konP2)
                              fh.write(zacP1)
                              fh.write(konP2)
                              fh.write(plochaF)

                        else:
                            pass
                        zacP1=int(zacP1)
                        konP2=int(konP2)
                        if abs(konP2-zacP1)>d1:
                            d1=abs(konP2-zacP1)


            print("  Prut I:",i,"d1=",d1)
            sezP1a.append(zacP1)
            sezP2a.append(konP2)
            sezFa.append(plochaF)
            print("zacP1,konP2,plochaF[cm^2]:",zacP1,konP2,plochaF)
            zacP1=str(zacP1)
            konP2=str(konP2)
            fh.write(zacP1)
            fh.write(konP2)
            fh.write(plochaF)
            #            print#1,P1,P2,F
            zacP1=int(zacP1)
            konP2=int(konP2)
            if N1>0 or N2>0:
                   if abs(konP2-zacP1)>d1:
                                 d1=abs(konP2-zacP1)
            print()
            if soucK==3:
                break
            elif i>=pocetP:
                break

    print("d1=",d1)
    d1=(d1+1)*2
    print("  polopas D1=",d1)
    for m in range(1,2*(pocetstycI1+1)):
        for j in range(1,d1+1+1):
            matK=[[0 for i in range(1,(2*pocetstycI1)+2)] for j in range(1,(d1+1)+1)]
    print("sezP1:",sezP1, "sezP2:",sezP2,"sezF:",sezF)
    print("sezP1a:",sezP1a,"sezP2a:",sezP2a,"sezFa:",sezFa)
    return d1,sezP1,sezP2,sezF,sezP1a,sezP2a,sezFa


def gener_souradnic():
    nosnavyska= float(input("  Nosná výška H[m]?  "))
    delkadilu = float(input("  délka dílu nosníku?  "))
    (HH)=nosnavyska
    (KK)=delkadilu
    LS=0
    sezx=[]
    sezy=[]
    print("  Nosná výška H[m]=",HH,"délka dílu nosníku[m]=",KK)
    print("  počet dílů=",pocetstycI1-1)
    print("  Souřadnice styčníků  x[m]       y[m]")
    sezx.append(0)
    #sezx[1]=0
    #sezy[1]=HH
    sezy.append(HH)
    print("  ", 1,"                  ",0,"         ",HH)

    for i in range(2,pocetstycI1+1):
        sezx.append((i-1)*KK)
        #sezx[i]=(i-1)*KK
        if LS==0:
            sezy.append(0)
            y=0
            #sezy[i]=0
            LS= 1
        else:
            sezy.append(HH)
            y=HH
            #sezy[i]=HH
            LS=0
        print("  ", i,"                 ",(i-1)*KK,"         ",y )
        rozpeti = KK*(i-1)
    print("  Rozpětí nosníku=",rozpeti)
    print("sezx:",sezx)
    print("sezy:",sezy)
    return sezx,sezy


def prut():
    sezP1=sezP1[1: pocetstycI1+1]
    sezP2=sezP2[1: pocetstycI1+1]
    fh=None
    fh=open(zat,"w",encoding="utf8")
    #    open"o",2,"zat"
    for i in range(1,pocetP+1):
        zacP1= int(input("  začátek prutu i...?  "))
        konP2= int(input("  konec prutu  j...?  "))
        plochaF= float(input("  průřezová plocha [cm^2] ?  "))
        fh.write("[{0.prvek_id}]\n"
                 "prvek={0.zacP1,konP2,plochaF}\n"
                 ".NARATIVE_END.")
#       print#2,P1,P2,F
        sezP1[i]= zacP1
        sezP2[i]= konP2
        sezF[i]= plochaF
        if abs(konP2-zacP1)>d1:
            d1 = abs(konP2-zacP1)
    d1=(d1+1)*2
    for i in range(1,(pocetstycI1+1)*2):
        for j in range(1,d1+1+1):
            matK = [[0 for i in range(1,pocetstyc*2+2)] for j in range(1,d1+1+1)]

    return sezP1,sezP2,sezF


def delka():
    sezx=sezx[1: pocetstycI1+1]
    sezy=sezy[1: pocetstycI1+1]
    delkaD= math.sqrt((sezx[konP2]-sezx[zacP1])^2 + (sezy[konP2]-sezy[zacP1])^2)
    A1 = (sezx[konP2] - sezx[zacP1])/delkaD
    A2 = (sezy[konP2] - sezy[zacP1])/delkaD
    plochaF=plochaF/10000
    return plochaF,delkaD,A1,A2




def posunuti():
    print("  Posunutí styčníků:")
    print("  Styčník:         x[mm]              y[mm]  ")
    for i in range(1,pocetstycI1+1):
        for j in range(d1+1+1):

            print("    ", i,"        ", matK[(i-1)*2 + 1, d1+1]*1000,"        ", matK[(i-1)*2 + 2,d1+1]*1000)

    return

def vazba():
    vazbaU=[[0 for i in range(1,pocetI3+1)] for j in range(1,4)]
    vazbaU=[]
    for i in range(1,pocetI3+1):
                  vazbaU.append([])
                  for j in range(1,3+1):
                         vazbaU[i].append(0)
    return vazbaU



def maticeA():

    sourx=sourx[1: pocetstycI1+1]
    soury=soury[1: pocetstycI1+1]
    plochaF=plochaF/10000
    delkaD=math.sqrt((sourx[konP2]-sourx[zacP1])^2 + (soury[konP2]-soury[zacP1])^2)
    A1 = (sourx[konP2]-sourx[zacP1])/delkaD
    A2 = (soury[konP2]-soury[zacP1])/delkaD
    matA = [[0 for i in range(1,5)] for j in range(1,5)]

    matA[1,1]= A1^2
    matA[1,2]=A1*A2
    matA[1,3]=-(A1^2)
    matA[1,4]=-A1*A2
    matA[2,1]=A1*A2
    matA[2,2]=A2^2
    matA[2,3]=-A1*A2
    matA[2,4]=-(A2^2)
    matA[3,1]=matA[1,3]
    matA[3,2]=-A1*A2
    matA[3,3]=A1^2
    matA[3,4]=A1*A2
    matA[4,1]=-A1*A2
    matA[4,2]=-(A2^2)
    matA[4,3]=A1*A2
    matA[4,4]=A2^2
    for i in range(1,5):
             for j in range(1,5):
                   matA[i,j]=modulE*plochaF/delkaD*matA[i,j]
                   for j in range(1,3):
                               for j1 in range(1,3):
                                     z1=(zacP1-1)*2+j
                                     y2=(zacP1-1)*2+j1
                               if y2>=z1:
                                     y2=y2-z1+1
                                     matK[z1,y2]= matK[z1,y2]+matA[j,j1]
                               else:
                                     z1=(konP2-1)*2+j
                                     y2=(konP2-1)*2+j1
                               if y2>=z1:
                                     y2=y2-z1+1
                                     matK[z1,y2]=matK[z1,y2]+matA[j+2,j1+2]
                               else:
                                     z1=(zacP1-1)*2+j
                                     y2=(konP2-1)*2+j1
                               if y2>=z1:
                                     y2=y2-z1+1
                                     matK[z1,y2]=matK[z1,y2]+matA[j,j1+2]
                               else:
                                     z1=(konP2-1)*2+j
                                     y2=(zacP1-1)*2+j1
                               if y2>=z1:
                                     y2=y2-z1+1
                                     matK[z1,y2]=matK[z1,y2]+matA[j+2,j1]
    return matA


def vyslednice():
                print("  VYSLEDNICE SIL VE STYCNIKU")
                print("  Styčník:        Rx[kN]               Ry[kN] ")
                for j in range(1,pocetstycI1+1):
                     silaR1=0
                     silaR2=0
                     silaR3=0
                     for i in range(1,pocetP+1):
                             if i <= (2*pocetstycI1):
                                   L=0
                                   H=0
                             else:
                                   L=2*pocetstycI1
                                   H=5
                             if j == matK[i-L,H+1] or j== matK[i-L,H+2]:
                                   break

                             elif  sezx[matK[i-L,H+1]] <= sezx[j] or sezx[matK[i-L,H+2]]<=sezx[j]:
                                   silaR1=silaR1-matK[i-L,H+5]*matK[i-L,H+3]
                             else:
                                   silaR1=silaR1+matK[i-L,H+5]*matK[i-L,H+3]
                             if sezy[matK[i-L,H+1]]<= sezy[j] or sezy[matK[i-L,H+2]]<= sezy[j]:
                                   silaR2=silaR2-matK[i-L,H+5]*matK[i-L,H+4]
                                   break
                             silaR2=silaR2+matK[i-L,H+5]*matK[i-L,H+4]
                             silaR3=silaR3+matK[i-L,H+6]*matK[i-L,H+5]
                     print("    ",j,"          ", silaR1,"             ",silaR2 )

                     return


def osove_sily():
                           fh=None
                           fh=open(zat,encoding="utf8")
# open"i",1,"zat"
                           for i in range(1,pocetP+1):


                                  #input#1,P1  ,P2 ,F
                                  if i <= 2*pocetstycI1:
                                          L=0
                                          H=0
                                  else:
                                          L=2*pocetstycI1
                                          H=5
                                  matK[i-L,H+1]= zacP1
                                  matK[i-L,H+2]= konP2
                                  delka()
                                  matK[i-L,H+3] = math.fabs(A1)
                                  matK[i-L,H+4] = math.fabs(A2)
                                  silaP0 = (matK[(konP2-1)*2+1,d1+1]-matK[(zacP1-1)*2+1,d1+1])*A1
                                  silaP0+=(matK[(konP2-1)*2+2,d1+1]-matK[(zacP1-1)*2+2,d1+1])*A2
                                  silaP0=silaP0 *(modulE*plochaF/delkaD)
                                  print("   ",i,"     ",zacP1,"    ",konP2,"      ",delkaD,"        ",plochaF*10000,"     ",silaP0)
                                  matK[i-L,H+5]= silaP0
                           return



def gauss():
                           Q=2*pocetstycI1
                           for i in range(1,Q+1):
                                  if matK[i,1]==0:
                                          matK[i,1]=1

                           for i in range(1,pocetI3+1):
                                    for j in range(2,3+1):
                                          if vazbaU[i,j]==0:
                                                 break
                                          else:
                                                 H=2*vazbaU[i,1]+j-3
                                          for k in range(2,d1+1):
                                                 matK[H,k]=0
                                                 if k<=H:
                                                        matK[H+1-k,k]=0
                                          matK[H,1]=1
                                          matK[H,d1+1]=0
                           for i in range(1,Q+1):
                                    matK[i,1]= 1/matK[i,1]
                                    f1=d1+1-(d1-1-Q+i)*(Q-i<d1-1)*-1
                                    for j in range(2,f1):
                                        a=matK[i,1]*matK[i,j]
                                        g=f1-j
                                        h=i+j-1
                                        for k in range(1,g+1):
                                            matK[h,k]=matK[h,k]-a*matK[i,j+k-1]

                                        matK[h,d1+1]=matK[h,d1+1]-a*matK[i,d1+1]
                                        matK[i,j] = a

                                    matK[i,d1+1]=matK[i,d1+1]*matK[i,1]

                           for i in range(Q-1,1+1,-1):      #zpětný krok
                                             f1=d1-(d1-1-Q+i)*(Q-i<=d1-1)*-1
                                             for j in range(2,f1+1):
                                                    matK[i,d1+1]=matK[i,d1+1]-matK[i+j-1,d1+1]*matK[i,j]

                           matK=[[ 0 for i in range(1,pocetstycI1*2+1)] for j in range(1,d1+1+1)]


                           return









#hlavní program main() module

modulE=float(input("  modul pružnosti E[kPa]  "))
pocetstycI1=int(input(  "  počet styčníků  "))
prihrnosnik = int(input(  "  Příhradový nosník ano=1 ne= 0  "))
P9=1
N2=0
sour="sour"
zat="zat"
pocetP= 2*pocetstycI1-3
if prihrnosnik == 1:
    print(  "   Příhradový nosník ")
    N1=0
else:
        N1=1
if N1== 0:

            print()
            fh=None
            fh=open(sour,"w",encoding="utf8")
#    open"o",3,"sour"
else:                  #N1=1

            print()
            fh=None
            fh=open(sour,encoding="utf8")
    #         open"i",3,"sour"
souradnice = int(input("  Automat. generování souřadnic? ano=1, ne=0  "))
if souradnice==1:
        sezx=[]
        sezy=[]
        sezx=sezx[1:pocetstycI1+1]
        sezy=sezy[1:pocetstycI1+1]
        gener_souradnic()

else:
    pass

if souradnice==0:

     for i in range(1,pocetstycI1+1):
          if N2==0:
                sezx=[]
                sezy=[]
                print("  Souřadnice styčníku:  ",i)
                sezx = float(input("  X[m] ?  "))
                sezy = float(input("  Y[m] ?  "))
                print("x[m]=",sezx,"y[m]=",sezy)
                fh.write( sezx)
                fh.write( sezy)
#               print#3,sezx(i),sezy(i)

          else:
                print()
                fh.readline(sezx)
                fh.readline(sezy)

#               input#3,x,y čtení z disku




print("  VYPOCET PRIHRADOVE ROVINNE KONSTRUKCE")
print("   Modul pružnosti E[MPa]=",modulE/1000)
print("   Počet styčníků = ",pocetstycI1, "  Počet prutů P =",pocetP)

if prihrnosnik== 1:
    print("      P ř í h r a d o v ý    n o s n í k")

print("  Styčník:      x[m]              y[m]")
#sezx=gener_souradnic(sezx)
#sezy=gener_souradnic(sezy)
print(sezx)
print(sezy)
for i in range(1,pocetstycI1+1):
     pass
#    print ("    ", i,"         ", sezx[i],"          ", sezy[i])
if prihrnosnik==1:
        gener_cislovani()
        fh=None
        fh=open(zat,encoding="utf8")
        #open"i",2,"zat" čtení dat
if prihrnosnik== 0:
         prut()
if N1==0 or N2==0:
    print("  Prut číslo:    i .......... j        průřez A[cm^2]")
    fh=None
    fh=open(zat,encoding="utf8")

    #open"i",2,"zat" čtení dat
    sezP1=[]
    sezP2=[]
    sezF=[]
    sezP1=sezP1[1: pocetP+1]
    sezP2=sezP2[1: pocetP+1]
    sezF= sezF[1: pocetP+1]
for k in range(1,pocetP+1):
     zacP1=str(zacP1)
     konP2=str(konP2)
     plochaF= float(plochaF)
     fh.readline(zacP1)
     fh.readline(konP2)
     fh,readline(plochaF)

     #input#2,P1,P2,F čtení dat
     #sezP1[k]=zacP1
     #sezP2[k]=konP2
     #sezF[k]= plochaF
     if P9==0:
          print("     ", k,"        ", zacP1,"        ", konP2,"        ", plochaF)

          delkaD=math.sqrt((sezx[konP2]-sezx[zacP1])^2+(sezy[konP2]-sezy[zacP1])^2)
          A1=(sezx[konP2]-sezx[zacP1])/delkaD
          A2=(sezy[konP2]-sezy[zacP1])/delkaD
          plochaF=sezF[k]/10000

          maticeK(delkaD,A1,A2,plochaF)

if N1==0:
        pass
        print()
elif P9==1:
        pass
        print()
pocetI3 = int(input("  Počet uložených styčníků ?  "))
vazba()
print("  Počet uložených styčníků=",pocetI3)

print("  Styčník:     posun X:        posun Y: ")
for i in range(1,pocetI3+1):
        stycnik= int(input("  Styčník číslo?  "))
        vazbaU[i,1]= stycnik
        posunx= int(input("  posun X[pevný=1,posuvný=0]?  "))
        posuny= int(input("  posun Y[pevný=1,posuvný=0]?  "))
        vazbaU[i,2]=posunx
        vazbaU[i,3]=posuny
        print("     ", i,"          ", posunx,"         ", posuny)
pocetI4= int(input("  Počet zatížených styčníků ?  "))
print("  Zatěžovací stav číslo:",P9)
for i in range(1,(pocetstycI1+1)*2):
    matK=[[0 for i in range(1,pocetstycI1*2+2)] for j in range(1,d1+1+1)]
    #matK(i,d1+1)=0

print("  Počet zatížených styčníků = ",pocetI4)
print("  Styčník číslo:         Px[kN]         Py[kN]")
#sezcx=list(range(1,pocetI4+1))
#sezPx=list(range(1,pocetI4+1))
#sezPy=list(range(1,pocetI4+1))
for i in range(1,pocetI4+1):
    stycC1 = int(input("  číslo styčníku ?  "))
    silaxC2 = float(input("  osamělá síla Px[kN] ?  "))
    silayC3 = float(input("  osamělá síla Py[kN] ?  "))
    sezcx[i] = stycC1
    sezPx[i] = silaxC2
    sezPy[i] = silayC3
    matK[(stycC1-1)*2+1,d1+1]= silaxC2
    matK[(stycC1-1)*2+2,d1+1]= silayC3
    print("    ",stycC1,"       ",silaxC2,"       ",silayC3)
gauss()
print("  V Y S L E D K Y    V Y P O C T U: ")
print("  PRUT  i........j   délka L[m]   průřez A[cm^2]  Osová  síla [kN]")
osove_sily()
posunuti()
vyslednice()
print("  Uložení konstrukce:")
print("  Styčník:    U(x)=1     U(y)=1")
for i in range(1,pocetI3+1):
    print("   ",vazbaU[i,1])
    if vazbaU[i,2]==1:
        print("              *")
    elif vazbaU[i,3]==1:
        print("                         *")
P9=P9+1

print("   K O N E C   ")
Nahoru Odpovědět
2.6.2017 13:40
statik
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
gcx11:2.6.2017 14:19

Proměnnou, kterou můžeš používat všude si musíš definovat na začátku programu jako global

global nejaka_promenna

Na dvourozměrou matici složenou z pole polí se přistupuje takto:

matice[i][j]

samozřejmě na těch indexech musí něco být, jinak to vyhodí výjimku.

Na práci s maticemi máš dvě možnosti:

  1. Napsat si to sám (jednou jsem musel takto počítat lineární a kvadratickou regresi)
  2. Použít knihovnu numpy, kde už to je naprogramované
import numpy as np
A = np.zeros((3, 3), dtype=int)
A[0, 0] = 1
A[1, 1] = 1
A[2, 2] = 1
A.dot(A) # zase jednotková matice po vynásobení

https://docs.scipy.org/…ckstart.html

A pokud budeš něco z toho používat, tak doporučuji si to vyzkoušet někde vedle, ať víš, jak to funguje.

 
Nahoru Odpovědět
2.6.2017 14:19
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na gcx11
Jaroslav Trojan:2.6.2017 14:59

Výborně, moc ti děkuji !

Nahoru Odpovědět
2.6.2017 14:59
statik
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:4.6.2017 8:10

Ahoj,
nemohu přijít na to, proč se nevytvoří celé seznamy sezx, sezy ze všech 5 souřadnic, ale jen
poslední dvojice 4 , 1. Příkazy sezx.append(sex) a sezy.append(sey) běží v cyklu od 1 do 5.
A ještě se to nezapíše do souboru: sour
Není mi to jasné , blíže v příloze.

Nahoru Odpovědět
4.6.2017 8:10
statik
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:4.6.2017 9:14

Mám seznamy : sezP1,sezP2 naplněné ve funkci prut() , jsou to proměnné global, ale do hlavního programu se seznamy nepřenesly. Tam jsou plné nul. Je to možné?
A ještě něco: načítám prvky seznamu příkazem fh.read(prvek) a nic se nenačte.

Nahoru Odpovědět
4.6.2017 9:14
statik
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
gcx11:4.6.2017 13:20

Omlouvám se, co jsem to teď zkoušel, tak global se musí použít na začátku těch funkcí, kde se do nich něco přiřazuje, aby to nebralo jako novou lokální proměnnou.

#!/usr/bin/env python3

def modify_list():
    global my_list
    my_list = []
    for i in range(10):
        my_list.append(i)


def print_list():
    for item in my_list:
        print(item)

modify_list()
print_list()

A k tomu fh.read(prvek), po řádka se čte takto:

prvek = fh.readline()

A úplně nejlepší varianta je takto:

with open("file.txt", "r", "utf-8") as fh:
      for line in fh:
           prvek = line.strip('\n')
           # zde se udělá něco s prvkem
 
Nahoru Odpovědět
4.6.2017 13:20
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na gcx11
Jaroslav Trojan:4.6.2017 14:46

Promiň, asi jsi přehlédl můj dotaz o jeden výše, kde je příloha. Problém je v tom, že se nevytvoří celý seznam, ale jen jeho poslední prvek.
Nemohu zjistit v čem to vězí.
Díky za tvoje rady.

Nahoru Odpovědět
4.6.2017 14:46
statik
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
gcx11:4.6.2017 14:58

Protože si ho pokaždé v tom cyklu nastavíš na prázdný, takže tam zbyde akorát prvek z poslední iterace.

Řešení je dát to

sezx = []
sezy = []

před ten cyklus.

 
Nahoru Odpovědět
4.6.2017 14:58
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na gcx11
Jaroslav Trojan:4.6.2017 15:06

Ahoj, no tak to jsem tedy přehlédl, promiň prosím.
Velice děkuji.

Nahoru Odpovědět
4.6.2017 15:06
statik
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:4.6.2017 15:54

Chci zapisovat data po řádcích prostřednictvím writeline . Jakého typu musí být zapisovaný objekt. Použil jsem typ int a vyhodilo to chybu:
objekt nemá atribut writeline.

Nahoru Odpovědět
4.6.2017 15:54
statik
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
gcx11:4.6.2017 16:02

Protože zapsání řádku je to samé jako zapsat něco + newline. Samozřejmě musí být soubor otevřen správně pro čtení.

with open("file.txt", "r", "utf-8") as f:
        f.write('Text radku' + '\n')
Editováno 4.6.2017 16:03
 
Nahoru Odpovědět
4.6.2017 16:02
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na gcx11
Jaroslav Trojan:4.6.2017 20:02

Ahoj, pomohl jsi mi, děkuji.

Nahoru Odpovědět
4.6.2017 20:02
statik
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:7.6.2017 7:06

Sestavuji matici matA(4x4) a z té potom větší matici matK(10x7) jak je vidět z kódu. Proč mi Python vyhodí chybu, že jsou indexy mimo rozsah, když je na příloze vidět, že indexy obou polí(matic) jsou uvnitř : u matA indexy 2,3,4 a u matK indexy řádků 7,8, a indexy sloupců 2,3,4. Stane se to až při poslední iteraci a to až posledního pátého prvku , označeného čísly uzlu zacP1=4 a konP2=5, viz příloha. Tak to mi není jasné proč. Všechny předchozí cykly proběhly jak měly v pořádku.
Díky!

Nahoru Odpovědět
7.6.2017 7:06
statik
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
gcx11:7.6.2017 14:00

Podle mě v tom máš chyby minimálně z toho, že indexuješ ty matice od jedné a ne od nuly.

import numpy as np
A = np.zeros((3, 3), dtype=int) # matice 3x3
for i in range(3): #řádek
     for j in range(3): #sloupec
          A[i][j] = 3*i+j
print(A)
# vypíše
array([[0, 1, 2],
           [3, 4, 5]
           [6, 7, 8]])
Editováno 7.6.2017 14:00
 
Nahoru Odpovědět
7.6.2017 14:00
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na gcx11
Jaroslav Trojan:7.6.2017 15:07

Zkoušel jsem import numpy,ale ohlásil chybu, že nezná jméno numpy

Nahoru Odpovědět
7.6.2017 15:07
statik
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
gcx11:7.6.2017 18:21

Protože je to knihovna, která se musí doinstalovat. Otevřeš příkazový řádek (cmd.exe) a tam zadáš:

pip install numpy

Pokud máš dobře nainstalovaný Python (tj. můžeš z příkazové řádky použít příkaz pip), tak by se měla knihovna sama doinstalovat.

 
Nahoru Odpovědět
7.6.2017 18:21
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na gcx11
Jaroslav Trojan:10.6.2017 8:52

Ačkoliv mám indexy matice matK od nuly, stejně došlo k přetečení indexu mimo rozsah. Neumím si to vysvětlit , protože rozměry matice K jsou dostatečné ----- 10+1 řádek, 7+1 sloupců, matice je definována jako 11x8 .
Děkuji .
ostatně je to vidět v příloze

Nahoru Odpovědět
10.6.2017 8:52
statik
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
gcx11:10.6.2017 14:56

A máš jistotu, že ty proměnné použité v range jsou menší nebo rovny daným rozměrům?

 
Nahoru Odpovědět
10.6.2017 14:56
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 50 zpráv z 70.