Vissza
Tömbök, mutatók
Házi feladatok:
1. Egy dinamikusan kezelt tömb elemeihez rendeljük
hozzá az első n négyzetszámot.
2. Definiáljunk konstansként egy valós
típusú tömb elemeit, majd egy pointer
típusú
változó segítségével írassuk
ki a páros sorszámú elemeket.
3. Definiáljunk konstansként egy egész
típusú tömb elemeit, majd egy pointer
típusú
változó segítségével írassuk
ki prímszámokat, a prímtesztelésre
használjuk függvényt.
4. Definiáljunk konstansként egy karakterlánc
típusú tömb elemeit, majd egy
pointer típusú változó
segítségével írassuk ki az
magánhangzóval kezdődő szavakat.
5. Definiáljunk konstansként egy karakterlánc
típusú tömb elemeit, majd egy
pointer típusú változó
segítségével írassuk ki a nagybetűvel
kezdődő szavakat.
Megoldott feladatok:
1. Rendezési algoritmusok:
//sortarea bubble sort - buborek rendezes
//sortarea prin insertie - beszuras rendezes
//sortarea prin selectie - kivalsztas rendezes
//sortarea prin numerare - szamlalas rendezes
#include <iostream>
using namespace std;
void buborekRend(int tomb[], int n);
void csere(int &a, int &b);
void beszurasRend(int tomb[], int n);
void kivalasztasRend(int tomb[], int n);
void szamlalasRend (int tomb[], int n);
int szamol(int elem, int tomb[], int n);
int main(){
int tomb[] = {80, 23, 45, 6, 21, 3, 4, 22, 90, 89, 7, 56, 78, 2, 77, 1, 0, 100};
int n = sizeof(tomb)/sizeof(tomb[0]);
buborekRend(tomb, n);
//beszurasRend(tomb, n);
//kivalasztasRend(tomb, n);
//szamlalasRend (tomb, n);
for (int i = 0; i < n; ++i)
cout << tomb[i] << " ";
cout << endl;
return 0;
}
void buborekRend(int tomb[], int n){
int ok;
do{
ok = 1;
for (int i = 0; i < n - 1; ++i)
if (tomb[i] > tomb[i+1]){
csere(tomb[i], tomb[i+1]);
ok = 0;
}
}while (ok == 0);
}
void csere(int &a, int &b){
int temp;
temp = a;
a = b;
b = temp;
}
void beszurasRend(int tomb[], int n){
int temp, j;
for (int i = 1; i < n; ++i){
if (tomb[i] < tomb[i-1]){
temp = tomb[i];
j = i - 1;
while (tomb[j] > temp && j >=0){
tomb[j+1] = tomb[j];
j --;
}
tomb[j+1] = temp;
}
}
}
void kivalasztasRend(int tomb[], int n){
for (int i = 0; i < n; ++i)
for(int j = i + 1; j < n; ++j)
if (tomb[i] > tomb[j]) csere (tomb[i], tomb[j]);
}
void szamlalasRend (int tomb[], int n){
int *tempTomb = new int[n];
int *szamTomb = new int[n];
int i, k;
for (i=0; i < n; ++i){
tempTomb[i] = tomb[i];
k = szamol (tomb[i], tomb, n);
szamTomb[i] = k;
}
for (i=0; i < n; ++i)
tomb[szamTomb[i]] = tempTomb[i];
delete(szamTomb);
delete(tempTomb);
}
int szamol(int elem, int tomb[], int n){
int db = 0;
for (int i = 0; i < n; ++i)
if (elem > tomb[i]) db += 1;
return db;
}
2. Egy dinamikusan kezelt tömb elemeihez rendeljük
hozzá az első n Fibonacci számot.
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
long long n, i;
long long *tomb;
cout << "hany fibonacci szamot akarsz:? ";
cin >> n;
tomb = new long long[n];
tomb[0] = 1;
tomb[1] = 1;
for (i = 2; i < n; i++)
tomb[i] = tomb[i-1] + tomb[i-2];
for (i = 0; i < n; i++)
cout << setw(10) << tomb[i];
delete (tomb);
return 0;
}
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int n, i;
int *tomb;
cout << "hany fibonacci szamot akarsz:? ";
cin >> n;
tomb = new int[n];
*tomb = 1;
*(tomb + 1) = 1;
for (i = 2; i < n; i++)
*(tomb+i) = *(tomb+i-1) + *(tomb+i-2);
for (i = 0; i < n; i++)
cout << setw(8) << *(tomb+i);
delete (tomb);
return 0;
}
3. Definiáljunk konstansként egy egész
típusú tömb elemeit, majd egy pointer
típusú
változó segítségével írassuk
ki az elemeket.
Megjegyzések:
- az x
tömb elemeit konstansként adjuk meg, ezért nem
kell megadni a tömb elmeszámát,
- a p, (int*)
típusú változó értéket kap:
felveszi az x-el
azonosított memóriacímet.
#include
<iostream>
#include <iomanip>
using namespace std;
int main()
{
int x[] = {0,1,2,3,4,5,6,7,8,9};
int i, n;
int *p = x;
cout << "a p altal azonositott
memoriacim:";
cout << p << endl;
cout << "az x altal azonositott memoriacim: ";
cout << x;
n = sizeof(x) / sizeof(x[0]);
cout << endl << endl;
cout << "Az
elemek memoriacimei: " <<
endl;
for (i = 0; i < n; i++)
cout << setw(10)
<< (p + i);
cout << endl << endl;
cout << "Az elemek:" << endl;
for (i = 0; i <
n; i++)
cout << setw(5)
<< *(p + i);
cout << endl << endl;
return 0;
}
4. Definiáljunk konstansként egy karakter típusú
tömb elemeit, majd egy pointer
típusú változó
segítségével írassuk ki az elemeket.
#include
<iostream>
#include <iomanip>
using namespace std;
int main()
{
char x[] = {'a','b','c','d','e','f'};
int i, n;
char *p = x;
n = sizeof(x) / sizeof(x[0]);
cout << "az elemek: " << endl;
for (i = 0; i <
n; i++)
{
cout << setw(5)
<< *p;
p++;
}
cout << endl << endl;
return 0;
}
5. Definiáljunk konstansként egy karakterlánc
típusú tömb elemeit, majd egy
pointer típusú változó
segítségével írassuk ki az elemeket.
#include
<iostream>
#include <iomanip>
using namespace std;
int main()
{
char x[][10] =
{"alma","korte","barack","dio","mogyoro"};
int i,n;
char *p;
n = sizeof(x) / sizeof(x[0]);
cout << "az elemek: " << endl;
for (i = 0; i <
n; i++)
{
p = x[i];
cout << setw(10)
<< p;
}
cout << endl << endl;
return 0;
}
A fenti feladatok standard C
író/olvasó függvényekkel
1. Definiáljunk
konstansként egy egész
típusú tömb elemeit, majd egy pointer
típusú
változó segítségével írassuk
ki az elemeket.
Megjegyzések:
- az x
tömb elemeit konstansként adjuk meg, ezért nem
kell megadni a tömb elmeszámát,
- a p, (int*)
típusú változó értéket kap:
felveszi az x-el
azonosított memóriacímet.
#include
<stdio.h>
int main()
{
int x[] = {0,1,2,3,4,5,6,7,8,9};
int i, n;
int *p = x;
printf("a p altal azonositott memoriacim: %p\n", p);
printf("az x altal azonositott memoriacim: %p\n\n",
x);
n = sizeof(x) / sizeof(x[0]);
printf("Az
elemek memoria cimei:\n");
for (i = 0; i <
n; i++)
printf("%10p", (p + i));
printf("\n\n");
printf("Az
elemek:\n");
for (i = 0; i <
n; i++)
printf("%5i", *(p + i));
printf("\n\n");
return 0;
}
2. Definiáljunk konstansként egy karakter típusú
tömb elemeit, majd egy pointer
típusú változó
segítségével írassuk ki az elemeket.
#include
<stdio.h>
int main()
{
char x[] = {'a','b','c','d','e','f'};
int i, n;
char *p = x;
n = sizeof(x) / sizeof(x[0]);
printf("az elemek:\n");
for (i = 0; i <
n; i++)
{
//kiiratjuk a p memoriacimen levo
erteket
printf("%5c", *p);
//valtoztatjuk a p
memoriacimet
p++;
}
printf("\n\n");
return 0;
}
3. Definiáljunk konstansként egy karakterlánc típusú
tömb elemeit, majd egy
pointer típusú változó
segítségével írassuk ki az elemeket.
#include
<stdio.h>
int main()
{
char x[][10]={"alma","korte","barack","dio","mogyoro"};
int i, n;
char *p;
n = sizeof(x)/sizeof(x[0]);
for (i = 0; i <
n; i++)
{
p = x[i];
printf("%10s", p);
}
printf("\n\n");
return
0;
}
4. Egy dinamikusan kezelt tömb elemeihez rendeljük
hozzá az első n Fibonacci számot.
#include
<stdio.h>
#include
<stdlib.h>
int
main()
{
int n, i;
int *tomb;
printf("hany fibonacci szamot akarsz:?");
scanf("%i", &n);
tomb = (int*) malloc(n * sizeof(int));
*tomb = 1;
*(tomb +
1) = 1;
for (i = 2; i <
n; i++)
*(tomb+i) =
*(tomb+i-1) + *(tomb+i-2);
//vagy:
tomb[i]= tomb[i-1]+tomb[i-2];
for (i = 0; i <
n; i++)
printf("%i\n", *(tomb+i));
free (tomb);
return 0;
}