User Tools

Site Tools


tanszek:oktatas:szamitastechnika:tovabbi_algoritmusok

Table of Contents

1. Példa

Irjon C programot a kovetkezo feladatra: A gets() fuggvennyel billentyuzetrol bekert karaktervektorban meg kell szamlalni a 'k' karakterek elofordulasanak szamat! Az eredmenyt irassa ki!

    #include <stdio.h>
	
    void main(void)
    {
     char s[100];
     int i, db;
	 
     puts("k karakterek szamlalasa\n\n");
     
	 printf("Adja meg a szoveget:");
     
	 gets(s);
     
	 for (db = i = 0; s[i] != '\0'; i++)
	 {
       if (s[i] == 'k') 
	   {
	     db++;
	   }
	 }
	 
     printf("\n\nA megadott szovegben %d darab 'k' karakter volt.",db);
    }

2. Példa

Osszetett logikai feltetelnek eleget tevo elemek megszamlalasa. Egy fogazogephez az atteteli viszonyt cserefogaskerekekkel lehet beallitani. Egy elozetes vizsgalat annak a megallapitasat kivanja, hogy a ket csoportban (mas furatmerettel, de azonos modullal rendelkezo) megadott fogaskereke kozul hany olyan par kepezheto, melyek fogszamhanyadosa egesz szam. Ezeket a parokat irassuk ki es szamlaljuk meg, ezek kozott hany olyan par van, amelynel a fogszamhanyados 3 egesz szamu tobbszorose. A csoportokban 18-18 db fogaskerek van. Az elsoben a legkisebbnek 11, a masikban a legkisebbnek 55 foga van.

    #include <stdio.h>
    
    #define db 18
    #define min1 11
    #define min2 55
    
    int csoport1[db], csoport2[db];
    
    void main()
    {
        int i,j,parokszama, fogszamhanyados;
        puts("Fogaskerekparok\n");
        // csoportok feltoltese:
        for (i=0; i<db; i++)
        {
            csoport1[i]= min1 + i;
            csoport2[i]= min2 + i;
        }
        
        // csoportok kiiratasa:
        puts("Az elso csoportban levo kerekek fogszamai:");
        for (i=0; i<db; i++)
        {
            printf("%4d", csoport1[i]);        
        }
        puts("\nA masodik csoportban levo kerekek fogszamai:");
        for (j=0; j<db; j++)
        {
            printf("%4d", csoport2[j]);        
        }
        
        printf("\n\n\nFolytatashoz nyomjon Entert!");
        
        getch();
        
        // vizsgalat es szamlalas:
        puts("A vizsgalat eredmenye:\n");
        
        parokszama=0;
        
        for (i=0; i<db; i++)
        {
            for (j=0; j<db; j++)
            {
                
                if (csoport2[j] % csoport1[i] == 0)
                {
                    fogszamhanyados= csoport2[j] / csoport1[i];
                    printf("%d a fogszamhanyados a 2. csoport %d es az 1. csoport %d fogszamu kereke kozott.\n",
                           fogszamhanyados, csoport2[j],csoport1[i]);
                    // 3 tobbszoroseinek szamlalasa:
                    if (fogszamhanyados % 3 == 0)
                    {
                        parokszama++;                    
                    }
                }
            }
        }
        
        printf("\n\nHarom tobbszoroset ado attetelu parok szama= %d", parokszama);
    }

3. pelda

Kivalasztas osszetett logikai feltetel alapjan. Valasszuk ki azt a vektorelemet egy numerikus, legalabb negyelemu vektorbol, amelyiknek a kozvetlenul megelozo es a kozvetlenul rakovetkezo szamokkal adodo atlaga legkozelebb esik a sorozat atlagertekehez.

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <time.h>
    float V[200];
    void main()
    {
        int i,n,index;
        float atlag, atlag3, elteres, elteresmin;
        srand(time(NULL));
        puts("Kivalasztas atlagok alapjan\n");
    
        do
        {
            printf("\nElemek szama=");
            scanf("%d",&n);
        }
        while (n<4);
    
        //feltoltes veletlenszamokkal:
        for (i=0; i<n; i++)
        {
            V[i]= (rand() % 100) /1.5;
        }
    
        //Az osszes elem atlaganak szamitasa:
        for (atlag=0.0, i=0; i<n; i++)
        {
            atlag+= V[i];
        }
    
        atlag = atlag/n; //vagy atlag /= n;
        printf("\nA sorozat atlaga= %10.3f \n", atlag);
    
        // a kivalasztas:
        elteresmin= 1e20; // tiz a huszadikon, jo nagy
        for (i=1; i<n-2; i++) // masodiktol az utolso elottiig fut!
        {
            atlag3= (V[i-1]+V[i]+V[i+1])/3;
            elteres= (atlag>atlag3) ? atlag-atlag3 : atlag3-atlag;
            if (elteres<elteresmin)
            {
                elteresmin= elteres;
                index= i;
            }
            printf("\nA harom egymasutani szam: %10.3f %10.3f %10.3f",
                   V[i-1],V[i],V[i+1]);
            printf("\nAtlaguk= %8.3f, az elteres= %8.3f", atlag3, elteres);
        }
        printf("\n\nA %d indexu szam es szomszedai atlaga ter el legkevesbe, az elteres erteke= %10.3f", index, elteresmin);
    }
    //Futtassuk 12, vagy kevesebb elemmel!

tanszek/oktatas/szamitastechnika/tovabbi_algoritmusok.txt · Last modified: 2022/09/05 21:51 by knehez