Presne tak, takze ve skutecnosti by se cyklus mel zapsal takhle:
DO i = 1,42
c(i) = a(i) + b(i)
END DO
Nicmene. Prave diky masivni podpore parallenich vypoctu na Cray se uz v 80-tych letech zacala postupne do Fortranu pridavat podpora primo pro vektorove operace. Diky tomu by uz dnes nikoho ani nenapadlo to takhle psat a pouzil by se stejnym vyznamem jednoduse
c = a + b.
Pokud by se ovsem chtel omezit jen na kladne cisla pak by pouzil konstrukci where (neco jako if pro vektory) opet se stejnym vyznamem:
where( b > 0) c = a end where
Zavedeni vektorovych operaci do jazyka ma ovsem i dalsi prijemne vyhody. Napriklad preindexovaniho jednoho vektoru jinym s celocislenymi prvky
c = a(b).
Nadherne tak vidime, jak pokrok technologie zcela od zakladu zmenil rysy jazyka a predevsim mysleni programatoru. Musime si uvedomit, ze tyhle vektorove operace vlaste vetsina ostatnicj jazyku stale nepodporuje a prekladace musi neustale „lustit“ kod a hadat pripadnou vektorizaci a pravdepodobne tak nevyuziji hardware naplno.
** mel mozna i Basic nebo Simula :))
Ale je pravda (aspon tedy v Matlabu), ze lze umocnovat i matice a ze lze umocnovat i na jine nez cele cislo (napr. komplexni).
Jeste k prikladu:
where( b > 0) c = a end where
Fortran neznam, ale ze znalosti Matlabu tipuju, ze spravnejsi melo byt (?):
where( b > 0) c(i) = a(i) end where
A jeste v Matlabu jde neco jako:
c = a(b>0)
Vektor „c“ bude obsahovat pouze ty prvky z „a“, kde na stejne pozici v „b“ je kladne cislo. V puvodnim prikladu predpokladam, ze by „c“ byl stejne velky jako „a“, akorat na nekterych mistech by byly nuly?