Úvod do jazyka C Algoritmizácia úloh.

Slides:



Advertisements
Podobné prezentace
Procedurálne programovanie: 3. prednáška
Advertisements

Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
Sčítanie a odčítanie výrazov
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
Struktury.
Využitie vlastností kvapalín
ODBYT registračné pokladnice: kontrola stavu hotovosti
Osobný počítač Kornélia Kontrová 1.OB.
PaedDr. Jozef Beňuška
Regulácia napätia alternátora
OSOBNÝ POČÍTAČ.
Počítač s príslušenstvom INF V. ročník
ÚČTOVNÍCTVO Časové rozlíšenia.
Tolerancie rozmerov Kód ITMS projektu:
Príkazy pre prácu s textom
Algoritmizácia úloh.
Zápisný lístok.
Mgr. Antónia Lovásiková pre 6. ročník ZŠ
REALIZÁCIA PROGRAMU 3. etapa tvorby programu
Množiny.
L1 cache Pamäť cache.
Stredná odborná škola automobilová Moldavská cesta 2, Košice
„Brutácia“ nepeňažného príjmu
Finančný trh PODNADPIS
Násobenie výrazov – 2 (odstránenie zátvorky)
VÝRAZ S PREMENNOU 8.ročník.
SME MEDZINÁRODNE CERTIFIKOVANÁ ŠKOLA.
Kreslenie v textovom dokumente 1.časť
Rímske číslice Pre 5. ročník ZŠ.
Vzájomná poloha dvoch kružníc
Ako príklad inštalácie uvádzame Bullzip Free PDF Printer.
Úprava tabuliek Kód ITMS projektu „Učíme inovatívne, kreatívne a hravo – učíme pre život a prax“ „Moderné vzdelávanie pre vedomostnú spoločnosť.
Časti počítača von Neumannovského typu
Riadenie zbernice.
Vstupné zariadenia.
PaedDr. Jozef Beňuška
Kľúč na určovanie rastlín
Elektronická výplatná páska
Droga nie je riešenie Droga je každá látka, ktorá po požití určitým spôsobom mení normálne fungovanie organizmu.
Práca so zálohami.
Deliť celok na rovnaké časti / opakovanie /.
Stredná odborná škola automobilová Moldavská cesta 2, Košice
Rastrova a Vektorov grafika
Poznámky z teórie kriviek a plôch Margita Vajsáblová
Geografické informačné systémy
Pojem, modely zavádzania zlomkov, porovnávanie, operácie so zlomkami.
Zmeny v podsystéme v roku 2017
Divergentné úlohy v matematike
PaedDr. Jozef Beňuška
Pohybová a polohová energia
Výskumný súbor.
Úvod do jazyka C Programovací jazyk C.
Hardware Pamäťové média.
Orientácia na pracovnej ploche
MS POWERPOINT ZŠ, Z. Nejedlého 2 Spišská Nová Ves
Stredná odborná škola automobilová Moldavská cesta 2, Košice
Digitalizácia informácií
Jednoduché stroje páka, kladka, naklonená rovina
Delenie desatinného čísla desatinným číslom
Písanie dátumov, časových údajov a telefónnych čísel
Obsah obdĺžnika a štvorca
VLOOKUP (po česky SVYHLEDAT)
RIEŠENIE LINEÁRNYCH ROVNÍC A NEROVNÍC
MEDLINE Complete ~ Vyhľadávanie
Tutoriál ~ eKnihy Sťahovanie
4. Algoritmy a programovanie v jazyku Pascal Cykly a riadenie
Stredná odborná škola automobilová Moldavská cesta 2, Košice
Řetězce (1) Řetězec (string) je posloupnost znaků (hod-not typu char)
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

Úvod do jazyka C Algoritmizácia úloh

Reťazce Reťazec je špeciálny typ jednorozmerného poľa. Je zložený z prvkov typu char. Definícia reťazca char str[] = “Toto je retazec"; char str[50] = “Toto je retazec";

Reťazec voľná pamäť a h o j \0 index 1 2 3 4 5 6 7 Reťazec je vždy ukončený znakom \0 . Podľa tohto znaku sa pozná koniec reťazca a môže sa určiť jeho dĺžka. Pokiaľ zabudneme na koniec reťazca dať znak \0 bude program považovať za reťazec všetko až do konca pamäte alebo nasledujúceho znaku \0.

