Računarski praktikum I - Vježbe 03 - Implementacija strukture string

Слични документи
Računarski praktikum I - Vježbe 07 - Podstrukture, const, reference

Računarski praktikum I - Vježbe 09 - this, static

Uvod u računarstvo 2+2

Microsoft PowerPoint - MR - Vjezbe - 03.ppt [Compatibility Mode]

Računarski praktikum I - Vježbe 11 - Funktori

Uvod u računarstvo 2+2

Računarski praktikum I - Vježbe 01 - Uvod

Uvod u računarstvo 2+2

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4

Računarski praktikum I - Vježbe 06 - Standard Template Library (2)

Programiranje II Beleške sa vežbi Smer Informatika Matematički fakultet, Beograd Sana Stojanović 1

Funkcije predavač: Nadežda Jakšić

070-ALIP2-udzbenik.indb

1 jmbag ime i prezime Programiranje 2 prvi kolokvij, Rezultati i uvidi u kolokvije: Rezultati u petak, 3.5., navečer na webu, a uvidi u p

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

1. Vremensko ograničenje Memorijsko ograničenje ulaz izlaz 0,1 s 64 MB standardni ulaz standardni izlaz Banka želi da upozori kupce na sumnjive aktivn

Programiranje 2 popravni kolokvij, 15. lipnja Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanj

Tutoring System for Distance Learning of Java Programming Language

Microsoft PowerPoint - Datoteke [Compatibility Mode]

Uvod u računarstvo 2+2

Microsoft Word - 11 Pokazivaci

Tutoring System for Distance Learning of Java Programming Language

Tutoring System for Distance Learning of Java Programming Language

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

Programski jezik C

PowerPoint Presentation

Programiranje za UNIX Okruženje unix procesa

Funkcije predavač: Nadežda Jakšić

Datoteke predavač: Nadežda Jakšić

Microsoft PowerPoint - OOPpredavanja05 [Compatibility Mode]

Programiranje 1 5. predavanje dodatak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 5. predavanj

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

Programski jezici i strukture podataka

Strukture predavač: Nadežda Jakšić

Grananje u programu predavač: Nadežda Jakšić

Sveucilište u Zagrebu

Microsoft PowerPoint - 07-DinamickeStrukturePodataka

Uvod u PHP

Programiranje 2 7. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 7. predavanje p. 1/7

Zadatak 011 Razmotrite sljedeći primjer. package hr.fer.oopj.primjeri.p011; public class Main { } public static void main(string[] args) { obrada(2.71

Microsoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode]

PROGRAMIRANJE Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Algoritam je postupak raščlanjivanja problema na jednostavnije

PRIRODNO MATEMATIČKI FAKULTET U NIŠU DEPARTMAN ZA RAČUNARSKE NAUKE Utorak, godine PRIJEMNI ISPIT IZ INFORMATIKE 1. Koja od navedenih ekste

Microsoft PowerPoint - Bitovi [Compatibility Mode]

Slide 1

Државно такмичење године 5. и 6. разред 1. [pločice] Правоугаону терасу димензија d s центиметара квадратних треба поплочати коришћењем плочица

07_PJISP_II_Predavanja

CIJELI BROJEVI 1.) Kako još nazivamo pozitivne cijele brojeve? 1.) Za što je oznaka? 2.) Ispiši skup prirodnih brojeva! 3.) Kako označavamo skup priro

Računarske mreže Čas 2 Ivana Tanasijević Matematički fakultet, Beograd 1

Programski jezik C

1. OPĆE INFORMACIJE 1.1. Naziv kolegija Programiranje 1.6. Semestar Nositelj kolegija dr.sc. Bruno Trstenjak, v. pred Bodovna vrijednost

Microsoft PowerPoint - 12-Funkcije_1.ppt [Compatibility Mode]

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvrsnog_Programa [Compatibility Mode]

Programiranje 1 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević December 5, 2007

Uvod u takmičarsko programiranje

PowerPoint Presentation

Programiranje 1 IEEE prikaz brojeva sažetak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, IEEE p

Osnovni programiranja I

PowerPoint Presentation

PowerPoint Presentation

Programiranje predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2016, 10. predavanje p. 1

Konverzije, operatori, matematičke funkcije predavač: Nadežda Jakšić

Objektno orjentirano programiranje 2P

ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, Ispit iz Programiranja 2 Ispit traje 135 minuta Napomene: a) Pažljivo proučite U

