INFORMATIKA 3

Matematika BSc - BME TTK - 2026 tavaszi félév


1. gyakorlat - megoldások



1. feladat. A +, -, *, / és % operátorok melyikének nem állhat egyik oldalán double, míg a másik oldalán int típusú változó?

Megoldás:

Ha az operátorok egyik oldalán int, másik oldalán double típusú változó áll, akkor a fordító az int típusú változót double-é konvertálja, és a lebegőpontos értékek közt végzi el a műveletet. A % operátor segítségével maradékos osztást végezhetünk, ennek csak egész operandusok esetén van értelme, így annak mindkét oldalán egész típusú változó kell álljon.

2. feladat. Mi lesz a ’3’==3 kifejezés értéke és miért?

Megoldás:

A fenti kifejezés a '3' karakter kódját hasonlítja össze a 3 értékkel. Ezek nem egyeznek meg, így a kifejezés értéke 0, ami a logikai hamisnak felel meg.

3. feladat. Mit fog kiírni a képernyőre a következő program? Próbáljuk meg meghatározni először a program futtatása nélkül! Magyarázzuk meg az eredményt.

#include<iostream>
using namespace std;

int main() {
    int a, b;
    a = 5;
    b = 10;
    cout << (a == b) << endl;
    cout << (a = b) << endl;
    cout << (a == b) << endl;
    return 0;
}


Megoldás:

A program a 0, 10, 1 számokat írja ki ebben a sorrendben. Az első cout << (a == b) << endl; parancs az a és b változók összehasonlításának eredményét írja ki, mivel ezek ekkor nem egyenlők, így az összehasonlítás eredménye 0 (hamis). Az ezt követő cout << (a = b) << endl; parancs a b változó értékét beírja az a változóba, az értékadás pedig visszatér egy a változóra mutató referenciával, így tehát az a változó új értékét, vagyis a 10-et írja ki a program. Végül a második cout << (a == b) << endl; parancs már egyenlő értékeket hasonlít össze, hiszen az a változónak előtte értékül adtuk a b változó értékét, így az összehasonlítás eredménye 1 (igaz), ez tehát a harmadik kiírt szám.

4. feladat. Írjunk programot, amely kiírja 1-től 100-ig a páros számokat. Valósítsuk meg a feladatot a printf függvény ill. a cout objektum segítségével is.

Megoldás:

Megvalósítás while ciklus és printf segítségével:

#include<stdio.h>

int main() {
    int i = 2;
    while(i<=100) {
        printf("%d\n", i);
        i += 2;
    }

    return 0;
}


Megvalósítás for ciklus és cout segítségével:

#include<iostream>
using namespace std;

int main() {
    for (int i = 2; i <= 100; i += 2) {
        cout << i << endl;
    }

    return 0;
}


5. feladat. Írjunk programot, ami a felhasználótól egy ciklusban egész számokat kér be addig, amíg 0 értéket nem kap, 0 érték esetén pedig kiírja a képernyőre a kapott nemnulla számok átlagát. Valósítsuk meg a feladatot a scanf_s függvény ill. a cin objektum segítségével is.

Megoldás:

Megvalósítás printf és scanf_s segítségével:

#include<stdio.h>

int main() {
    int i = 0;
    int n = -1;
    int sum = 0;
    do {
        printf("Adjon meg egy 0-tol kulonbozo egesz szamot, vagy a program befejezesehez adja meg a 0 erteket: ");
        scanf_s("%d",&i);
        sum += i;
        ++n;
    } while (i != 0);

    if (n > 0) {
        double atlag = sum;
        atlag /= n;
        printf("A megadott szamok atlaga: %f\n", atlag);
    }
    else {
        printf("Nem adott meg egy 0-tol kulonbozo szamot sem.\n");
    }

    return 0;
}


Megvalósítás cout és cin segítségével:

#include<iostream>
using namespace std;

int main() {
    int i = 0;
    int n = -1;
    int sum = 0;
    do {
        cout << "Adjon meg egy 0-tol kulonbozo egesz szamot, vagy a program befejezesehez adja meg a 0 erteket: ";
        cin  >> i;
        sum += i;
        ++n;
    } while (i != 0);

    if (n > 0) {
        double atlag = sum;
        atlag /= n;
        cout << "A megadott szamok atlaga: " << atlag << endl;
    }
    else {
        cout << "Nem adott meg egy 0-tol kulonbozo szamot sem." << endl;
    }

    return 0;
}


6. feladat. Írjunk függvényt, amely visszaadja a bemeneti egész szám abszolút értékét.

Megoldás:

int absval(int a) {
    return a < 0 ? -a : a;
}


7. feladat. Írjunk függvényt, amely bekéri két darab 2 dimenziós vektor koordinátáit, és visszaadja az általuk feszített paralelogramma területét. A függvénynek legyen négy double típusú paramétere, az első ill. a második vektor x és y koordinátái, és térjen vissza a kívánt eredménnyel.

Megoldás:

#include <cmath>

double parallelogram_area(double x1, double y1, double x2, double y2) {
    return fabs(x1 * y2 - y1 * x2);
}


8. feladat. Írjunk függvényt, amely visszaadja egy paraméterül kapott egész szám négyzetét és köbét is.

Megoldás:

void square_cube(int a, int& square, int& cube) {
    square = a * a;
    cube = square * a;
}


9. feladat. Írjunk függvényt, amely paraméterként kér két long típusú változót, és megcseréli az értéküket.

Megoldás:

void swap(long& a, long& b) {
    long temp = a;
    a = b;
    b = temp;
}


10.feladat. A következő kód feladata a kapott egész szám összes prímosztójának kiírása. Van benne 2 logikai hiba. Mik ezek? Javítsuk ki a kódot.

#include<iostream>
using namespace std;

void prim(int n) {
  for(int i = 2; i < n; i++) {
    if(n % i == 0) {
      cout << false;
    }
  }
  cout << true;
}
void osztok(int n) {
  for(int i = 2; i <= n; i++) {
    if(prim(n)) {
      cout << i << " ";
    }
  }
}
int main() {
  int n;
  cin >> n;
  osztok(n);
  return 0;
}


Megoldás: (a hibák a kommentekben)

#include<iostream>
using namespace std;

bool prim(int n) {
    if (n <= 1) return false;

    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return false; // már nem csak kiírjuk az eredményt, hanem ezt adja vissza a függvény
        }
    }
    return true;
}

void osztok(int n) {
    for (int i = 2; i <= n; i++) {
        if ((n % i == 0) && prim(i)) { // nem az n-t kell vizsgálni, hogy prím-e, hanem a lehetséges osztókat, i-ket
            cout << i << " ";
        }
    }
}

int main() {
    int n;
    cin >> n;
    osztok(n);
    return 0;
}