Órai dolgok
Kérem mindenki nézze meg, értse meg.
-
- Egy C projectben írjunk egy saját e x számoló függvényt (myexp). Ha már teszteltük, és jól működik, a tesztelő main()-t töröljük (vagy tegyük /*megjegyzésbe*/), és fordítsuk le. Legyen az eredmény pl. exp.obj.
- Ezután egy új C projectben csak egy main() függvény legyen, és próbáljuk hívni a myexp függvényt. Compiler warning: deklarálni kell! A file elejére tegyük be a deklarációt: double myexp(int, double);. Most már linker error, nem találja a kódot. A project beállítási paneljén meg kell mondani, hogy a fenti exp.obj is legyen benne a "link libraries"-ben. (Codeblocks-ban egyszerű: Project / Build options / Linker settings / Link libraries: Add. Itt adjuk meg a myexp-et tartalmazó tárgykód file-t: ......\myexp\obj\Debug\main.o) Most már fordul és fut a program.
-
Ezt egy C projectbe copy-paste-elve kérem egymás után kipróbálni (végül a harmadikat egy C++ projectben is...)
A referencia típus kizárólag C++ jellemző, C programban compiler errort okoz. Megvalósítja a cím szerinti paraméterátadást. (Amit a C-ben nekünk kell úgy programozni...) Az alábbi példákban a buta ill. okos függvény megpróbálja megváltoztatni a main változójának az értékét.
hibás C megoldás | jó C megoldás pointerrel | hibás C-ben, de jó C++ megoldás referenciával. Emberi szemmel is barátságos. |
#include<stdio.h>
void buta(int i)
{
i=i+2;
}
int main(void)
{
int i=0;
buta(i);
printf("%d\n",i);
}
/* A kimenet 0 */
|
#include<stdio.h>
void okos(int *p)
{
*p=*p+2;
}
int main(void)
{
int i=0;
okos(&i); /*ez nem ref.!*/
printf("%d\n",i);
}
/* A kimenet 2 */
|
#include<stdio.h>
void okos_cpp(int &i)
{
i=i+2;
}
int main(void)
{
int i=0;
okos_cpp(i);
printf("%d\n",i);
}
/* A kimenet 2 */
|
Kövessük az eseményeket debuggerrel lépésenként végrehajtva a programunkat.
1. Házi feladat (az összes példa beadandó házi feladat, ez most még csak ismétlés).
- Írj C programot, amely a szabványos kimenetre írja a parancssori argumentumként megadott tetszőleges számú pozitív egész szám
- legkisebb közös többszörösét,
- legnagyobb közös osztóját,
- és valamennyi szám prímtényezős felbontását egy-egy sorba. (Tárolni nem kell, csak kiírni!)
Példa a használatára (egy cmd ablakban):
prog 12 21 30
lkkt: 420
lnko: 3
12: 2 2 3
21: 3 7
30: 2 3 5
Az lnko (lkkt) kereséséhez használjuk ki, hogy lnko(a1,a2,...an)=lnko(a1 , lnko(a2 , lnko(a3 , ...lnko(an-1,an)...))). Semmiképp ne próbáljuk a prímtényezőkből előállítani, mert elég nehézkes tárolni őket (pl. láncolt lista). A parancssori paramétereket pl. a Code::Blocks esetén a "Project"→"Set programs' arguments" menüpontban lehet beállítani. Kis segítség argc argv ügyben.
- Írj C programot, amely előbb egy egész, majd ennyi darab double értékeket olvas be a szabványos bemenetről. A program keresse meg az átlaghoz legközelebbi adatot, valamint számolja meg, hány adat található az átlag ±5%-os környezetén kívül. Az eredményeket írja a szabványos kimenetre. (A lefoglalt dinamikus memórát kötelező felszabadítani!)
- Írj C programot, amely bekér egy n egész számot, és kiszámolja az alábbi kifejezés értékét. Törekedj hatékony megoldásra (azaz, 5n értékét mindig 5n-1-ből számold!), csak egészekkel dolgozz.
include "../_foot.inc"; ?>