This is an old revision of the document!
Vektorok
Mi az a vektor (tömb)?
- A tömb egy azonos típusú adatok sorozata, amelyet egyetlen névvel hivatkozhatunk.
- Előnye: sok adatot tudunk tárolni és kezelni egy változó segítségével.
- A tömb elemei indexeléssel érhetők el (0-tól kezdődően!).
Létrehozás
int a[5]; // 5 elemű egész szám tömb (index: 0..4) float b[10]; // 10 elemű valós szám tömb
Inicializálás
int x[5] = {1, 2, 3, 4, 5}; // pontosan 5 elem
int y[] = {10, 20, 30}; // a méretet a fordító számolja ki (3)
Elérés
int t[5] = {2, 4, 6, 8, 10};
printf("%d", t[2]); // a 3. elem, azaz 6
t[0] = 99; // első elem átírása
Beolvasás / kiírás
int n = 5;
int v[5];
for (int i = 0; i < n; i++) {
scanf("%d", &v[i]); // beolvasás
}
for (int i = 0; i < n; i++) {
printf("%d ", v[i]); // kiírás
}
Tipikus műveletek vektorokon
- Összegzés: minden elem összeadása
- Maximum/minimum keresés: legnagyobb / legkisebb elem
- Keresés: adott érték előfordul-e
- Megfordítás: elemek sorrendjének felcserélése
- Másolás: egyik tömbből másikba
Mátrixok
A mátrix egy kétdimenziós vektor, ezek kívül jellemzői megegyeznek a vektorral. Mindig sor-oszlop sorrendben adjuk meg.
Létrehozás
int m[3][4]; // 3 sor, 4 oszlop (összesen 12 elem)
Inicializálás
int mat[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
Elérés
printf("%d", mat[1][2]); // 2. sor, 3. oszlop → 6
mat[0][0] = 9; // bal felső elem átírása
Beolvasás / kiírás
int sor = 3, oszlop = 3;
int m[3][3];
for (int i = 0; i < sor; i++) {
for (int j = 0; j < oszlop; j++) {
scanf("%d", &m[i][j]);
}
}
for (int i = 0; i < sor; i++) {
for (int j = 0; j < oszlop; j++) {
printf("%d ", m[i][j]);
}
printf("\n");
}
Tipikus műveletek mátrixokon
- Sor / oszlop összege
- Főátló és mellékátló összege (négyzetes mátrixnál)
- Transzponálás (sorok ↔ oszlopok felcserélése)
- Mátrixösszeadás (azonos méretűek összeadása)
- Mátrixszorzás (haladóbb)
Gyakorlás
1. Írj programot, ami bekér n egész számot (n>0), majd egy int tömböt n elemmel, kiszámolja és kiírja az elemek összegét és átlagát (lebegőpontosan).
#include <stdio.h>
int main(){
int n;
printf("Mekkora legyen a vektor?");
scanf("%d", &n);
int v[n];
int osszeg = 0;
double atlag = 0;
for(int i = 0; i < n; i++){
printf("Adja meg a vektor %d. elemét:", i+1);
scanf("%d", &v[i]);
osszeg += v[i];
}
atlag = (double)osszeg / n;
pritnf("\nA vektor elemeinek összege: %d, átlaga: %d", osszeg, atlag);
return 0;
2. Írj programot, ami bekér n számot és tömböt; írd ki a legkisebb és legnagyobb elem értékét és az első előfordulásuk indexét.
#include <stdio.h>
int main(void) {
int n;
printf("Hány eleme legyen a vektornak?");
scanf("%d", &n);
int v[n];
for (int i = 0; i < n; ++i){
printf("\nAdja meg a vektor %d. elemét: ", i+1);
scanf("%d", &v[i]);
}
int min = v[0], max = v[0];
int minIdx = 0, maxIdx = 0;
for (int i = 1; i < n; ++i) {
if (v[i] < min) {
min = a[i];
minIdx = i;
}
if (v[i] > max) {
max = a[i];
maxIdx = i;
}
}
printf("Min: %d (%d. helyen)\nMax: %d (%d. helyen)\n", min, minIdx+1, max, maxIdx+1);
return 0;
}
3. Olvass be tömböt és egy keresett értéket x. Írd ki, hányszor fordul elő x a tömbben, és az összes indexét.
#include <stdio.h>
int main(void) {
int n, x;
int szamlalo = 0;
printf("Hány eleme legyen a vektornak?");
scanf("%d", &n);
int v[n];
for (int i = 0; i < n; ++i){
printf("\nAdja meg a vektor %d. elemét: ", i+1);
scanf("%d", &v[i]);
}
printf("Melyik számot keresi?");
scanf("%d", &x);
for (int i = 0; i < n; ++i)
if (v[i] == x) {
szamlalo++;
}
if (szamlalo == 0) printf("Nincs ilyen szám benne.\n");
else printf("\A %d szám %dx szerepel a vektorban.", x, szamlalo );
return 0;
}
4. Válaszd szét egy tömb elemeit páros és páratlan tömbökbe; írd ki a két új tömb méretét és elemeit.
#include <stdio.h>
int main(void) {
int n;
printf("Hány eleme legyen a vektornak?");
scanf("%d", &n);
int v[n];
for (int i = 0; i < n; i++){
scanf("%d", &v[i]);
}
int paros[n], paratlan[n];
int parosSzamlalo = 0, paratlanSzamlalo = 0;
for (int i = 0; i < n; i++) {
if (v[i] % 2 == 0) {
paros[parosSzamlalo++] = v[i];
} else {
paratlan[paratlanSzamlalo++] = v[i];
}
}
printf("Páros (%d):", parosSzamlalo);
for (int i = 0; i < parosSzamlalo; i++){
printf(" %d", paros[i]);
}
printf("\nPáratlan (%d):", paratlanSzamlalo);
for (int i = 0; i < paratlanSzamlalo; i++){
printf(" %d", paratlan[i]);
}
return 0;
}
5. Két tömb (n elemű) összehasonlítása: mondja meg, megegyeznek-e, ha nem, az első különböző indexet.
#include <stdio.h>
#include <stdbool.h>
int main(void) {
int n;
printf("Mekkorák legyenek a vektorok?");
scanf("%d", &n);
int a[n], b[n];
for (int i = 0; i < n; ++i){
printf("\nAdja meg az A vektor %d. elemét: ", i+1);
scanf("%d", &a[i]);
}
for (int i = 0; i < n; ++i){
printf("\nAdja meg a B vektor %d. elemét: ", i+1);
scanf("%d", &b[i]);
}
for (int i = 0; i < n; ++i) {
if (a[i] != b[i]) {
printf("A %d. helyen különböznek: %d vs %d\n", i, a[i], b[i]);
return 0;
}
}
printf("Ugyanaz a kettő vektor.\n");
return 0;
}
6. Implementálj buborék rendezést növekvő sorrendre, majd írd ki a rendezett tömböt.
#include <stdio.h>
int main(void) {
int n;
printf("Mekkorák legyen a vektor?");
scanf("%d", &n);
int v[n];
for (int i = 0; i < n; i++){
printf("\nAdja meg a vektor %d. elemét: ", i+1);
scanf("%d", &v[i]);
}
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (v[j] > v[j + 1]) {
int seged = v[j];
v[j] = v[j + 1];
v[j + 1] = seged;
}
}
}
printf("Rendezve: ");
for (int i = 0; i < n; i++){
printf("%d ", v[i]);
}
return 0;
}
7. Olvass be egy m x n egész mátrixot és írd ki a transzponáltját (n x m).
#include <stdio.h>
int main(void) {
int m, n;
printf("Mekkora legyen a mátrix? (n x m)");
scanf("%d %d", &m, &n);
int a[m][n]; // eredeti
int t[n][m]; // transzponált
// beolvasás
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
// transzponálás
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
t[j][i] = a[i][j];
}
}
// kiírás
printf("Transzponálva:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
printf("%d ", t[i][j]);
}
printf("\n");
}
return 0;
}
8. Készíts programot, ami kiírja minden sor és minden oszlop összegét egy m x n mátrixon.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int m, n;
printf("Mekkora legyen a mátrix? (m x n)");
scanf("%d %d", &m, &n);
int a[m][n];
for (int i = 0; i < m; ++i){
for (int j = 0; j < n; ++j){
printf("%d sor %d oszlop:", i+1, j+1);
scanf("%d", &a[i][j]);
}
}
for (int i = 0; i < m; ++i) {
int s = 0;
for (int j = 0; j < n; ++j){
s += a[i][j];
}
printf("A %d. sor összege = %d\n", i+1, s);
}
for (int j = 0; j < n; ++j) {
int s = 0;
for (int i = 0; i < m; ++i){
s += a[i][j];
}
printf("A %d. oszlop összege = %d\n", j+1, s);
}
return 0;
}
9. Implementálj A(m×p) * B(p×n) = C(m×n) mátrixszorzást. Ellenőrizd a dimenziókat.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int m, p, p2, n;
printf("Mekkora legyen az első mátrix? (m x n)");
scanf("%d %d", &m, &p);
int A[m][p];
for (int i = 0; i < m; ++i){
for (int j = 0; j < p; ++j){
scanf("%d", &A[i][j]);
}
}
printf("Mekkora legyen a második mátrix? (m x n)");
scanf("%d %d", &p2, &n);
if (p2 != p) {
printf("Lehetetlen, különbözik a két mátrix mérete.\n");
return 0;
}
int B[p][n];
for (int i = 0; i < p; ++i){
for (int j = 0; j < n; ++j){
scanf("%d", &B[i][j]);
}
}
int C[m][n]; //az eredmény tárolására
for (int i = 0; i < m; ++i){
for (int j = 0; j < n; ++j) {
int sum = 0;
for (int k = 0; k < p; ++k){
sum += A[i][k] * B[k][j];
}
C[i][j] = sum;
}
}
//Eredmény kiírása
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j){
printf("%d ", C[i][j]);
}
printf("\n");
}
return 0;
}
10. Adott n x n mátrixra számold ki a főátló és mellékátló összegét, és írd ki.
#include <stdio.h>
int main(void) {
int n;
scanf("%d", &n);
int a[n][n];
for (int i = 0; i < n; ++i){
for (int j = 0; j < n; ++j){
scanf("%d", &a[i][j]);
}
}
int foatlo = 0, mellekatlo = 0;
for (int i = 0; i < n; ++i) {
foatlo += a[i][i];
mellekatlo += a[i][n-1-i];
}
printf("FőátlóK összege = %d\nMellékátlók összege = %d\n", foatlo, mellekatlo );
return 0;
}
