Wyklad 7 Funkcje (c.d.). Tablice jednowymiarowe znaków

Podobne dokumenty
Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

ŁAŃCUCHY W JĘZYKU C/C++

Ćwiczenie 4 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Tablice deklaracja, reprezentacja wewnętrzna

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

Ćwiczenie 5 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Operacje na łańcuchach znaków

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

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

tablica: dane_liczbowe

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

Struktura programu. Słowa kluczowe. Komentarze. Zmienne

Wprowadzenie do tablic znaków (łańcuchów) w ANSI C

Programowanie Proceduralne

scanf( %s,tekst); //znaki podane z klawiatury (do pierwszego białego znaku ) //s kopiowane do zmiennej tekst i dostawiany jest znak \0

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

struct Student { char nazwisko[30]; int wiek; float ocena; }; #define MAX_ROZMIAR 3 Student lista_studentow[max_rozmiar];

Podstawy programowania w języku C++

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

Podstawy programowania 1

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Wprowadzenie do programowania w języku C

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

Programowanie w C Typ wskaźnikowy do typu znakowego i operacje na łańcuchach

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

Podstawy Programowania

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

dr inż. Jarosław Forenc

1. Abstrakcyjne typy danych

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Podstawy programowania

Języki programowania obiektowego Nieobiektowe elementy języka C++

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

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

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

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

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

Ćwiczenie nr 3. Temat: Definicje i wykorzystanie funkcji, parametry funkcji

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

Etap 2 - Budowa interfejsu. typedef struct ELEMENT* stos; struct ELEMENT { dane Dane; stos Nastepny; }; struct kolejka { stos Poczatek, Koniec; };

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

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

Spis treści JĘZYK C - ŁAŃCUCHY ZNAKÓW. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF22

Stałe i zmienne znakowe. Stała znakowa: znak

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

Spis treści JĘZYK C - TABLICE JEDNOWYMIAROWE, ŁAŃCUCHY ZNAKÓW. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

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

Inicjacja tablicy jednowymiarowej

iii. b. Deklaracja zmiennej znakowej poprzez podanie znaku

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Zmienne i struktury dynamiczne

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

PODSTAW PROGRAMOWANIA WYKŁAD 6 WSKAŹNIKI

#include <iostream.h> #include <conio.h>

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

Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Wskaźniki. Programowanie Proceduralne 1

Łańcuchy znaków. Agnieszka Nowak - Brzezińska

np. dla p=1 mamy T1(N) N/2 średni czas chybionego wyszukiwania z prawdopodobieństwem q:

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

Spis treści JĘZYK C - ŁAŃCUCHY ZNAKÓW. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF10Z

INSTRUKCJE REPETYCYJNE PĘTLE

Wstęp do programowania 1

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Języki i metody programowania I

DYNAMICZNE PRZYDZIELANIE PAMIECI

Co nie powinno być umieszczane w plikach nagłówkowych:

Język C, tablice i funkcje (laboratorium)

Podstawy programowania C. dr. Krystyna Łapin

Tablice, funkcje - wprowadzenie

Podstawy programowania w języku C++

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

PARADYGMATY PROGRAMOWANIA Wykład 3

INSTRUKCJE REPETYCYJNE PĘTLE

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

Programowanie Proceduralne

Podstawy programowania w języku C++

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Wstęp do wskaźników w języku ANSI C

Język C, tablice i funkcje (laboratorium, EE1-DI)

1. Typy zmiennych. 2. Typy podstawowe: char short int int long int float

JĘZYK C - TABLICE DWUWYMIAROWE,

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

int tab_a [ 2 ] [ 3 ];

Funkcja (podprogram) void

Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe.

Część 4 życie programu

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Wykład 6. Operacje na łańcuchach znakowych

( wykł. dr Marek Piasecki )

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

- - Ocena wykonaniu zad3. Brak zad3

Wskaźniki w C. Anna Gogolińska

Microsoft IT Academy kurs programowania

PODSTAW PROGRAMOWANIA WYKŁAD 7 ŁAŃCUCHY

