Dariusz Chaberski. UMK Toruń

Podobne dokumenty
// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Wstęp do programowania 1

Wskaźniki. Informatyka

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach

Programowanie Proceduralne

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

x szereg(x)

Wstęp do Programowania, laboratorium 02

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Czy procesor musi się grzać?

dynamiczny przydział pamięci calloc() memset() memcpy( ) (wskaźniki!! )

podstawy programowania

5 Przygotował: mgr inż. Maciej Lasota

Zaawansowane programowanie w języku C++ Przeciążanie operatorów

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

Programowanie Proceduralne

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Wstęp do programowania 1

Wykład :37 PP2_W9

Programowanie 2. Język C++. Wykład 3.

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Uzupełnienie dot. przekazywania argumentów

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

Podstawy Programowania C 03

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Alokacja pamięci dla tablicy dwuwymiarowej

Wskaźniki. Programowanie Proceduralne 1

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 3 - sem.iii. Dr inż. M. Czyżak

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

Wskaźniki w C. Anna Gogolińska

Programowanie 2. Język C++. Wykład 2.

Programowanie w języku C++

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

Podstawy programowania w języku C++

Funkcja (podprogram) void

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Pobieranie argumentów wiersza polecenia

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

nowe operatory &. (kropka) * operator rzutowy ->, (przecinek) sizeof

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

Projektowanie klas c.d. Projektowanie klas przykład

PRZYKŁADY OPERACJI PLIKOWYCH z wykorzystaniem biblioteki <stdio.h>

Programowanie komputerowe. Zajęcia 4

Wykład 1

Część 4 życie programu

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory

Wykład 5_2 Algorytm ograniczania liczby serii za pomocą kopcowego rozdzielania serii początkowych

Wstęp do programowania

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Język C++ Różnice między C a C++

Języki i metodyka programowania. Wskaźniki i tablice.

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Podział programu na moduły

Tablice wielowymiarowe. Przykład tablica 2-wymiarowa. Przykład. Przykład 3-wymiarowy. Tak naprawdę nie istnieją w C! Rozważmy tablicę o rozmiarze 3x2

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

dr inż. Jarosław Forenc

I - Microsoft Visual Studio C++

Techniki Programowania wskaźniki 2

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

ALGORYTMY I STRUKTURY DANYCH

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Języki i metodyka programowania. Wprowadzenie do języka C

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Argumenty wywołania programu, operacje na plikach

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

( wykł. dr Marek Piasecki )

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

PROGRAMOWANIE w C prolog

Język C++ wykład VIII

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Podstawy Programowania. Zmienne dynamiczne, struktury, moduły programowe

Języki programowania - podstawy

Funkcje zawarte w bibliotece < io.h >

Wstęp do Programowania 2

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Transkrypt:

przykłady w języku ANSI C Dariusz Chaberski UMK Toruń