Dĺžka reťazca je obmedzená len veľkosťou pamäte Dĺžka reťazca je obmedzená len veľkosťou pamäte. Z pridelenej pamäte je ale využitá len časť od začiatku až do prvého znaku \0. Zvyšná pridelená pamäť je nevyužitá. Pri alokování pamäte pre reťazec musíme pamätať aj na koncový znak \0 – tzn. výsledný reťazec bude dlhší o jeden bajt

char str[50] = "Toto je retazec"; alokuje sa pole o 50-ich byte-och a naplní sa reťazcom char str[] = “retazec"; prekladač automaticky alokuje miesto o 7. byte-och 0 1 2 3 4 5 6 7 r e t a z e c \0

Práca s reťazcami char meno[30]; char priezvisko[30]; scanf("%s", &meno); Program načíta meno a priezvisko scanf("%s %s", &meno, &priezvisko); 6 6

Práca s reťazcami char meno[50]=“Jan”, priezvisko[50]=“Novak”; printf("%s", meno); printf("%s %s", meno, priezvisko); Príkaz vytlačí všetky znaky reťazca, t.j. znaky mena, printf("%s", "abc"); Príkaz vytlačí všetky znaky reťazca, t.j. znaky abc,

Dôležité je uvedomiť si rozdiel medzi jedným znakom, napr. 'a' a  reťazcom dĺžky 1, napr. "a", ktorý musí byť ukončený binárnou nulou \0 a preto predstavuje pole znakov o dĺžke 2.

char pozdrav[] = {'A','h','o','j','\0'}; sú ekvivalentné zápisy

Práca so znakmi reťazca – vybratie znaku char meno[]=“Peter”; char c; c=meno[2]; printf(“\n\r Treti znak je: %c”, c);

Práca so znakmi reťazca – prepísanie znaku Jednotlivé znaky sa adresujú indexom v zátvorkách, napr. char meno[]=“Peter”; meno[3]=‘x’; printf(“\n\r Meno: %s”, meno);

Výpis po znakoch I. char meno[]=“Peter Novak”; int i; for(i=0; i<strlen(meno); i++) { printf(“\n\r Znak %d: %c”, i, meno[i]); }

Výpis po znakoch II. char meno[]=“Peter Novak”; int i; for(i=0; i<4; i++) { printf(“\n\r Znak %d: %c”, i, meno[i]); }

Ako naplniť reťazec Čo robiť, ak už je deklarované pole a potrebujeme ho naplniť až neskôr? char text[10]; text = “Pavol"; Použijeme kopírovanie jedného reťazca do iného pomocou funkcií strcpy,strncpy a sprintf.

