További vektor, mátrix algoritmusok

Slides:



Advertisements
Hasonló előadás
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
Advertisements

LEgyméretű tömbök, vektorok Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA I. dr.Dudás László 17./0. lVektorok definiálása lVektorok definiálása kezdőértékekkel.
Típusok, változók, konstansok
Kifejezések, operandusok, operátorok
LFüggvények Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 20./0. lFüggvények deklarációja és prototípusa lA függvénydefiníció lHivatkozás.
LRendezés minimális elem kiválasztással Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 19./0. lAz algoritmus működése lRávezető feladat.
Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke A programozás alapjai 1. (VIEEA100) 9. előadás.
Analitikus (koordináta) geometriai gyorstalpaló
Programozási alapismeretek 10. előadás
Programozási alapismeretek 8. előadás. ELTE 2/  További programozási tételek További programozási tételek 
Dinamikus tömbök.
Sztringek.
Programozás Alapjai (2008)
6. előadás (2005. április 5.) Struktúrák Úniók Új adattípus definíálása Dinamikus memória foglalás 1.
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
Borland C/C++ mintapéldák
Borland C/C++ mintapéldák tömbökre
Borland C/C++ mintapéldák függvényekre. 1. példa Írjunk olyan függvényt amely egy számot kiirat.
Borland C/C++ mintapéldák fájlokra. 1. példa Írjon olyan programot,amely megnyit egy hw.txt fájlt és írja bele a Hello világ szöveget. Ez után zárja le.
Egydimenziós tömbök. Deklarálás: var valtozónév:array[kezdőérték..végsőérték]of típus; type típusnév = array [kezdőérték..végsőérték] of típus; var valtozónév:
Borland C/C++ mintapéldák mutatókra
Gombkötő Attila Lineáris egyenlet.
Készítette: Pető László
Microsoft Excel 2010 Gyakoriság.
Programozás I. Horváth Ernő 1. Elérhetőségek Bauer Péter Horváth Ernő Tanszéki honlap
Programozás I. Horváth Ernő 1. Elérhetőségek Bauer Péter Horváth Ernő Tanszéki honlap
Programozás I. Horváth Ernő 1. Elérhetőségek Bauer Péter Horváth Ernő Tanszéki honlap
Programozás I. Horváth Ernő.
A C++ programozási nyelvSoós Sándor 1/14 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
LDinamikus tömbök, kétdimenziós tömbök Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./0. lVektorok létrehozása futásidőben, dinamikusan.
Utasítások, elágazás- és ciklusszervezés C nyelvi utasítások
Tömbök Csernoch Mária.
Megszámlálás, kiválasztás alapalgoritmusok
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
A négyzetes mátrixok (nxn-es kétdimenziós tömbök)
TÖMBÖK Asszociatív adatszerkezetek Tömbök
Tömbök és programozási tételek
Készítette: Csíki Gyula
AAO Csink László november.
1 AAO folytatás ++ Csink László. 2 Rekurzív bináris keresés (rendezett tömbben) public static int binker(int[] tomb, int value, int low, int high) public.
Nevezetes algoritmusok
Objektum orientált programozás
Programozás I. Típus algoritmusok
Programozási alapismeretek 8. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/  További programozási.
Programozási alapismeretek 10. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 10.2/  Kiválogatás + összegzés.
© Tóth Ákos, Óbudai Egyetem, 2010
Programtervezés, programozás I. 2.5 tömbök,stringek
Struktúrák a C nyelvben 1 Akkor használjuk, ha az egy egyedre jellemző különböző típusú adatokat együtt akarjuk tárolni. Lényegében típusdeklaráció. A.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
LA C++ programozási nyelv Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 16./0. lA világ objektum alapú szemlélete lSzoftverfejlesztési.
LA C++ programozási nyelv Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 19./0. lRokonok, barátok lÚj műveletek hozzárendelése az.
A C++ programozási nyelv
a programegységek között
Nevezetes algoritmusok
A C++ programozási nyelv
Tömbök és programozási tételek
Mediánok és rendezett minták
Eljaras linearis_kereses(adatok[],n)
Informatikai gyakorlatok 11. évfolyam
A struct, az union és az enum típus
Könyvtári függvények I. Input / output kezelés függvényei
További rendező és kereső algoritmusok
3. osztályban.
Utasítások, elágazás- és ciklusszervezés C nyelvi utasítások
Konverziós operátorok
Programozási tételek.
Típusok, változók, konstansok
Függvénysablonok használata
Előadás másolata:

