A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
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> | ||