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!
