6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Hasonló dokumentumok
Programozás alapjai 9.Gy: Struktúra 2.

10. gyakorlat Tömb, mint függvény argumentum

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Adatbázis rendszerek Gy: Algoritmusok C-ben

Programozás alapjai 5. gyakorlat Vezérlési szerkezetek egymásba ágyazása

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Programozás alapjai 3.Gy: C elágazások, ciklusok P R O

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Programozási segédlet

7/8. gyakorlat Karaktertömbök és sztringkezelés

Megoldott programozási feladatok standard C-ben

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Megoldott programozási feladatok standard C-ben

8. gyakorlat Pointerek, dinamikus memóriakezelés

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Felvételi tematika INFORMATIKA

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Programozás alapjai 8.Gy: Program struktúra

Programozás I gyakorlat. 10. Stringek, mutatók

PROGRAMOZÁSI TÉTELEK

INFORMATIKA javítókulcs 2016

Programozás 6. Dr. Iványi Péter

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Programozás I. gyakorlat

/* Az iter függvény meghívása és a visszatérő érték átadása a gyok változóba */ gyok = iter( n, a, e ) ;

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok

Programozási tételek. Dr. Iványi Péter

OOP: Java 1.Gy: Java alapok

Objektum Orientált Programozás VII.

Programozás alapjai 2.Gy: A C nyelv alapjai P R O

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Maximum kiválasztás tömbben

INFORMATIKA tétel 2019

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

értékel függvény: rátermettségi függvény (tness function)

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

BME MOGI Gépészeti informatika 5.

Programozás C nyelven (9. ELŐADÁS) Sapientia EMTE

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union

INFORMATIKA tétel 2017

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

INFORMATIKA tétel 2018

1. Alapok. Programozás II

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

1. Írjunk programot mely beolvas két számot és ellenőrzi hogy mindkét szám zérus-e:

Egyszerű programozási tételek

Struktúrák (struct) A struktúra szerkezetét meghatározó deklaráció általános formája:

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

Programozás alapjai. 5. előadás

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Vezérlési szerkezetek. Szelekció Ciklusok

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Összetett programozási tételek

Algoritmusok pszeudókód... 1

1. Jelölje meg az összes igaz állítást a következők közül!

Térinformatikai algoritmusok Elemi algoritmusok

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Tartalomjegyzék Algoritmusok - pszeudókód

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

main int main(int argc, char* argv[]) { return 0; } main return 0; (int argc, char* argv[]) main int int int main main main

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

Algoritmusok pszeudókód... 1

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás

Rekurzív algoritmusok

7. gyakorlat Sorozatok, Fájlkezelés

Objektumorientált Programozás VI.

Térinformatikai algoritmusok Elemi algoritmusok

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

PROGRAMOZÁS ALAPJAI (ANSI C NYELVEN)

Vezérlési szerkezetek