1 rekurencja funkcji int silnia(int arg){ if(arg==1) return 1; return arg*silnia(arg-1); int liczba; printf("podaj liczbe: "); scanf("%d", &liczba); printf("silnia z %d, wynosi: %d\n", liczba, silnia(liczba)); 2 rekurencja funkcji int silnia(int arg){ return arg==1?1:arg*silnia(arg-1); int liczba; printf("podaj liczbe: "); scanf("%d", &liczba); printf("silnia z %d, wynosi: %d\n", liczba, silnia(liczba)); 3 dynamiczny przydział pamięci 2

int *wskaznik; int i; wskaznik=(int*)malloc(sizeof *wskaznik*3); for(i=0; i<3; i++) scanf("%d", wskaznik+i); for(i=2; i>=0; i--) printf("%d\n", *(wskaznik+i)); 4 zmienne tablicowe int dane[3]; int i; for(i=0; i<3; i++) scanf("%d", &dane[i]); for(i=2; i>=0; i--) printf("%d\n", dane[i]); 5 dynamiczny przydział pamięci #define liczba 5 int *wskaznik; int i, sum; wskaznik=(int*)calloc(liczba, sizeof *wskaznik); for(i=0; i<liczba; i++) scanf("%d", &wskaznik[i]); 3

for(i=0, sum=0; i<liczba; i++) sum+=*(wskaznik+i); printf("suma: %d, srednia: %f", sum, (double)sum/(double)liczba); 6 jaka jest końcowa wartość zmiennej i i co zawiera pamięć wskazywana przez zmienną wskaznik? int *wskaznik; int i; wskaznik=(int*)calloc(10, sizeof *wskaznik); for(i=0; i<10; i++) *(wskaznik+i)=i; 7 jaka jest końcowa wartość zmiennej i? int funkcja(int a){ return ++a; int i; i=funkcja(2); 8 jaka jest końcowa wartość zmiennej i? int funkcja(int a){ return a++; 4

int i; i=funkcja(2); 9 jaka jest końcowa wartość zmiennych i i j? int i=5; int j=i; while(1){ j++; if(i==1) i=3, i--; i++; if(i==10){ i=1; continue; if(i==3) break; 10 jaka jest końcowa wartość zmiennych i i j? int funkcja(int a){ return a; int i=0, j; 5

j=funkcja(++i); i=funkcja(i--); 11 jaka jest końcowa zawartość tablicy table? int i=0; int j=0; int table[10]; for(;++i<10;) table[j]=i, j++; 12 jaka jest końcowa wartość zmiennej i #define polowa(a) a/2 int i=polowa(10+2); 13 jakie są końcowe wartości zmiennych i, j, x, y, z, u int i=10/3; int j=10%3; double x=(double)(int)((double)10/(double)3); double y=(double)10/(double)3; double z=(int)(10*(double)10/(double)3); double u=10*(int)((double)10/(double)3); 6

14 jaka jest końcowa wartość zmiennej i int i=10; do{ while(1); i++; i=20; 15 jaka jest końcowa wartość zmiennej i int i=10; do{ i++; break; while(1); i=i++; 16 jakie są końcowe wartości zmiennych i i znak unsigned char znak=255; int i=znak; while(znak++){ i++; 7

17 jakie są końcowe wartości zmiennych i i znak unsigned char znak=255; int i=znak; while(++znak){ i++; 18 jakie są końcowe wartości zmiennych i i znak unsigned char znak=255; int i=znak; while(znak++==0?1:znak){ i++; 19 jaka jest końcowa wartość zmiennej i int i=0; for(i++;;){ if(i==10) break; 8

20 jaka jest końcowa wartość zmiennej i int i=0; for(i++;;){ if(i==10); break; 21 jaka jest końcowa wartość zmiennej i int i=1; for(;i++;){ if(i==10) break; 22 jaka jest końcowa wartość zmiennej i int i=0; 9

for(;i++;){ if(i==10) break; 23 jaka jest końcowa wartość zmiennej i int i=0; for(;;i++){ if(i==10) break; 24 jaka jest końcowa wartość zmiennej i int i=0; for(;;++i){ if(i==10) break; 25 jakie są końcowe wartości zmiennych i i j? 10

int i=0; int j; for(;;j=i++){ if(i==10) break; 26 jakie są końcowe wartości zmiennych i i j? int i=0; int j; for(;;j=++i){ if(i==10) break; 27 program wyznaczający histogram #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv){ FILE *wsk; int znak; int i; unsigned int *histo; if(argc<2){ printf("nie podano pliku\n"); 11

return -1; wsk=fopen(*(argv+1), "rb"); if(!wsk){ printf("brak pliku\n"); return -1; histo=(unsigned int*)calloc(10, sizeof *histo); while(eof!=(znak=getc(wsk))) if(znak>= 0 && znak<= 9 ) (*(histo+znak-48))++; for(i=0; i<10; i++) printf("%d %d\n", i, *(histo+i)); fclose(wsk); 28 program wyznaczający liczby pierwsze #include <stdio.h> #include <stdlib.h> #include <math.h> int pierwsza(unsigned int a){ unsigned int i; for(i=2; i<a; i++) if(!(a%i)) return 1; int main(int argc, char** argv){ unsigned int i, od, Do; int l; FILE *wsk; 12

if(argc<4){ printf("uzycie programu:\n%s plik od do w\n", *argv); return -1; if(!(wsk=fopen(*(argv+1), "wb"))){ printf("brak pliku\n"); return -1; od=atoi(*(argv+2)); Do=atoi(*(argv+3)); for(i=od; i<=do; i++){ l=pierwsza(i); if(argc==5 && **(argv+4)== w ) printf("\nliczba: %u%sjest liczba pierwsza\n", i, l?" ":" nie "); putc(l? * :, wsk); fclose(wsk); 29 biblioteka funkcji użytecznych przy tworzeniu bazy danych #include <stdlib.h> #include <stdio.h> #include <string.h> int liczba=0; struct nazwa{ ; char* imie; char* nazwisko; 13

struct pracownik{ ; struct nazwa *id; unsigned char wiek; unsigned short int zarobki; struct pracownik nowy(char* imie, char* nazwisko, unsigned char wiek, unsigned short int zarobki){ struct pracownik tmp; tmp.id=(struct nazwa*)malloc(sizeof *(tmp.id)); tmp.id->imie=(char*)malloc(strlen(imie)+1); strcpy(tmp.id->imie, imie); tmp.id->nazwisko=(char*)malloc(strlen(nazwisko)+1); strcpy(tmp.id->nazwisko,nazwisko); tmp.wiek=wiek; tmp.zarobki=zarobki; liczba++; return tmp; void pokaz(const struct pracownik *Pracownik){ printf("\nid:\n\timie: %s", Pracownik->id->imie); printf("\n\tnazwisko: %s", Pracownik->id->nazwisko); printf("\nwiek: %u", (unsigned int)pracownik->wiek); printf("\nzarobki: %hu\n", Pracownik->zarobki); void zapisz(char* nazwa, struct pracownik* kadra){ int i; FILE *plik=fopen(nazwa, "wb"); for(i=0; i<liczba; i++){ int tmp; tmp=strlen((kadra+i)->id->imie); fwrite(&tmp, sizeof tmp, 1, plik); fwrite((kadra+i)->id->imie, 1, tmp, plik); tmp=strlen((kadra+i)->id->nazwisko); fwrite(&tmp, sizeof tmp, 1, plik); fwrite((kadra+i)->id->nazwisko, 1, tmp, plik); fwrite((char*)&((kadra+i)->wiek), 1, 14

sizeof kadra->wiek, plik); fwrite((char*)&((kadra+i)->zarobki), 1, sizeof kadra->zarobki, plik); fclose(plik); struct pracownik* czytaj(char* nazwa){ int j; int tmp; FILE *plik=fopen(nazwa, "rb"); struct pracownik *kadra; while(fread(&tmp, sizeof tmp, 1, plik)== 1){ fseek(plik, tmp, SEEK_CUR); fread(&tmp, sizeof tmp, 1, plik); fseek(plik, tmp +sizeof (kadra->wiek) + sizeof (kadra->zarobki), SEEK_CUR); liczba++; rewind(plik); kadra=(struct pracownik *)calloc(liczba, sizeof *kadra); for(j=0; j<liczba; j++){ (kadra+j)->id=(struct nazwa*)calloc(1, sizeof *(kadra->id)); fread(&tmp, sizeof tmp, 1, plik); (kadra+j)->id->imie=(char*)calloc(tmp, sizeof (kadra->id->nazwisko)); fread((kadra+j)->id->imie, 1, tmp, plik); fread(&tmp, sizeof tmp, 1, plik); (kadra+j)->id->nazwisko=(char*)calloc(tmp, sizeof kadra->id->nazwisko); fread((kadra+j)->id->nazwisko, 1, tmp, plik); fread(&((kadra+j)->wiek), sizeof kadra->wiek, 1, plik); fread(&((kadra+j)->zarobki), sizeof kadra->zarobki, 1, plik); 15

fclose(plik); return kadra; 30 przykład w programu w języku C++ #include <stdio.h> #include <iostream.h> class dsig{ private: t *data; int num; void dalloc(int); void dfree(void); public: dsig(void); dsig(int); dsig(int, t*); dsig(dsig&); ~dsig(void); dsig& operator=(dsig&); t& operator[](int); dsig& operator+(dsig&); friend dsig& operator+(dsig&); dsig& operator-(dsig&); friend dsig& operator-(dsig&); ; friend ostream& operator<<(ostream&, dsig&); void print(void); 16

void dsig<t>::dalloc(int num_){ data=new t[num=num_]; void dsig<t>::dfree(void){ if(num){ delete[] data; num=0; dsig<t>::dsig(void){ num=0; dsig<t>::dsig(int num_){ dalloc(num_); dsig<t>::dsig(int num_, t* data_){ dalloc(num_); for(int i=0; i<num_; i++) (*this)[i]=*(data_+i); dsig<t>::dsig(dsig& dsig){ cout<<"funkcja dsig\n"; dalloc(dsig.num); for(int i=0; i<num; i++) (*this)[i]=dsig[i]; 17

dsig<t>::~dsig(void){ dfree(); dsig& dsig<t>::operator=(dsig& dsig){ cout<<"operator=\n"; if(this!=&dsig){ if(dsig.num!=this->num){ dfree(); dalloc(dsig.num); for(int i=0; i<num; i++) (*this)[i]=dsig[i]; return *this; t& dsig<t>::operator[](int index){ if(index>=0 && index<num) return *(data+index); return *data; dsig& dsig<t>::operator+(dsig& dsig){ cout<<"operator+\n"; if(this->num!=dsig.num) return *this; dsig *tmp=new dsig(*this); for(int i=0; i<num; i++) *(tmp->data+i)=*(dsig.data+i)+*(tmp->data+i); 18

tmp->num=num; return *tmp; dsig<t>& operator+(dsig<t>& dsig){ dsig *tmp=new dsig(dsig); return *tmp; dsig& dsig<t>::operator-(dsig<t>& dsig){ dsig *tmp=new dsig(dsig.num); *tmp=*this+-dsig; return *tmp; dsig<t>& operator-(dsig<t>& dsig){ dsig<t> *tmp=new dsig<t>(dsig.num); for(int i=0; i<tmp->num; i++) (*tmp)[i]=-dsig[i]; return *tmp; ostream& operator<<(ostream& cout_, dsig<t>& dsig){ cout_<<(dsig.num!=0?"[":" pustka "); for(int i=0; i<dsig.num; i++) cout_<<*(dsig.data+i)<<(i==dsig.num-1?"]":","); return cout_; void dsig<t>::print(void){ 19

cout<<(*this); dsig<int> a(10); for(int i=0; i<10; i++) a[i]=i; cout<<a<<"\n"; int *data; data =new int[10]; for(int i=0; i<10; i++) *(data+i)=i*1000; dsig<int> b(10, data); cout<<"\n"<<a<<" + "<<b<<" = "<<(a+b)<<"\n"; cout<<"\n"<<a<<" - "<<b<<" = "<<(a-b)<<"\n"; cout<<"\n"<<"- "<<a<<" = "<<(-a)<<"\n"; cout<<"\n"<<"- - "<<a<<" = "<<(- -a)<<"\n"; dsig<int> c;c=a; cout<<"c = "<<c<<"\n"; dsig<int> d(5, data); cout<<"\n d = "<<d; d=a; cout<<"\n d = "<<d; dsig<double> e(10); for(int i=0; i<10; i++) e[i]=1.0/(double)(i+1); cout<<e; dsig< dsig<int> > f(3); 20

f[0]=a; f[2]=b; f[2][2]=10001; cout<<"\n f + f = "<<(f+f); 21