Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:c:c_peldaprogram

Különbségek

A kiválasztott változat és az aktuális verzió közötti különbségek a következők.

Összehasonlító nézet linkje

Előző változat mindkét oldalon Előző változat
Előző változat
oktatas:programozas:c:c_peldaprogram [2014/12/06 01:52]
oktatas:programozas:c:c_peldaprogram [2020/05/12 20:34] (aktuális)
admin [Decimális szám binárissá másként]
Sor 1: Sor 1:
 +[[:​oktatas:​programozás:​c|<​ C nyelv]]
 +
 +====== C példaprogram ======
 +
 +===== Összeadás mutatókkal =====
 +
 +
 +<code c>
 +
 +#include <​stdio.h>​
 +#include <​stdlib.h>​
 +
 +int main()
 +{
 +    int *a;
 +    int *b;
 +    int *c;
 +
 +    a = (int*) malloc(sizeof(int));​
 +    b = (int*) malloc(sizeof(int));​
 +    c = (int*) malloc(sizeof(int));​
 +
 +    *a = 3;
 +    *b = 4;
 +    *c = *a + *b;
 +    printf("​Osszeg:​ %d\n", *c);
 +    ​
 +    free(a);
 +    free(b);
 +    free(c);
 +
 +    return 0;
 +}
 +</​code>​
 +
 +
 +===== Háromszög területének számítása az oldalakból =====
 +
 +<code c>
 +#include <​stdio.h>​
 +#include <​stdlib.h>​
 +#include <​math.h>​
 +
 +double terszamit(int a, int b, int c)
 +{
 +    long s = (a + b + c)/2;
 +    return sqrt(s*(s-a)*(s-b)*(s-c));​
 +}
 +
 +int szerkesztheto(int a, int b, int c)
 +{
 +    if ((a + b) <= c)
 +        return 0;
 +    else if ((a + c) <= b)
 +        return 0;
 +    else if ((b + c) <= a)
 +        return 0;
 +    else
 +        return 1;
 +}
 +
 +int main()
 +{
 +    int a, b, c;
 +    double terulet;
 +
 +    printf("​Háromszög területe\n"​);​
 +
 +    printf("​a:​ "); scanf("​%d",​ &a);
 +    printf("​b:​ "); scanf("​%d",​ &b);
 +    printf("​c:​ "); scanf("​%d",​ &c);
 +
 +    if (szerkesztheto(a,​ b, c))
 +    {
 +        terulet = terszamit(a,​ b, c);
 +        printf("​Terület:​ %f\n", terulet);
 +    }
 +    else
 +        printf("​Nem szerkeszthető!\n"​);​
 +
 +    return 0;
 +}
 +</​code>​
 +
 +
 +
 +===== Hexadecagon területe =====
 +
 +<code c>
 +#include <​stdio.h>​
 +#include <​stdlib.h>​
 +#include <​math.h>​
 +
 +int main()
 +{
 +    double oldal;
 +    double terulet;
 +
 +    printf("​Hexadecagon teruletszamitas\n"​);​
 +
 +    printf("​Oldal:​ ");
 +    scanf("​%lf",​ &​oldal);​
 +
 +    terulet = (4 * pow(oldal, 2)) * (cos(M_PI/​16)/​sin(M_PI/​16));​
 +    ​
 +    printf("​A hexadecagon terulete: %lf", terulet);
 +
 +    return 0;
 +}
 +</​code>​
 +
 +===== Trapéz területe =====
 +
 +<code c>
 +
 +#include <​stdio.h>​
 +#include <​stdlib.h>​
 +#include <​math.h>​
 +
 +int main()
 +{
 +    double terulet;
 +    printf("​Trapez terulete\n"​);​
 +    printf("​Csak valodi trapez eseten mukodik!\n"​);​
 +    double a, b, c, d;
 +    printf("​a:​ ");
 +    scanf("​%lf",​ &a);
 +    printf("​b:​ ");
 +    scanf("​%lf",​ &b);
 +    printf("​c:​ ");
 +    scanf("​%lf",​ &c);
 +    printf("​d:​ ");
 +    scanf("​%lf",​ &d);
 +
 +    printf("​a:​ %lf\n",​ a);
 +
 +    terulet = ((a+c)/​(4*(a-c))) *
 +    sqrt((a+b-c+d)*(a-b-c+d)*
 +         ​(a+b-c-d)*((a * -1)+b+c+d));​
 +
 +    printf("​Trapez terulete: %lf\n",​ terulet);
 +    return 0;
 +}
 +</​code>​
 +
 +
 +===== Verem létrehozása =====
 +
 +
 +<code c>
 +
 +#include <​stdio.h>​
 +#define MERET 100
 +
 +typedef struct {
 +    int meret; ​ // A verem aktuális mérete
 +    int elem[MERET];​ // A verembe egész számokat tehetünk
 +} Tverem;
 +
 +main()
 +{
 +
 +    Tverem verem;
 +    verem.meret = 0;
 +
 +    //Írunk a verembe
 +    verem.elem[verem.meret++] = 5;
 +    verem.elem[verem.meret++] = 8;
 +    verem.elem[verem.meret++] = 12;
 +
 +    //Olvasunk a veremből
 +    printf("​%d\n",​ verem.elem[--verem.meret]);​
 +    printf("​%d\n",​ verem.elem[--verem.meret]);​
 +    printf("​%d\n",​ verem.elem[--verem.meret]);​
 +
 +}
 +
 +</​code>​
 +
 +
 +===== Decimális szám binárissá alakítása =====
 +
 +
 +
 +<code c>
 +
 +#include <​stdio.h>​
 +
 +#define VEREMMERET 100
 +
 +typedef struct ​
 +{
 +    int meret;
 +    int elem[VEREMMERET];​
 +} Tverem;
 +
 +
 +main()
 +{
 +
 +    int szam;
 +    Tverem verem;
 +    verem.meret = 0;
 +    ​
 +    szam = 3;
 +
 +    printf("​Szam:​ ");
 +    scanf("​%d",​ &szam);
 +    ​
 +    while(szam != 0)
 +    {
 +        //​printf("​%d",​ szam % 2);
 +        verem.elem[verem.meret++] = szam % 2;
 +        szam = szam /2;
 +    }
 +
 +    int db = verem.meret;​
 +    ​
 +    int i;
 +    ​
 +    for(i = 0; i < db; i++)
 +        printf("​%d",​ verem.elem[--verem.meret]);​
 +
 +    printf("​\n"​);​
 +
 +
 +}
 +
 +</​code>​
 +
 +===== Decimális szám binárissá másként =====
 +
 +
 +<code c>
 +
 +#include <​stdio.h>​
 +
 +void dec2bin(long szam, char *binaris)
 +{
 +    int i;
 +    char temp[50];
 +    int k = 0, n = 0;
 +
 +    while(szam != 0)
 +    {
 + //​verem.elem[verem.meret++] = szam % 2;
 + temp[k++] = (szam % 2) + '​0'​ ;
 + szam = szam /2;
 +    }
 +
 +    while (k >= 0)
 +         ​binaris[n++] = temp[--k];
 +
 +    binaris[n-1] = 0;
 +}
 +
 +
 +int main()
 +{
 +
 +    int szam;
 +    char eredmeny[30];​
 +
 +
 +    printf("​Szam:​ ");
 +    scanf("​%d",​ &szam);
 +
 +    dec2bin(szam,​ eredmeny);
 +
 +    printf("​%s\n",​ eredmeny);
 +
 +}
 +
 +</​code>​
 +
 +
 +===== Bitművelet számokon =====
 +
 +
 +<code c>
 +
 +#include <​stdio.h>​
 +#include <​math.h>​
 +#include <​string.h>​
 +
 +
 +void dec2bin(long szam, char *binaris)
 +{
 +    int i;
 +    char temp[50];
 +    int k = 0, n = 0;
 +
 +    while(szam != 0)
 +    {
 + //​verem.elem[verem.meret++] = szam % 2;
 + temp[k++] = (szam % 2) + '​0'​ ;
 + szam = szam /2;
 +    }
 +
 +    while (k >= 0)
 +         ​binaris[n++] = temp[--k];
 +
 +    binaris[n-1] = 0;
 +}
 +
 +
 +long bin2dec(char *szam)
 +{
 +    int a, i, j;
 +    char ch;
 +    long osszeg = 0;
 +
 +    j = strlen(szam) - 1;
 +    i = 0;
 +
 +    while(i < strlen(szam))
 +    {
 + ch = szam[i];
 + if (ch == '​1'​) osszeg = osszeg + pow(2, j);
 + i++;
 + j--;
 +    }
 +
 +    return osszeg;
 +}
 +
 +main()
 +{
 +
 +    char szam1[50], szam2[50], szam3[50];
 +    long a, b, c;
 +
 +    printf("​Bináris szám 1 : ");
 +    scanf("​%s",​ szam1);
 +    a = bin2dec(szam1);​
 +
 +    printf("​Bináris szám 2 : ");
 +    scanf("​%s",​ szam2);
 +    b = bin2dec(szam2);​
 +
 +    c = a | b;
 +
 +    dec2bin(c, szam3);
 +
 +    printf("​Bináris szám 3 : %s\n", szam3);
 +
 +    getchar(); // Enter elkapása
 +    getchar(); // Várakozás
 +
 +}
 +
 +</​code>​
 +
 +===== Várakozás egy billentyűnyomásra =====
 +
 +Ha egy karaktert viszünk be a billentyűzeten a következő karaktert csak úgy kéri be a program, ha "​elkapjuk"​ az Enter billentyűt.
 +<code c>
 +
 +#include <​stdio.h>​
 +
 +main()
 +{
 +    char a;
 +    ​
 +    printf("​Karakter:​ ");
 +    scanf("​%d",​ &a);
 +    ​
 +    getchar(); //Enter elkapása
 +    getchar(); //​Várakozás
 +
 +}
 +
 +</​code>​
 +
 +===== Három karakter bekérése =====
 +
 +
 +<code c>
 +
 +#include <​stdio.h>​
 +
 +main()
 +{
 +    char a, b, c;
 +    ​
 +    printf("​Karakter:​ ");
 +    scanf("​%d",​ &a);
 +
 +    getchar();
 +
 +    printf("​Karakter:​ ");
 +    scanf("​%d",​ &b);
 +
 +    getchar();
 +
 +    printf("​Karakter:​ ");
 +    scanf("​%d",​ &c);
 +}
 +
 +</​code>​
 +
 +
 +===== Függvény, amely visszaadja egy sztring hosszát =====
 +
 +
 +<code c>
 +/*
 +  Írjon függvényt,​ amely megszámolja egy
 +  karaktersorozat karaktereit. A függvény
 +  adja vissza a karakterek számát. ​
 +  Mentés: hossz  ​
 +*/
 +
 +#include <​stdio.h>​
 +
 +int sajat_strlen(char *str)
 +{
 + int szamlalo = 0;
 + while(str[szamlalo] != '​\0'​)
 + szamlalo++;​
 + return szamlalo;
 +}
 +
 +main()
 +{
 + int a = sajat_strlen("​vmi"​);​
 + printf("​%d\n",​ a); 
 + getchar();
 +}
 +</​code>​
 +
 +
 +===== Jelszóbekérés =====
 +
 +<code c>
 +  ​
 +#include <​stdio.h>​
 +#include <​unistd.h>​
 +#include <​crypt.h>​
 +
 +main()
 +{
 +  char *jelszo;
 +  ​
 +  jelszo = crypt(getpass("​Jelszó:​ "));
 +  ​
 +  puts(jelszo);​
 +
 +}
 +
 +</​code>​
 +
 +Fordítás:
 +<code bash>
 +gcc -l crypt -o main main.c
 +</​code>​
 +
 +A MinGW rendszerben alapértelmezetten nincs benne a getpass. A getpass viszont
 +megtalálható a conio.sf.net conio2.h fejállományában. ​
 +
 +===== Sztring darabolás =====
 +
 +<code c>
 +#include <​stdlib.h>​
 +#include <​string.h>​
 +
 +int main()
 +{
 +    char *tomb[5];
 +    char *sor;
 +    int i;
 +
 +    printf("​Darabolás\n"​);​
 +    sor = (char*) malloc(50*sizeof(char));​
 +    for(i=0; i<5; i++)
 +        tomb[i] = (char*) malloc(50*sizeof(char));​
 +
 +
 +    strcpy(sor,"​alma a fa alatt"​);​
 +
 +    tomb[0] = strtok(sor,"​ ");
 +    i = 0;
 +    while(tomb[i]!= NULL)
 +    {
 +        i++;
 +        tomb[i] = strtok(NULL,​ " "); //​darabolunk
 +    }
 +
 +    printf("​%s\n",​ tomb[1]);
 +
 +    return 0;
 +}
 +</​code>​
 +
 +===== Bitek forgatása (rotálás) =====
 +
 +Bitenkénti rotálás és bináris formában kiírás.
 +
 +<code c Program01.c>​
 +#include <​stdio.h>​
 +#include <​limits.h>​
 +
 +unsigned int rotateLeft(unsigned int num, int shift) {
 +    return (num << shift) | (num >> (sizeof(num) * CHAR_BIT - shift));
 +}
 +
 +unsigned int rotateRight(unsigned int num, int shift) {
 +    return (num >> shift) | (num << (sizeof(num) * CHAR_BIT - shift));
 +}
 +
 +void printBin(unsigned n) {
 +    unsigned i;
 +    for (i = 1 << 31; i > 0; i = i / 2) {
 +        (n & i) ? printf("​1"​) : printf("​0"​);​
 +    }
 +    printf("​\n"​);​
 +}
 +
 +int main() {
 + int num = 32;
 + printBin(num);​
 + num = rotateRight(num,​ 6);
 + printBin(num);​
 +
 + return 0;
 +}
 +
 +</​code>​
 +===== Olvasás állományból while fejrészében ​ =====
 +
 +<code c>
 +while(fscanf(f,​ "​%lf",​ &​a)>​0) {
 +
 +}
 +</​code>​