C változók. Feladat: Deklaralj egy valos, egy karakter es ket egesz tipusu valtozot! int main() {

10. gyakorlat. Pointerek Tárolási osztályok

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Informatika terméktervezőknek

Programozási módszertan. Mohó algoritmusok

Mintavételes szabályozás mikrovezérlő segítségével

2015, Diszkrét matematika

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Programozási Nyelvek: C++

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

Algoritmusok és adatszerkezetek gyakorlat 07

Példatár a Programozás 1 tárgyhoz

2018, Funkcionális programozás

Információs Technológia

Átírás:

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok 1. feladat: Az EURO árfolyamát egy negyedéven keresztül hetente nyilvántartjuk (HUF / EUR). Írjon C programokat az alábbi kérdések megválaszolására. 1a) Hányszor volt a negyedévben 300 Ft alatt az árfolyam értéke? Alkalmazzon ellenőrzött adatbeolvasást. 1b) Monoton nőtt-e az árfolyam a negyedév során? A válasz kiírását feltételes operátorral valósítsa meg. A feladat megoldása során alkalmazzon először tömb inicializálást, majd ellenőrzött adatbeolvasást. 1c) Melyik héten volt a legmagasabb, és melyiken a legalacsonyabb az árfolyam? Melyek voltak ezek a szélsőértékek? 1d) Mennyi az adott negyedévre vonatkozó átlagos árfolyam érték? Előjelhelyesen írja ki, hogy az egyes adatok mennyivel térnek el az átlagtól. Ezt a feladatot pointer használatával is oldja meg. 1a) Hányszor volt a negyedévben 300 Ft alatt az árfolyam értéke? A tömböt inicializálja. int i, db=0; /* Tömb létrehozása inicializációs listával */ double tomb[ ] = {289.5, 292.6, 290.2, 295.5, 300.4, 300.3, 302.5, 303.3, 303.5, 299.9; double limit=300.0; for (i=0; i<sizeof(tomb); i+=1) { printf("%d. érték: ", i+1, tomb[i]); /* Feltételt kielégítő elemek megszámlálása */ if (tomb[i] < limit) db++; printf("az árfolyam értéke %d-szer volt %.2f alatt.", db, limit); 1b) Monoton nőtt-e az árfolyam a negyedév során? A válasz kiírását feltételes operátorral valósítsa meg. Ellenőrzött adatbeolvasással. int i, monoton=1; double tomb[n]; //Feltesszük, h. monoton növő a sorozat /* Tömbelemek ellenőrzött beolvasása */ do { printf("%d. érték: ", i+1); if (scanf("%lf", &tomb[i])!=1) printf("hibás adat. Adja meg újra:\n"); while ((c = getchar())!= '\n');

/* Monotonitás vizsgálat */ if (i!=0 && tomb[i] < tomb[i-1]) monoton=0; printf("a sorozat monoton növő: %s", monoton?"igaz":"hamis"); 1c) Melyik héten volt a legmagasabb, és melyiken a legalacsonyabb az árfolyam? Melyek voltak ezek a szélsőértékek? int i, minindex=0, maxindex=0; double tomb[n], min, max; /* Tömbelemek ellenőrzött beolvasása */ do { printf("%d. érték: ", i+1); if (scanf("%lf", &tomb[i])!=1) printf("hibás adat. Adja meg újra:\n"); while ((c = getchar())!= '\n'); /* Minimum kiválasztás */ min=tomb[0]; for(i=0; i<n; i++) if(tomb[i]<min) { min=tomb[i]; minindex=i; printf("\na sorozat legkisebb eleme: %lf, sorszáma: %d", tomb[minindex], minindex+1); /* Maximum kiválasztás */ max=tomb[0]; for(i=0; i<n; i++) if(tomb[i]>max) { max=tomb[i]; maxindex=i; printf("\na sorozat legnagyobb eleme: %lf, sorszáma: %d", tomb[maxindex], maxindex+1); Megjegyzés: a sorozatból a legnagyobb és legkisebb elem kiválasztása megvalósítható egy cikluson belül. 1d) Mennyi az adott negyedévre vonatkozó átlagos árfolyam érték? Előjelhelyesen írja ki, hogy az egyes adatok mennyivel térnek el az átlagtól. Ezt a feladatot pointer használatával is oldja meg. A tömböt véletlenszámokkal töltse fel.

#include <stdlib.h> //srand(), rand() #include <time.h> //time() int i; double tomb[n], *p, atlag=0.0; /* Tömb feltöltése véletlenszámokkal */ srand(time(0)); tomb[i]=rand()%31+280; /* alsóhatár: 280 ; felsőhatár: 311 */ /* Tömbelemek összegzése */ atlag += tomb[i]; /* Átlag kiszámítása */ atlag /= N; printf("\naz atlag: %.2f\n", atlag); /* Tömbelemek átlagtól való eltérésének kiírása */ for (i=0; i<n; i++) printf("%d. \t %.2f \t %.2f\n", i+1, tomb[i], tomb[i]-atlag); Tömbelemek átlagtól való eltérésének kiírása mutató használatával 1. verzió: // A p pointer mindvégig a tömb első elemére mutat; i a ciklusváltozó. for (p=tomb, i=0; i<n; i++) printf("%d. \t %.2f \t %.2f\n", i+1, *(p+i), p[i]-atlag); 2. verzió: // A p pointer mindig a tömb feldolgozás alatt álló elemére mutat; // az i sorszám csak a kiíratáshoz kell. for (p=tomb, i=0; p<=&tomb[n-1]; i++, p++) printf("%d. \t %.2f \t %.2f\n", i+1, *p, (*p)-atlag); 2. feladat: -1000 és 1000 közé eső véletlenszámokkal töltsön fel egy 20 elemű integer tömböt, majd végezze el az alábbi feladatokat: 2a) Válogassa szét a tömb elemeit pozitív és negatív számokra. // Tömbelemek szétválogatása p_i = n_i = 0; if (tomb[i]>=0) { poz_tomb[p_i] = tomb[i]; p_i++; else { neg_tomb[n_i] = tomb[i]; n_i++; // A pozitív, ill. negatív tömb indexe

2b) Rendezze mindkét részhalmazt. Az egyiket a standard qsort() függvény használatával, a másikra implementálja a minimum/maximum kiválasztásos rendező eljárást. // Pozitív tömb rendezése, qsort() qsort(poz_tomb, p_i, sizeof(int), cmpfunc); A cmpfunc() összehasonlító függvény, ami a rendezés irányát határozza meg. A main függvény előtt kell elhelyezni. Az a és b felcserélésével a rendezés iránya megfordul. int cmpfunc (const void * a, const void * b) { return ( *(int*)a - *(int*)b ); // Negatív tömb rendezése, minimum kiválasztással int min = 0, minindex = 0; for (i=0; i<n_i-1; i++) { //n_i a negatív tömb elemszáma minindex = i; min = neg_tomb[i]; for (j=i+1; j<n_i; j++) { if (neg_tomb[j] < min) { min = neg_tomb[j]; minindex = j; //Helycsere, ha szükséges if (neg_tomb[i]!=min) { neg_tomb[minindex] = neg_tomb[i]; neg_tomb[i] = min; 2c) Eleme-e a rendezett pozitív tömbnek az 500? Használja a C standard bsearch() függvényét. // Keresés, bsearch() int searchkey; // keresett elem int *item; // megtalált elemre mutató pointer printf("\n\nadd meg a keresett pozitív számot: "); scanf("%d", &searchkey); // bináris kereséshez ugyanaz az összehasonlító függvény, mint a rendezéshez // p_i a pozitív tömb mérete item = (int*)bsearch (&searchkey, poz_tomb, p_i, sizeof (int), cmpfunc); if( item!= NULL ) { printf("megtaláltam: %d\n", *item); else { printf("\n\n%d nincs a pozitív számok között\n", searchkey);

Házi feladat: 1. Az első feladathoz készítsen olyan kiírást, amelyben az első adatot követően a többi listaelem a megelőzőhöz képest számított relatív érték. Például: 301.1, 2.3, -0.4, 0.6, -0.2, stb. Használja fel ezt a listát a monotonitás vizsgálathoz. 2. A második feladathoz implementálja a logaritmikus keresés algoritmusát, és a megtalált elem sorszámát adja vissza. 3. Írjon C programot az ötöslottó számainak véletlenszerű előállítására. Ügyeljen, hogy ne ismétlődjenek a számok! 4. Az egyetemi hallgatóknak félévente 6 vizsgájuk van. Félév végén az elért tanulmányi átlag alapján ki szeretnénk számolni a hallgató ösztöndíját a következő félévre: 3,5 alatt 0 Ft/hó, 3,6-4,0 között 5eFt/hó, 4,1-4,5 között 10eFt/hó és 4,6-5,0 között 15eFt/hó. Írjon C programot, amely beolvassa egy hallgató vizsgajegyeit és eltárolja, kiszámítja a tanulmányi átlagot és kiírja az ösztöndíj havi összegét. 5. Implementálja a 6. előadás metszet, unió és különbség példa algoritmusait.