Programiranje 1 drugi kolokvij, 2. veljače Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanje,

Microsoft Word - Zadaci za samostalno vjezbanje 4.doc

PowerPoint Presentation

MergedFile

PASCAL UVOD 2 II razred gimnazije

The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature opti

Programiranje 1 9. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 9. predavanje p. 1/6

ZADACI ZA VJEŽBU 1. Dokažite da vrijedi: (a) (A \ B) (B \ A) = (A B) (A C B C ), (b) A \ (B \ C) = (A C) (A \ B), (c) (A B) \ C = (A \ C) (B \ C). 2.

Oblikovanje i analiza algoritama 5. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb OAA 2017, 5. pr

Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Br

I grupa 1. Napisati program koji izračunava i ispisuje zbir 4 najveća od pet brojeva unetih sa standardnog ulaza. ulaz izlaz Analiza: 1.

Microsoft PowerPoint - 10-Jednodimenzionalni nizovi.ppt [Compatibility Mode]

P11.3 Analiza zivotnog veka, Graf smetnji

JMBAG IME I PREZIME BROJ BODOVA 1. (ukupno 6 bodova) MJERA I INTEGRAL 1. kolokvij 4. svibnja (Knjige, bilježnice, dodatni papiri i kalkulatori n

Državno natjecanje / Osnove informatike Srednje škole Zadaci U sljedećim pitanjima na odgovore odgovaraš upisivanjem slova koji se nalazi ispred

PHP kod

03 SUBP

3.Kontrlne (upravlja~ke) strukture u Javi

2015_k2_z12.dvi

Microsoft Word - 6ms001

Microsoft PowerPoint - 11.Programski_Jezik_C_ulaz-izlaz [Compatibility Mode]

18. ožujka Državno natjecanje / Osnovna škola (6. razred) Primjena algoritama (Basic/Python/Pascal/C/C++) Sadržaj Zadaci... 1 Zadatak: Kineski..

(Microsoft Word - 1. doma\346a zada\346a)

Primenjeno programiranje - vezbe GUI i baze podataka

Класе комбинација презентације (Хортона) и к о бајаги скрипте (Ово је прича коју врло радо причам) нови тип података: дефинишу могуће вредности подата

Zadaća 4. Ova zadaća nosi ukupno 4 poena, pri čemu prva dva zadatka nose po 1 poen, treći zadatak 1,5 poen i četvrti zadatak 0.5 poena. Svi zadaci se

MJEŠOVITA SREDNJA TEHNIČKA ŠKOLA TRAVNIK PROGRAMIRANJE I PROGRAMSKI JEZICI PROGRAMSKI JEZIK C -SKRIPTA ZA INTERNU UPOTREBU-

Objektno orjentirano programiranje

Microsoft Word - predavanje8

Microsoft Word - Rjesenja zadataka

Slide 1

Програмирај!

Sveučilište u Zagrebu PMF Matematički odsjek Mreže računala Vježbe 10 Zvonimir Bujanović Luka Grubišić Vinko Petričević

Osnove inženjerske informatike II. Uvod u programiranje Vaš prvi program K. F. & V. B.

Algoritmi SŠ P1

Транскрипт:

Prirodoslovno-matematički fakultet Matematički odsjek Sveučilište u Zagrebu RAČUNARSKI PRAKTIKUM I Vježbe 03 - Implementacija strukture string v2018/2019. Sastavio: Zvonimir Bujanović

Stringovi u C-u String u C-u je polje char-ova koje završava znakom '\0'. char s1[50], s2[50]; strcpy( s1, "bla bla" ); strcpy( s2, s1 ); strcat( s1, "nesto" ); int dulj = strlen( s1 ); Operacije sa stringovima u C-u su globalne funkcije. 2

Stringovi u C++-u String u C++-u je struktura koja se sama brine za sebe. #include <string> int main( void ) std::string A( "bla bla" ), B; } B = A; A.append( B ); int dulj = A.size();... U ovim vježbama ćemo: 1 Upoznati funkcije iz strukture string. 2 Sami implementirati strukturu koja ima (skoro) istu funkcionalnost. 3

String: Konstruktori Defaultni konstruktor (bez parametara). string S; // sad je S prazan string Konstruktor koji prima C-ovski string. string S( "nesto" ); // sad je S = "nesto" Konstruktor koji stvara string od nekoliko kopija istog znaka. string S( 5, 'X' ); // sad je S = "XXXXX" 4

String: Konstruktori Alternativni način pozivanja konstruktora. (Ovo radi i za bilo koje druge strukture.) string S; S = string( "nesto" ); // sad je S = "nesto" string S; S = string( 5, 'X' ); // sad je S = "XXXXX" Sa desne strane smo stvorili privremenu, anonimnu varijablu koja se zatim prekopirala u varijablu S. 5

String: Ispisivanje i učitavanje Stringove možemo učitavati sa cin i ispisivati sa cout. string S; cin >> S; cout << S; Stringove (kao ni druge strukture koje sami napišemo!) ne možemo učitavati sa scanf ni ispisivati sa printf! Vidjet ćemo kasnije kako naučiti cin i cout ispisivati naše strukture (npr. varijable tipa tocka). 6

String: Veličina i konverzija u C-ovski string size() - vraća duljinu stringa string S( "nesto" ); int a = S.size(); // sad je a=5 c_str() - vraća pokazivač na C-ovski string. string Scpp( "nesto" ); char Sc[20]; // Kopiramo string iz Scpp u Sc. // Za Sc treba postojati dovoljno memorije. strcpy( Sc, Scpp.c_str() ); printf( "%s", Scpp.c_str() ); // OK printf( "%s", Scpp ); // NIJE OK! // Kopiranje u obratnom smjeru NE RADI -> konstruktor. strcpy( Scpp.c_str(), Sc ); // NIJE OK! 7

String: Kopiranje Kopiranje jednog stringa u drugi. string A( "nesto" ), B; B = A; // sada je B = "nesto" Kopiranje stringova u C-u nismo mogli raditi ovako! U C-u su stringovi polja (tj. pokazivači), pa bi se B=A interpretiralo kao kopiranje pokazivača (memorijskih adresa). S druge strane, kopiranje struktura u C/C++ oblika B=A funkcionira: sva memorija ( niz nula i jedinica ) koju zauzima varijabla A se prekopira u memoriju koju zauzima varijabla B. 8

String: Dodavanje na kraj append() - dodavanje jednog stringa na kraj drugog string A( "nesto" ), B( "drugo" ); A.append(B); // sad je A="nestodrugo" B.append(3,'Z'); // sad je B="drugoZZZ" Alternativno, možemo koristiti i operatore. string A( "nesto" ), B( "drugo" ); A += B; B = B + "ZZZ"; string C = string("xyz") + "ABC" // OK string C = "XYZ" + "ABC" // NIJE OK: bar jedan mora biti C++ 9

String: Operatori uspoređivanja Uspoređivanje jednakosti. string S( "bla" ), T( "nesto" ); if( S == T ) cout << "isti"; else cout << "nisu isti"; // ovo se ispise Uspoređivanje po abecedi. string S( "bla" ), T( "nesto" ); if( S < T ) cout << "T je veci"; // ovo se ispise else cout << "S je veci"; 10

String: Podstringovi substr(pocetak, duljina) - vraća podstring od duljina znakova koji počinje na indexu pocetak. string A( "Nesto" ), B; B = A.substr( 3, 2 ); // B="to" erase(pocetak, duljina) - briše podstring od duljina znakova koji počinje na indexu pocetak. string S( "nestodrugo" ); S.erase( 2, 6 ); // sad je S="nego" 11

String: Podstringovi find(stotrazim, gdjepocinjem) - vraća index na kojem se prvi put nakon indexa gdjepocinjem javlja podstring stotrazim. string A( "kokodako" ); int gdje = A.find( "ko", 1 ); // gdje=2 // trazi "ko" pocevsi od indexa 1 (ne 0) // "ko" se prvi put (iza indexa 1) javi na indexu 2 Ako find ne uspije naći podstring, vraća string::npos. string S( "kokoda" ), T( "kokos" ); int gdje = S.find( T, 0 ); if( gdje == string::npos ) cout << "nema ga"; 12

String: Pristup pojedinim znakovima Znakovima u stringu možemo pristupiti pomoću uglatih zagrada, kao u C-u. string S( "nesto" ); char znak = S[3]; // znak='t' S[2] = 'r'; // sad je S="nerto"; Postoje i mnoge druge funkcije, vidi: http://www.cplusplus.com/reference/string/string/ 13

Zadatak 1 Napišite program koji, redom: 1 Učitava dva stringa A i B. 2 Briše svako pojavljivanje stringa B kao podstringa od A. Označimo sa n broj tih pojavljivanja. 3 n kopija stringa B dodaje na kraj stringa A. Na primjer, ako je A="kokodako" i "B=ko", onda u koraku 2 pronalazimo n=3 kopije, a nakon brisanja vrijedi A="da". Nakon koraka 3 je A="dakokoko". 14

Zadatak 2 Implementirajte svoj tip podatka MyString koji ima dio funkcionalnosti stringa iz C++-a: sve konstruktore funkcije size(), append(), substr(), find() umjesto A=B neka postoji funkcija A.copy(B) umjesto A==B neka postoji A.isEqual(B) umjesto A<B neka postoji A.isLessThan(B) Pretpostavite da je duljina stringa max. 100 znakova. U slučaju da bi neki poziv funkcije rezultirao duljim stringom, prijavite grešku. 15

Strukture sa dinamički alociranim poljem Što ispisuje sljedeći fragment koda? struct MyString char polje[100];... }; void test( MyString S ) S.polje[1] = 'A'; cout << S.polje; } int main( void ) MyString S("XYZ"); } test( S ); cout << S.polje; return 0; 16

