Programozás alapjai gyakorlat 2015-2016/1

8. gyakorlat


    Mit is tanultunk a 7. gyakorlaton?

- Ha egy függvényen belül, a MAIN függvényben létrehozott változónak szeretnénk felül írni az értékét, akkor függvényhíváskor referenciaként kell átadni (&).

- Rekurzív függvény, amely saját magát hívja.

- Fájlok használata input/output műveletekre. FILE * típusú filemutató az állományokhoz. fopen paranccsal nyitjuk meg használatra. Ügyelünk a fopen helyes paraméterezésére. Majd használat végén fclose függvénnyel lezárjuk a file-okat.




    Gyakorló óra


Néhány feladat amiből kiindulhatunk:


/*
    Irjunk programot, melyben letrehozunk egy 2D int tombot, majd toroljunk belole egy adott sort.
    Ekkor ugyebar eggyel feljebb kerul az osszes sor, helyettesitve a kitorolt sor helyet,
    persze kiveve az utolso sor eseten. A torlendo sort a felhasznalotol kerjuk be.
    Ugyeljunk arra, hogy mindenkeppen a tomb sorainak szama tartomanyon belul erkezzen a beolvasott ertek.
    Az utolso sort toltsuk fel 0-kal minden esetben, jelezve, hogy ures.
*/

#include <stdio.h>

#define N 10

int main(){
    int tomb[N][N], szam = 1, i, j, sor;
	
    // tomb feltoltese 1-tol
    for (i=0; i<N; i++){
        for (j=0; j<N; j++){
            tomb[i][j] = szam++;
        }
    }

    // tomb kiiratasa
    // ezt praktikus lenne fuggvenybe irni, de hat erre valo a hazi feladat
    for (i=0; i<N; i++){
        for (j=0; j<N; j++){
            printf("%3d ",tomb[i][j]);
        }
        printf("\n");
    }

    printf("\n\n");
	
    // torlendo sor bekerese
    printf("Hanyadik sort toroljuk: ");
    scanf("%d",&sor);
    // egesz addig amig helyes erteket nem adunk meg
	while (sor > N || sor < 1){
        printf("\nCsak %d soros a tomb! Add meg ujra: ", N);
        scanf("%d",&sor);
    }

    // a torlendo sortol lefele az eggyel lentebbi sort mindig eggyel feljebb masoljuk
    // a kovetkezto 8 sort ugyszinten fuggvenyben lenne szep kivitelezni
    for (i=(sor-1); i<N; i++){
        for (j=0; j<N; j++){
            tomb[i][j] = tomb[i+1][j];
        }
    }
    // utolso sor feltoltese 0-kal
    for (j=0; j<N; j++){
        tomb[9][j] = 0;
    }

    // ismetelt kiiratas
    // redundancia, ugyebar ezt a 6 sort mar masodszor latjuk a programon belul, motivacio a fuggvenyhasznalathoz
    for (i=0; i<N; i++){
        for (j=0; j<N; j++){
            printf("%3d ",tomb[i][j]);
        }
        printf("\n");
    }

	return 0;
}


/*
    Keszitsunk egy kis bejelentkezo feluletet. Hozzunk letre 4 char tombot.
    Elso kettoben egy default felhasznalonev-jelszo parost taroljunk le, 
    a masik kettobe pedig a felhasznalo tudjon irni egy felhasznalonev-jelszo párost.
    Ezutan hasonlitsuk ossze a ket-ket string-et.
    Ha megegyeznek, akkor "belephet" az felhasznalo, ellenkezo esetben nem.
    Az osszehasonlitast egy fuggvenyen belul oldjuk meg!
*/

#include<stdio.h>
#include<string.h>

// Fuggveny a validalashoz. Ket bemeneti parameter az osszehasonlitando karakter tomb.
// 0-val ter vissza a fuggveny, ha kulonbozok voltak es 1-gyel, ha egyformak
int validate (char str1[], char str2[]){
    int i, j,	// ciklusvaltozok
    len1 = strlen(str1),	// hossz lekerese
    len2 = strlen(str2);	// hossz lekerese

    if (len1 == len2){	// ha a hosszuk nem egyezik, alapbol nem lehetnek egyformak
        for (i=0; i<len1; i++){	// ellenkezo esetben nezzuk vegig elemenkent
            if (str1[i] != str2[i] ){	// ha mar egy kulonbozo elem is volt, akkor terjunk vissza 0-val
                return 0;
            }
        }
    } else {	// es ha hossz nem volt megegyezo, akkor is 0-t adjunk vissza
        return 0;
    }

    return 1;	// ha ide eljutottunk, akkor biztos, hogy megegyeztek
}

int main(){

    int equ = 1, eqp = 1, i, j;
    char stru[20], strp[20], strlogu[20], strlogp[20];
	
    // default ertekek megadasa
    strcpy(strlogu,"belavagyok");
    strcpy(strlogp,"1234");

    // felhasznaloi adatok bekerese
    printf("Add meg a felhasznaloneved a belepeshez:\n");
    scanf("%s",&stru);
    printf("Add meg a jelszavadat a belepeshez:\n");
    scanf("%s",&strp);

    // a validate fuggveny segitsegevel az egyezosegek ellenorzese es a visszaadott erteket letarolasa
    equ = validate(stru, strlogu);
    eqp = validate(strp, strlogp);

    if (equ == 0 || eqp == 0){	// ha mar az egyik is 0 volt, akkor valahol kulonbseg volt, ekkor ne engedjuk be a felhasznalot
        printf("Sikertelen belepes!\n");
    } else {	// ellenkezo esetben siker
        printf("Sikeres belepes!\n");
    }

    return 0;
}





    Jövő héten 5. miniZH (2015.10.27./29.)

Innentől kezdve már 10 pontért!

Téma:

  3. - 7. gyakorlat anyaga.

  Gyakorlásra:

    A honlapomon a 3. - 7. gyakorlathoz tartozó anyag, magyarázatokkal, példákkal.

    A gyakorlatok végén lévő házi feladat és gyakorló feladatok megoldása.

    A honlapom mellet további feladatok találhatóak a PUB-ban. (/n/pub/ProgramozasAlapjai/Gyakorlat/ - erős átfedés van az "itt" és "ott" található feladatok között).

Egyéb infó:

Előreláthatóan 45 percetek lesz a feladatok megoldására és beadására (tehát 8:55-ig/12:45-ig). A feladatokat a BÍRÓ rendszeren keresztül fogjátok megkapni és beadni is, és az értékelést is a bíró fogja csinálni ott helyben. Tehát egyből látni fogjátok a pontszámokat amiket a bíró adott. Aki késik, az is csak a fenti időintervallum alatt írhatja a ZH-t, mivel a bíró rendszer nyit, majd automatikusan zár is. Hiányozni csak igazolással lehet, de a ZH akkor sem pótolható!


     Vissza a lap tetejére.