További vektor, mátrix algoritmusok Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 22./0. További vektor, mátrix algoritmusok Egyindexes tömbökön értelmezett 5. alap-algoritmus: Osztályokba sorolás Mintaprogram Mátrix szorzása mátrixszal függvényben A címszerinti és az értékszerinti adatátadás összehasonlítása

 Megszámlálás {hány adott tulajdonságú elem van?} Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 22./1. Egyindexes tömbökön értelmezett alap-algoritmusok: [dr.Salánki József nyomán]  Összegezés  Megszámlálás {hány adott tulajdonságú elem van?}  Kiválogatás {nem a darabszám, az index érdekel}  Rendezés Osztályokba sorolás Pl.: main() { float vektor[ ] = {1.2, 2.3, 3.4, 4.5} ; float szumma = 0 ; int k, elemszam; elemszam = sizeof (vektor) / sizeof (vektor [0]); for ( k = 0 ; k < elemszam; k++) szumma += vektor [ k ]; printf("Szumma= %f", szumma); } Pl.: main() { float vektor[ ] = {1.2, 2.3, 3.4, 4.5} ; float szumma = 0 ; int k, elemszam; elemszam = sizeof (vektor) / sizeof (vektor [0]); for ( k = 0 ; k < elemszam; k++) szumma += vektor [ k ]; printf("Szumma= %f", szumma); } Pl.: main() { float vektor[ ] = {1.2, 2.3, 3.4, 4.5} ; float szumma = 0 ; int k, elemszam; elemszam = sizeof (vektor) / sizeof (vektor [0]); for ( k = 0 ; k < elemszam; k++) szumma += vektor [ k ]; printf("Szumma= %f", szumma); }

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 22 /2. Osztályokba sorolás Feladat: Meg kell számlálni, hogy egy vektor elemei közül egy adott tulajdonságsorozat egyes tulajdonságainak hányan felelnek meg. Pl.: Mérési eredmények ábrázolása oszlopdiagrammal. Adott egy mérési sorozat eredménye egy n elemű valós vektorban. Készítsünk programot, mely adott alsó és felső határok és az ezek közötti osztályok számának ismeretében meghatározza, hogy az egyes osztályokba hány mérési eredmény esik! Osztályhatárra eső értéket soroljuk a nagyobb értékeket tartalmazó szomszédos osztályba. Számláljuk meg az alsó határ alatti és a felső határtól nem kisebb értékeket is!

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 22 /3. Osztályokba sorolás ..

#include <conio.h> #include <stdio.h> Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 22 /4. #include <conio.h> #include <stdio.h> #include <math.h> #define N 20 // mérési eredmények száma #define OSZ 7 // osztályok száma float ertekek[ N ]; unsigned int db[OSZ + 2]; // darabszámok vektora float min, max; unsigned int i; // Itt következik a függvénydefiníció: unsigned int index(float x, float xmin, float xmax,                                       unsigned int oszt_szama) { float oszt_szelesseg; oszt_szelesseg = (xmax - xmin) / oszt_szama; if (x < xmin) return 0; else if (x >= xmax) return oszt_szama + 1; else return ((unsigned int) floor((x - xmin) / oszt_szelesseg)) +1; }

void main() // Itt következik a főfüggvény: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 22 /5. void main() // Itt következik a főfüggvény: { clrscr(); puts("Osztályokba sorolás\n"); puts("Mérési eredmények beolvasása:"); for (i = 0; i < N; i++) { printf("A %u. eredmény= ",i+1); scanf("%f",&ertekek[i]); } puts("\nÉrtékhatárok megadása:"); printf("Alsó határ= "); scanf("%f",&min); printf("Felső határ= "); scanf("%f",&max); for (i =0; i <= OSZ+1; i++) db[ i ] = 0; // Osztályokba sorolás for (i = 0; i < N; i++) ++db[index(ertekek[ i ], min, max, OSZ)]; puts("\nDarabszámok kiíratása:"); for ( i = 0; i <= OSZ+1; i++) printf("A %u. osztályba %u érték esik.\n", i, db[ i ]); getch(); } // Határokon számábrázolási korlátok miatt nem mindig pontos

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 22 /6. Megjegyzés: A floor( ) függvény a valós argumentumértéket a legközelebbi kisebb, vagy egyenlő egészre csonkítja. Pl. : floor(6.25) értéke 6.0 lesz, floor(27.0) értéke 27.0 lesz, floor(-42.28) értéke –43.0 lesz.