Programowanie Proceduralne

Wykład Wskaźniki a tablice jednowymiarowe Arytmetyka wskaźników Dostęp do elementów tablic

Transkrypt:

Wyklad 7 Funkcje (c.d.). Tablice jednowymiarowe znaków Nie wolno definicji funkcji zagniezdzac w ciele innej funkcji! Funkcje bez parametrów musza korzystac ze zmiennych globalnych, jesli zachodzi potrzeba wspóldzielenia danych. Zmienne globalne zawsze maja wartosc 0, zgodna z typem danych Przyklad 1 Na podstawie przykladu z wykladu 5, str. 4. Przetwarzanie tablicy z wyborem operacji, zastosowanie funkcji bez parametrów korzystajacych ze zmiennych globalnych #include <stdio.h> #include <stdlib.h> #include <conio.h> int tab[5], i, p; // zmienne globalne: tab=0, 0, 0, 0, 0, i=0, p=0; float suma; // suma =0.0; char opcja; // opcja = \x0 ; void wypelnij_tablice(); void wyswietl_tablice(); void oblicz_srednia_wartosc(); void main() srand(1); do clrscr(); printf("1 - generowanie losowego ciagu danych do tablicy\n"); printf("2 - wyswietlanie tablicy\n"); printf("3 - obliczenie wartosci sredniej elementow tablicy\n"); printf("k - koniec programu\n"); opcja=getch(); switch(opcja) case '1': wypelnij_tablice(); case '2': wyswietl_tablice(); case '3': oblicz_srednia_wartosc(); case 'k': printf("koniec programu\n"); getch(); return; default : printf("zla opcja\n"); while(!kbhit()); while(1); Autor: Zofia Kruczkiewicz, Jezyki i metody programowania C2, wyklad 7 1

void wypelnij_tablice() p= random(5)+1; for (i=0; i<p; i++) tab[i]=random(200); void wyswietl_tablice() if (p==0) return; printf("\nwartosc indeks adres wartosc adresu\n"); for (i=0; i<p; i++) printf("*(tab+%i)=%3i %i tab+%i: %p\n", i, *(tab+i), i, i, tab+i ); void oblicz_srednia_wartosc() if (p==0) return; for (i=0,suma=0;i<p;i++) suma+=tab[i]; suma/=p; printf("\nsrednia wartosc %i elementow jest rowna %f\n", p, suma); Autor: Zofia Kruczkiewicz, Jezyki i metody programowania C2, wyklad 7 2

?? Funkcje bez parametrów powinny korzystac ze zmiennych globalnych tylko wtedy, kiedy je wspóldziela z innymi funkcjami?? Zmienne pomocnicze powinny byc zmiennymi lokalnymi funkcji np. zmienna sterujaca instrukcji for?? Zmienne lokalne jednej funkcji sa poza zasiegiem innej funkcji Przyklad 2 kolejna wersja programu z przykladu 1 Wprowadzenie zmiennych lokalnych jako zmiennych pomocniczych zmienne sterujace petli for #include <stdio.h> #include <stdlib.h> #include <conio.h> int tab[5], p; float suma; void wypelnij_tablice(); void wyswietl_tablice(); void oblicz_srednia_wartosc(); void main() char opcja; srand(1); do clrscr(); printf("1 - generowanie losowego ciagu danych do tablicy\n"); printf("2 - wyswietlanie tablicy\n"); printf("3 - obliczenie wartosci sredniej elementow tablicy\n"); printf("k - koniec programu\n"); opcja=getch(); switch(opcja) case '1': wypelnij_tablice(); case '2': wyswietl_tablice(); case '3': oblicz_srednia_wartosc(); case 'k': printf("koniec programu\n");getch(); return; default : printf("zla opcja\n"); while(!kbhit()); while(1); Autor: Zofia Kruczkiewicz, Jezyki i metody programowania C2, wyklad 7 3