Na kopírovanie jedného retazca do iného slúži funkcia strcpy. Funkcia má dva parametre strcpy(meno,“Peto"); strcpy(meno2, meno1); // mozne varianty strcpy( &meno2, &meno1); // lepsia verzia strcpy( (char*)&meno2 , (char*)&meno1);

Na kopírovanie jedného retazca do iného slúži funkcia strncpy. Funkcia má tri parametre char pole[9]; strncpy(pole,“Dlhy retazec",9); pole[9] = '\0'; int dlzka=4; strncpy(pole,“Dlhy retazec",dlzka); pole[dlzka] = '\0'; 21 21

Kopírovanie jedného reťazca do druhého int main() { char text[10] = "Ahoj"; printf(“\n\r %s ", text); strcpy(text,“Iny text"); printf(“\n\r %s", text); return 0; }

Kopírovanie jedného reťazca do druhého int main() { char text[100]; strncpy(text,“Toto je dlhy text",9); text[9] = '\0'; printf("%s \n", text); return 0; } 23 23

Načítanie reťazca z klávesnice scanf(“%s”, &retazec); fgets(retazec,9,stdin); // z klávesnice fgets(retazec,9,fp); // zo súboru Funkcia fgets prečíta jeden riadok z klávesnice alebo súboru určeného tretím parametrom Ak miesto súboru bude stdin, bude čítať z klávesnice a vloží ho do reťazca určeného prvým parametrom. Číslo v strede hovorí, koľko maximálne znakov sa môže prečítať.

Štandardné funkcie pre prácu s reťazcami Knižnica string.h Dlžka reťazca dlzka=strlen(“text“); vráti hodnotu dĺžky reťazca bez znaku \0 Kopírovanie reťazca strcpy(s2, s1); skopíruje obsah reťazca s1 do s2 Spojenie reťazcov strcat(s2, s1); pripojí s1 k reťazcu s2 Nájdenie znaku v reťazci strchr(s1, ‘x’); keď sa znak x v reťazci vyskytuje vráti pointer na tento znak inak hodnotu NULL

Štandardné funkcie pre prácu s reťazcami Porovnanie dvoch reťazcov strcmp(s2, s1); funkcia vráti 0 keď sú reťazce rovnaké, keď je s1 menší kladné číslo a opačne. Nájdenie podreťazca v reťazci strstr(s2,s1); Nájde prvý výskyt reťazca s1 v reťazci s2 a vráti pointer na tento výskyt alebo vráti NULL v prípade neúspechu. Práca s reťazcami v opačnom poradí V C sú definované funkcie, ktoré vedia pracovať s reťazcami odzadu. Tieto funkcie sa podobajú príslušným základným funkciám s tým rozdielom, že pred názov sa vkladá písmeno r (reverse) strrchr(s1, 'x') Príklad na hľadanie znaku v reťazci.

Funkcie, ktoré pracujú s reťazcami Funkcia strlen zistí dlžku retazca. Teda strlen("Ahoj") bude 4. Funkcia strcmp vie porovnať dva reťazce podľa abecedy. Ak je prvý menší, výsledok je záporné číslo, ak je väčší, kladné a ak sú reťazce rovnaké, výsledok je 0. strcmp("Adam","Eva") je 4,

Štandardné funkcie pre prácu s reťazcami char cele_meno[40]; // tu bude spojene meno a priezvisko char meno[]=“Peter”; char priezvisko[]=“Novak”; strcat(cele_meno, meno); strcat(cele_meno, priezvisko); printf(“\n\r Cele meno je: %s ”, cele_meno);

Štandardné funkcie pre prácu s reťazcami int rovnake; char meno1[40], meno2[40]; printf(“\n\r Zadaj 1. meno: ”); scanf(“%s”,meno1); printf(“\n\r Zadaj 2. meno: ”); scanf(“%s”,meno2); rovnake=strcmp(meno1,meno2); if(rovnake==0) printf(“\n\r Mena su rovnake”); else printf(“\n\r Mena su rozdielne”);

Prevod reťazcov na čísla V programe sa často potrebuje konvertovať číselnú hodnotu premennej na odpovedajúci reťazec alebo naopak. V rámci vstupov funkcie scanf() a printf() konverziu vykonávajú automaticky. Funkcie pre konverziu sú v knižnici stdlib.h atoi(s1) – int atol(s1) – long atof(s1) - double

Príklad konverzia reťazca #include <stdio.h> #include <stdlib.h> #include "moje.h" int main() { int i; char s1[] = "123"; i = atoi(s1); //konverzia reťazca na číslo printf(“\n\r Retazec: %s\n", s1); //tlač reťazca printf(“\n\r Cislo: %d“, i); //tlač premennej i typu int }

Formátovaný zápis do reťazca Pre zápis do reťazca je možné použiť aj funkciu sprintf(). V tomto prípade sú do reťazca uložené údaje, ktoré môžu byť neskôr vypísané: sprintf(ciel_retazec,“format_retazec“, argumenty) 36 36

Formátovaný zápis do reťazca Zápis dát do reťazca, ktorý môže byť neskôr ďalej využitý: sprintf(s1, “%d”,i); #include <stdio.h> int main() { int i = 5; char s1[20]; sprintf(s1, "Cele cislo je: %d", i); printf("%s\n",s1); return 0; } Funkcia sprintf() pracuje rovnako ako fprintf() s tým rozdielom, že namiesto do súboru zapisuje do súboru.

Formátované čítanie a zápis do reťazca Čítanie z reťazca a uloženie obsahu reťazca so špecifikovaným formátovaním do premennej sscanf(s1, “%d %d”, &cislo1, &cislo2); Funkcia sprintf() a sscanf() umožňujú konverziu čísel na reťazce a naopak.