Strukture sa dinamički alociranim poljem Što ispisuje sljedeći fragment koda? struct MyString char *polje;... }; void test( MyString S ) S.polje[1] = 'A'; cout << S.polje; } int main( void ) MyString S("XYZ"); } test( S ); cout << S.polje; return 0; Ako korisnik strukture ne vidi njezinu implementaciju, očekuje li ovakav ispis ili onaj s prethodne stranice? 17

Copy-konstruktor Trebamo naučiti strukturu sa dinamički alociranim poljem da se na ispravan način zna prenijeti kao parametar u funkciju. Za prenošenje parametara u funkciju zadužena je jedna specijalna vrsta konstruktora: tzv. copy-konstruktor. On služi ispravnom kopiranju dvaju istovrsnih objekata. Treba nam samo kod struktura sa dinamički alociranim elementima. 18

Copy-konstruktor Svaka struktura odmah po deklaraciji ima implicitni copy-konstruktor: on svu memoriju koju zauzima objekt P prekopira u objekt koji se konstruira. Ako ga sami ne napišemo, događa se sljedeće: struct proba int a, *b, c[100]; double x; }; proba( const proba &P ) // kopiraj memoriju koju zauzima P u memoriju // koju zauzima objekt koji se konstruira } Napomena: proba &P je tzv. referenca više o referencama kasnije. 19