Mátrix szorzása mátrixszal függvényben Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 22 /7. Mátrix szorzása mátrixszal függvényben

#include <stdio.h> #include <conio.h> Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 22 /8. /* Mátrixszorzás */ #include <stdio.h> #include <conio.h> #include <stdlib.h> // randomize(), random() miatt #define M 5 #define N 4 #define P 3 float M1[M][N]; float M2[N][P]; float M1x2[M][P]; //A függvény deklarációja: void mszorzas(int mm, int nn, int pp, float M1p[][N],                                     float M2p[][P], float M1x2p[][P]); Megj.: M2p[j][k] elem elérése: *((float*)M2p+(j*3)+k) látható, hogy szükség van az egy sorban levő elemek számát megadó P==3 értékre is. Az első index megadható, de a fordító nem használja. float M2p[ ][P] jelent egy float** M2p mutatót és egy float* M2p[ ] mutatóvektort is, melynek elemei által mutatott vektorelemek mérete P*sizeof(float). P hiányában az M2p[j][k] == *(M2p[j] + k)==*(*(M2p+j)+k) elem nem érhető el pointeraritmetikával, azaz sorméretnyi (és elemméretnyi) léptetésekkel.

clrscr(); randomize(); for (k = 0; k < M; k++) Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 22 /9. void main() { int k, l ; clrscr(); randomize(); for (k = 0; k < M; k++) for (l = 0; l < N; l++) M1[k][ l ] = random(15); for (k = 0; k < N; k++) for (l = 0; l < P; l++) M2[k][ l ] = random(15); mszorzas(M,N,P,M1,M2,M1x2); // Kihasználtuk, hogy a tömb neve egy mutatókonstans for (l = 0; l < P; l++) printf("M1x2[%u,%u]= %8.2f\n",k,l,M1x2 [k][ l ]); getch(); }

//A függvény definiálása: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 22/10. //A függvény definiálása: void mszorzas(int mm, int nn, int pp, float M1p[ ][N], float M2p[ ][P], float M1x2p[ ][P]) { int i,j,k; for (i = 0; i < mm; i++) for (k = 0; k < pp; k++) for ( M1x2p[ i ][ k ] = 0, j = 0; j < nn; j++) M1x2p[ i ][ k ] += M1p[ i ][ j ] * M2p[ j ][ k ]; }

A címszerinti és az értékszerinti adatátadás összehasonlítása Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 22 /11. A címszerinti és az értékszerinti adatátadás összehasonlítása A címszerinti átadás (& operátorral) szükséges, ha a függvény a paraméterén keresztül értéket ad vissza a meghívó programkörnyezetnek, előnyös, ha nagyméretű az adat, pl. többdimenziós nagy tömböknél, mert nem kell az értékeket átmásolni, előnytelen, ha a paraméter csak bemenő paraméter, mert nem adhatunk meg kifejezést aktuális értékként, csak változót. Az értékszerinti átadás előnyös, ha a bemenő paraméter helyén aktuális paraméterként kifejezést is szeretnénk megadni, előnytelen, ha csak bemenő paraméterként nagyméretű adat átadására használjuk,(pl. struct) hibás, ha aktuális paraméterként változót megadva abban érték visszaadására számítunk.

#include <stdio.h> #include <conio.h> Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 22 /12. Példa: /* Ertékadás */ #include <stdio.h> #include <conio.h> float elhossz, terulet; void jo(float elhossz, float* teruletp) { *teruletp = elhossz * elhossz; } void elonytelen(float* elhosszp, float* teruletp) { *teruletp = *elhosszp * *elhosszp; } void hibas(float elhossz, float terulet) { terulet = elhossz * elhossz; }

printf("Terület= %f\n",terulet); elhossz = 6.9 + 4.1; Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 22 /13. void main() { clrscr(); jo( 4.7+7.3, &terulet ); printf("Terület= %f\n",terulet); elhossz = 6.9 + 4.1; elonytelen( &elhossz, &terulet ); hibas( 4.8+0.2, terulet ); printf("Terület= %f ?? nem 25 ?\n",terulet); getch(); }