void wypelnij_tablice() p= random(5)+1; for (int i=0; i<p; i++) tab[i]=random(200); //zmienna lokalna void wyswietl_tablice() if (p==0) return; printf("\nwartosc indeks adres wartosc adresu\n"); for (int i=0; i<p; i++) //zmienna lokalna printf("*(tab+%i)=%3i %i tab+%i: %p\n", i, *(tab+i), i, i, tab+i ); void oblicz_srednia_wartosc() int i; //zmienna lokalna if (p==0) return; for (i=0, suma=0;i<p;i++) suma+=tab[i]; suma/=p; printf("\nsrednia wartosc %i elementow jest rowna %f\n", p, suma); Autor: Zofia Kruczkiewicz, Jezyki i metody programowania C2, wyklad 7 4

?? Lista parametrów formalnych pozwala przekazac do funkcji, jako parametry aktualne, wyrazenia lub zmienne zdefiniowane w zasiegu wywolania funkcji w programie?? Funkcja z parametrami jest funkcja wielouzywalna - wywolanie jej jest jedynie ograniczone zgodnoscia typu kazdego parametru formalnego z typem podstawionego parametru aktualnego Przyklad 3 kolejna wersja programu z p.2. W programie zastosowano w funkcjach liste parametrów, stad miejsce definicji zmiennych aktualnych jest niezalezne od zmiennych uzywanych w cialach funkcji. #include <stdio.h> #include <stdlib.h> #include <conio.h> void wypelnij_tablice(int [], int& ); void wyswietl_tablice(int [], int ); int oblicz_srednia_wartosc(int [], int, float&); void main() int tab[5], p=0; float suma; char opcja; srand(1); do clrscr(); printf("1 - generowanie losowego ciagu danych do tablicy\n"); printf("2 - wyswietlanie tablicy\n"); printf("3 - obliczenie wartosci sredniej elementow tablicy\n"); printf("k - koniec programu\n"); opcja=getch(); switch(opcja) case '1': wypelnij_tablice(tab,p); case '2': wyswietl_tablice(tab,p); case '3': if (oblicz_srednia_wartosc(tab,p,suma)) printf("\nsrednia wartosc %i elementow jest rowna %f\n", p, suma); case 'k': printf("koniec programu\n"); getch(); return; while(!kbhit()); while(1); default : printf("zla opcja\n"); Autor: Zofia Kruczkiewicz, Jezyki i metody programowania C2, wyklad 7 5

void wypelnij_tablice(int* tab, int& p) p= random(5)+1; for (int i=0; i<p; i++) tab[i]=random(200); void wyswietl_tablice(int* tab, int p) if (p==0) return; printf("\nwartosc indeks adres wartosc adresu\n"); for (int i=0; i<p; i++) printf("*(tab+%i)=%3i %i tab+%i: %p\n", i, *(tab+i), i, i, tab+i ); int oblicz_srednia_wartosc(int * tab, int p, float& suma) int i; if (p==0) return 0; for (i=0, suma=0;i<p;i++) suma+=tab[i]; suma/=p; return 1; Autor: Zofia Kruczkiewicz, Jezyki i metody programowania C2, wyklad 7 6