Copy-konstruktor Dakle, implicitni copy-konstruktor radi sljedeće: struct proba int a, *b, c[100]; double x; }; proba( const proba &P ) a = P.a; b = P.b; // polje P.c se zatim byte po byte kopira u polje c // jer se memorija koju zauzima P.c nalazi // "unutar" varijable P x = P.x; } 20

Copy-konstruktor Kod strukture MyString, implicitni copy-konstruktor bi napravio ovo: struct MyString char polje[100]; }; MyString( const MyString &A ) cout << "copy-konstruktor!"; strcpy( polje, A.polje ); }... MyString A( "nesto" ); MyString B( A ); // poziv copy-kon!!! test( A ); // poziv copy-kon!!! (Zapravo, svih 100 znakova iz A.polje bi se prekopiralo u polje.) 21

Copy-konstruktor Uz dinamičku alokaciju za polje, unutar copy-konstruktora moramo alocirati novo polje! struct MyString char *polje; }; MyString( const MyString &A ) cout << "copy-konstruktor!"; polje = (char *) malloc( A.size() + 1 ); strcpy( polje, A.polje ); }... MyString A( "nesto" ); MyString B( A ); // poziv copy-kon!!! test( A ); // poziv copy-kon!!! 22

C++11: ključna riječ nullptr Do sada smo NULL-pokazivač inicijalizirali ovako: #include <stdlib.h> // NULL je makro-konstanta definirana u stdlib.h int *p = NULL; C++11 - Uvodi se nova ključna riječ nullptr. int *p = nullptr; 23

Zadatak 3 Promijenite program iz Zadatka 2 tako da podržava stringove varijabilne duljine. Svaki string treba zauzimati točno onoliko memorije koliko znakova ima (i jedan dodatni za '\0'). append treba napraviti realokaciju memorije. Radi jednostavnosti koristite malloc, free i realloc. Napomena: u C++-u nema ekvivalenta funkciji realloc pa bi trebalo raditi nekoliko new+delete-ova da bi se implementirala funkcija append. 24