Tablice znaków Modul string zawiera funkcje przeznaczone dla ciagów znaków zakonczonych znakiem o kodzie 0 czyli \x0 i umieszczonych w tablicach znaków. /* STRING.H Functions _fmemccpy _fmemchr _fmemcmp _fmemcpy _fmemicmp _fmemset _fstrcat _fstrchr _fstrcmp _fstrcpy _fstrcspn _fstrdup _fstricmp _fstrlen _fstrnset _fstrpbrk _fstrrchr _fstrrev _fstrset _fstrspn _fstrstr _fstrtok _fstrupr memccpy memchr memcmp memcpy memicmp memmove memset movedata movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup _strerror strerror stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strnset strpbrk strrchr strrev strset strspn strstr strtok strxfrm strupr Constants, data types, and global variables size_t Przyklad 4 - Przetwarzanie lancuchów-kopiowanie, porównywanie, usuwanie, wstawianie #include <string.h> #include <conio.h> #include <stdio.h> /*funkcje ilustrujace dzialanie systemowej funkcji porównujacej lancuchy - strcmp int strcmp1(const char*, const char* ); int strcmp2(const char*, const char* ); /*funkcje ilustrujace dzialanie systemowej funkcji kopiujacej lancuchy - strcpy void strcpy1(char*, const char* ); void strcpy2(char*, const char* ); /*funkcja usuwajaca znaki void delete_ (char*, char); /*funkcja wstawiajaca znaki void insert (char*, char, int, int, int); Autor: Zofia Kruczkiewicz, Jezyki i metody programowania C2, wyklad 7 7

void main() char wiersz[10]; char *wiersz1 = "abcdabcda"; clrscr(); strcpy(wiersz, wiersz1); printf("%s\n", wiersz); strcpy2(wiersz, wiersz1); printf("%s\n", wiersz); char *buf1 = "d", *buf2 = "aa"; int por; por = strcmp(buf2, buf1); if (por > 0) printf("lancuch2>lancuch1\n"); else if (por==0) printf("lancuch2==lancuch1\n"); else printf("lancuch2<lancuch1\n"); por = strcmp2(buf2, buf1); if (por > 0) printf("lancuch2>lancuch1\n"); else if (por==0) printf("lancuch2==lancuch1\n"); else printf("lancuch2<lancuch1\n"); delete_(wiersz,'b'); printf("%s\n",wiersz); insert(wiersz, 'b', 1, 10, strlen(wiersz)); printf("%s\n",wiersz); getch(); Autor: Zofia Kruczkiewicz, Jezyki i metody programowania C2, wyklad 7 8

void strcpy1(char* s1, const char* s2) /* s1 lancuch docelowy s2 lancuch k int i=0; s1[i] = s[i]; while(s2[i]) i++; s1[i]=s2[i]; void strcpy2(char*s1, const char* s2) /*s1 lancuch docelowy s2 lancuch kopiowany *s1=*s2; while (*s2) s2++; s1++; *s1=*s2; int strcmp1(const char* s1, const char* s2) /*s1,s2- lancuchy porównywane s1==s2 strcmp = 0 s1 > s2 strcmp > 0 s1 <s2 strcmp < 0 int i= 0; while((s1[i] == s2[i]) && s1[i]!=0 && s2[i]!=0) i++; if (s1[i]>s2[i]) return 1; else if(s1[i]==s2[i]) return 0; else return -1; int strcmp2(const char* s1, const char* s2) /*s1,s2- lancuchy porównywane s1==s2 strcmp = 0 s1 > s2 strcmp > 0 s1 <s2 strcmp < 0 while((*s1 == *s2) && *s1!=0 && *s2!=0) s1++; s2++; if (*s1>*s2) return 1; else if(*s1==*s2) return 0; else return -1; Autor: Zofia Kruczkiewicz, Jezyki i metody programowania C2, wyklad 7 9

void delete_ (char* s1, char z) /* funkcja zabezpieczona s1 lancuch docelowy z znak usuwany przez zsuwanie int j, i=0; while (s1[i]) if (s1[i]==z) j=i; while(s1[j]) s1[j]=s1[j+1]; j++; continue; //test od tego samego indeksu i++; void insert (char* s1, char c, int gdzie, int rozmiar, int ile) /*funkcja zabezpieczona s1 lancuch docelowy c znak wstawiany gdzie indeks miejsca do wstawienia rozmiar wielkosc tablicy, w której jest lancuch s1 ile - liczba znaków lancucha bez znaku 0 int i=0; if (ile+1>=rozmiar ile<0) return; //brak miejsca lub zle dane if (gdzie>=0 && gdzie<=ile) i=ile+1; //nowe polozenie znaku 0 while(i> gdzie) s1[i]=s1[i-1]; i--; s1[gdzie]=c; Autor: Zofia Kruczkiewicz, Jezyki i metody programowania C2, wyklad 7 10