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

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

Ćwiczenie 3 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

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

tablica: dane_liczbowe

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

Podstawy Programowania C++

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

Instrukcje sterujące

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

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

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

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

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

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

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

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

Wskaźniki w C. Anna Gogolińska

Podstawy programowania C. dr. Krystyna Łapin

- - Ocena wykonaniu zad3. Brak zad3

Część 4 życie programu

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Programowanie - wykład 4

1 Podstawy c++ w pigułce.

Lab 9 Podstawy Programowania

Programowanie komputerowe. Zajęcia 3

4. Funkcje. Przykłady

Proste programy w C++ zadania

1 Podstawy c++ w pigułce.

Programowanie w C/C++ Instrukcje - konstrukcje powtórka. LABORKA Piotr Ciskowski

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

Programowanie - instrukcje sterujące

Język C, instrukcje sterujące (laboratorium)

Programowanie strukturalne i obiektowe

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

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Podstawy Programowania Podstawowa składnia języka C++

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

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

Język C zajęcia nr 5

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Pytania sprawdzające wiedzę z programowania C++

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

INSTRUKCJE REPETYCYJNE PĘTLE

Metody numeryczne Laboratorium 2

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

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Zasady programowania Dokumentacja

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

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Podstawy programowania skrót z wykładów:

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

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

KURS C/C++ WYKŁAD 1. Pierwszy program

Funkcja (podprogram) void

lekcja 8a Gry komputerowe MasterMind

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

Tablice, funkcje - wprowadzenie

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

Kontrola przebiegu programu

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

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

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

Programowanie komputerowe. Zajęcia 1

Wskaźniki. Programowanie Proceduralne 1

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

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

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

Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop

Wstęp do Programowania, laboratorium 02

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Proste typy zmiennych języka C++ *) Zapis 3.4 e-38 jest równoważny zapisowi 3,

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

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

Język C, tablice i funkcje (laboratorium)

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

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

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

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

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

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

do instrukcja while (wyrażenie);

1. Napisz program wypisujący w kolejnych wierszach standardowego wyjścia pojedyncze słowa następującego napisu Bardzo dlugi napis. 2.

I - Microsoft Visual Studio C++

Warszawa dnia 2 stycznia 2011 r. Zbiór zadań z programowania w języku C do samodzielnego wykonania

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

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

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

Podstawy programowania w języku C

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

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

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

Struktury, unie, formatowanie, wskaźniki

INSTRUKCJE REPETYCYJNE PĘTLE

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

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

Transkrypt:

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

Zakres Arytmetyka wskaźników, konwersja (rzutowanie) wskaźników Ćwiczenia z dostępu do dowolnego obszaru pamięci. Do przygotowania na ćw. 6 Funkcje przetwarzające teksty - omówienie standardowych funkcji (biblioteka <string.h>) - tworzenie własnych funkcji Dynamiczna alokacja pamięci tablice jednowymiarowe o zmiennym rozmiarze - realokacja.

Arytmetyka wskaźników, konwersja (rzutowanie) wskaźników wykonano równoważne definicje ciał funkcji z cw4 za pomocą operacji na wskaźnikach

Przykład 1: prototyp funkcji, wywołanie funkcji, definicje funkcji na kolejnym slajdzie #include <stdio.h> #include <conio.h> //prototypy funkcji, można pominąć nazwy argumentów void suma (); int suma1 (int a, int b); void suma2 (int a, int b, int& suma); void suma3 (int a, int b, int* suma); int a=5, b=8, c; void main() { int A=3, B=4, C=0; printf("c: %d\n",c); suma(); C=suma1(A, B); C=0; printf("suma1: %d + %d = %d\n",a,b,c); suma2(a,b,c); C=0; printf("suma2: %d + %d = %d\n",a,b,c); suma3(a,b,&c); // wywołanie funkcji suma, używanie zmiennych globalnych a, b i c oraz lokalnej d // wywołanie funkcji suma1, zmienne A i B przekazane przez wartość, // pobranie wyniku funkcji suma1 do zmiennej C //wywołanie funkcji suma2, zmienna C przekazana przez referencję // wartość zmiennej C uległa zmianie //wywołanie funkcji suma3, zmienna C przekazana przez wskaźnik printf("suma3: %d + %d = %d\n ",A,B,C); _getch(); // wartość zmiennej C uległa zmianie

Definicja funkcji 1 operacje na wskaźnikach //definicje funkcji void suma() { int d=20; int* d1, *a1, *b1, *c1; d1=&d, a1=&a, b1=&b, c1=&c; *c1=*a1+*b1+*d1; // a1, b1, c1 wskaźniki do zmiennych globalnych; zmienna d lokalna printf("suma: %d + %d + %d = %d\n",*a1,*b1,*d1,*c1); int suma1 (int a, int b) //argumenty a, b przekazywanie argumentów przez wartość { int* a1,*b1; a1=&a, b1=&b; return *a1 + *b1; //zwracanie wyniku przez funkcję za pomocą instrukcji return void suma2 (int a, int b, int& c) //argument c przekazywanie argumentu przez referencję { int* a1, *b1, *c1; // gdzie zdefiniowano zmienną przekazaną przez referencję do c a1=&a, b1=&b, c1=&c; *c1= *a1+*b1; void suma3 (int a, int b, int* c) //argument c przekazywanie argumentu przez wskaźnik { int* a1, *b1, *c1; a1=&a, b1=&b, c1=c; *c1= *a1+ *b1; // przypisanie sumy *a1+*b1 do miejsca w pamięci, gdzie zdefiniowano // zmienną przekazaną przez wskaźnik do c i dodatkowo wskazywaną przez c1

Przykład 2: prototyp funkcji, wywołanie funkcji, definicje funkcji uległy zmianie #include <stdio.h> #include <conio.h> //prototypy funkcji int suma1 (int a, int b); void suma2 (int a, int b, int& suma); void suma3 (int a, int b, int* suma); void main() { int A=3, B=4, C=0; printf("c: %d\n",c); C=suma1(A, B); //wywołanie funkcji, zmienne A i B przekazane przez wartość printf("suma1: %d + %d = %d\n",a,b,c); suma2(4,5,c); //wywołanie funkcji, stałe 4 i 5 przekazane przez wartość printf("suma2: %d + %d = %d\n",4,5,c); suma3(5,6,&c); //wywołanie funkcji, stałe 5 i 6 przekazane przez wartość printf("suma3: %d + %d = %d\n",5,6,c); _getch();

Definicja funkcji 2 operacje na wskaźnikach //definicje funkcji int suma1 (int a, int b) { int* a1, *b1; a1=&a, b1=&b; return *a1+*b1; void suma2 (int a, int b, int& c) { int* a1, *b1, *c1; a1=&a, b1=&b, c1=&c; *c1=suma1(*a1,*b1); void suma3 (int a, int b, int* c) { int*a1, *b1,*c1; a1=&a, b1=&b, c1=c; *c1=suma1(*a1,*b1); // równoważna wyrażeniu return a+b; //równoważna wyrażeniu c= a+b; //równoważna wyrażeniu *c= a+b;

Przykład 3: prototyp funkcji, wywołanie funkcji, definicje funkcji zmienione #include <stdio.h> #include<conio.h> //prototypy funkcji int suma1 (int a, int b); void suma2 (int a, int b, int& suma); void suma3 (int a, int b, int* suma); void main() { int A=3, B=4, C=0; printf("c: %d\n",c); C=suma1(A, B); //wywołanie funkcji printf("suma1: ++%d + %d = %d\n",a,b,c); suma2(a,b,c); //wywołanie funkcji printf("suma2: ++%d + %d = %d\n",a,b,c); suma3(a,b,&c); //wywołanie funkcji printf("suma3: ++%d + %d = %d\n",a,b,c); _getch();

Definicja funkcji 3. Operacje na wskaźnikach rzutowanie wskaźników //definicje funkcji int suma1 (int a, int b) { int* a1, *b1; a1=&a, b1=&b; return ++(*a1)+*b1; //wartość a po zakończeniu funkcji znika //wskazywane przez a1 i b1 void suma2 (int a, int b, int& c) { void*a1, *b1, * c1; a1=&a, b1=&b, c1=&c; *(int*)c1=suma1(*(int*)a1,*(int*)b1); //równoważne wyrażeniu c= ++a+b; rzutowanie //wskaźników typu void na typ int *(int*)a1=3; // //ostrożnie ze zmianą typu zmiennej!!! *(int*)b1=10; //wartości a i b po zakończeniu funkcji znikają //wskazywane przez a1 i b1 void suma3 (int a, int b, int* c) { short* a1, * b1, * c1; a1=(short*)&a, b1=(short*)&b, c1=(short*)c; //rzutowanie wskaźników typu int na typ short *(int*)c1=suma1(*(int*)a1,*(int*)b1); // równoważne wyrażeniu *c= ++a+b; rzutowanie //wskaźników typu short na typ int *(int*)a1=9; //ostrożnie ze zmianą typu zmiennej!!! *(int*)b1=11; //wartości a i b po zakończeniu funkcji znikają //wskazywane przez a1 i b1

Przykład 4: prototyp funkcji, wywołanie funkcji, przekazywanie tablicy do funkcji #include <stdio.h> #include <conio.h> //prototyp funkcji void suma (int tab[]); void main() { int tab []={3, 4, 0; printf("tab[2]: %d\n", tab[2]); suma(tab); printf("tab[2]: %d\n", tab[2]); suma(tab); printf("tab[2]: %d\n", tab[2]); _getch(); //wywołanie funkcji suma, zmienna tab przekazana przez domyślny // wskaźnik; wartości elementów tab[1] i tab[2] uległa zmianie //wywołanie funkcji suma, zmienna tab przekazana przez domyślny // wskaźnik; wartość elementu tab[2] uległa zmianie //definicja funkcji void suma(int tab[]) { int d=20; tab[2]=tab[0]+tab[1]+d; printf("suma: %d + %d + %d = %d\n", tab[0], tab[1], d, tab[2]); tab[1]=12;

Przykład 4 : prototyp funkcji, wywołanie funkcji, przekazywanie tablicy do funkcji #include <stdio.h> #include <conio.h> void suma (int *); void main() { int tab []={3, 4, 0; printf("tab[2]: %d\n", *(tab+2)); suma(tab); printf("tab[2]: %d\n", *(tab+2)); suma(tab); printf("tab[2]: %d\n", *(tab+2)); _getch(); //wywołanie funkcji suma, zmienna tab przekazana przez domyślny // wskaźnik; wartości elementów tab[1] i tab[2] uległa zmianie //wywołanie funkcji suma, zmienna tab przekazana przez domyślny // wskaźnik; wartość elementu tab[2] uległa zmianie //definicja funkcji zastosowanie operacji na wskaźnikach (rzutowanie wskaźników) void suma(int *tab) { long d=20; int* d1, *tab1; d1=(int*)&d, tab1=tab; // rzutowanie na int *(tab1+2)=*(tab1+0)+*(tab1+1)+*d1; //obliczenia wykonywane są na wartościach typu int, a nie typu long //dzięki zamianie typu long na int (zmienna wskaźnikowa d1) printf("suma: %d + %d + %d = %d\n", *(tab1+0), *(tab1+1), *d1, *(tab1+2)); *(tab1+1)=12;

Zadania do wykonania w definicji ciała każdej funkcji należy zastosować operacje na wskaźnikach wg przykładów 1-4

Zad 1 (obowiązkowy) w definicji ciała każdej funkcji należy użyć wskaźników wg przykładów 1-4 1. Napisz program, który w opcjach wywołuje funkcje, które wykonują następujące czynności na tablicy zdefiniowanej jako int tab[n]: 1.1. dodaje po jednym elemencie typu int do tablicy na pozycję o indeksie ile. Podczas wstawiania pierwszego elementu ile powinno być równe 0; po wstawieniu należy powiększyć wartość ile o 1. Po ponownym wywołaniu funkcji kolejny element należy wstawiać jako element tablicy o indeksie ile, gdy ile spełnia warunek: ile<n. Po wykonaniu tej opcji, jeśli element został wstawiony do tablicy, należy zawsze powiększyć ile o jeden. Zmienną ile należy przekazywać przez referencję. Tablica powinna być przekazana przez domyślny wskaźnik. 1.2. wyszukuje element o zadanej wartości z klawiatury i zwraca jego wartość oraz wartość indeksu. Indeks znalezionego elementu należy przekazać przez wskaźnik, a wartość znalezionego elementu należy przekazać przez wynik funkcji. Tablica powinna być przekazana przez domyślny wskaźnik. 1.3. wyświetla wartość przekazanego elementu tablicy oraz wartość jego indeksu- zastosować przekazanie przez wartość tych danych. Propozycja nagłówka funkcji: prototyp: void wyswietl_el(int element, int indeks); wywołanie: wyswietl_el(tab[indeks], indeks); // wartość zmiennej indeks wprowadzona z klawiatury. Należy zbadać, czy spełnia warunek 0<=indeks<ile 1.4. wyświetla zawartość tablicy, jeśli zawiera dane. Należy przekazać tablicę przez domyślny wskaźnik i wartość ile przez wartość. Uwagi: Należy wprowadzić zmienną ile, która przechowuje liczbę elementów tablicy. Wartość ile równa zero świadczy o tym, ze tablica jest pusta. Wartość różna od zera oznacza, że w tablicy są dane. Nie może ona przekroczyć wartości N - ile=n oznacza, ze tablica jest pełna. Wartość N musi być zadana programie, np. const int N=10; Należy do każdej funkcji dodać komentarz wyjaśniający znaczenie wybranego sposobu przekazania zmiennych. Należy również dodać w każdej funkcji komentarz wyjaśniający sposób działania kodu reprezentującego algorytmy z p. 1.1 1.4: 1.1. sposób dodawania elementów do tablicy 1.2. Sposób wyszukiwania elementów w tablicy 1.3. sposób wyświetlania elementów tablicy

#include <stdio.h> #include <conio.h> #include <stdlib.h> //prototypy 4 funkcji Przykład rozwiązania zad1 należy zdefiniować funkcje przetwarzające zawartość tablicy jednowymiarowej elementów typu int. void main() { int opcja; // zmienna wyboru typu int // tutaj należy zdefiniowac tablice, zmienną ile, stałą N itd do { system("cls"); printf("jesli nacisniesz klawisz:\n"); printf("1 - Dodawanie kolejnego elementu do tablicy\n"); printf("2 - Wyszukiwanie zadanego elementu w tablicy\n"); printf("3 - Wyswietlenie elementu o podanym indeksie 3\n"); printf("4 - Wyswietlenie wszystkich elementow wstawionych do tablicy\n"); printf("0 - Koniec programu\n"); scanf("%d",&opcja); switch(opcja) { case 1 :printf("nacisnales klawisz 1 - operacja 1.1\n"); break; //wstawic wywolanie funkcji wstawiajacej kolejny element do tablicy wg 1.1. case 2 :printf("nacisnales klawisz 2 - operacja 1.2\n"); break;// wstawic wywolanie funkcji wyszukującej element w tablicy wh p.1.2 case 3 :printf("nacisnales klawisz 3 - operacja 1.3\n"); break;// wstawic wywolanie funkcji wg 1.3 wyswietlającej element tablicy o zadanym indeksie case 4 :printf("nacisnales klawisz 4 - operacja 1.4\n"); break;// wstawic wywolanie funkcji wyswietlajacej zawartosc tablicy wg p.1.4 case 0 :printf("nacisnales klawisz 0 - koniec programu\n");break; default :printf("nacisnales niewlasciwy klawisz\n"); _getch(); //wstrzymanie programu przed clrscr()przez dodatkowe naciskanie klawisza while (opcja!=0); //definicje 4 funkcji

Zad 2 (obowiązkowy) - w definicji ciała każdej funkcji należy użyć wskaźniki wg przykładów 1-4 Napisz program, który zawiera funkcję rysującą szachownicę na ekranie. Przez nagłówek funkcji należy przekazać przez wartość informację o rozmiarze boku pola szachownicy (kwadrat). Algorytm powinien zawierać dwie pętle jedna zagnieżdżona w drugiej. Nie należy stosować tablicy. Należy zastosować operator warunkowy?: zamiast instrukcji if else przy rozpoznawaniu, jakie pole szachownicy należy rysować. Rysowanie należy wykonać za pomocą funkcji printf. Można wybrać rodzaj znaku do rysowania pól szachownicy (wartość zadana w kodzie programu). Funkcję należy wywoływać dowolną liczbę razy, przekazując podaną z klawiatury długość boku pola szachownicy. Zmiana wielkości boku powoduje rysowanie różnej liczby pól szachownicy, ponieważ program powinien zachować ten sam rozmiar boku całej szachownicy. Po naciśnięciu klawisza k program powinien zakończyć się. Dodać komentarze w kodzie programu wyjaśniające, jak on reprezentuje algorytm rysowania figury.

Przykład rozwiązania zad2 należy zdefiniować funkcję rysującą szachownicę za pomocą funkcji printf #include <stdio.h> #include <conio.h> #include <stdlib.h> //prototyp funkcji void szachownica(int bok); void main() { char klucz; int bok; do { system("cls"); printf("wprowadz dlugosc boku: "); scanf("%d",&bok); szachownica(bok); printf("czy koniec programu: k - koniec, dowolny inny klawisz - dalej\n"); klucz=_getch(); while(klucz!='k'); //definicja funkcji void szachownica(int bok) { //tutaj należy napisac kod funkcji rysujacej szachownice

Zad 3 (obowiązkowy) - w definicji ciała każdej funkcji należy użyć wskaźniki wg przykładów 1-4 Napisz program, który zawiera funkcję rysującą choinkę na ekranie. Przez nagłówek funkcji należy przekazać przez wartość informację o wysokości choinki (trójkąt równoramienny) oraz rodzaj znaku do wypełnienia powierzchni trójkąta. Algorytm powinien zawierać jedną pętlę główną, w której rysowany kolejny wiersz figury. Każdy wiersz figury rysowany jest za pomocą dwóch pętli (zagnieżdżonych w pętli głównej) o różnej liczbie wykonań w kolejnym wierszu. Pierwsza pętla rysuje tło (wypisywane spacje), a druga pętla wypisuje znaki reprezentujące kolejny wiersz trójkąta. Nie należy stosować tablicy. Rysowanie należy wykonać za pomocą funkcji printf. Funkcję należy wywoływać dowolną liczbę razy, przekazując przez wartość podane z klawiatury wysokość choinki i rodzaj znaku wypełniającego powierzchnię figury. Po naciśnięciu klawisza k program powinien zakończyć się. Dodać komentarze w kodzie programu wyjaśniające, jak on reprezentuje algorytm rysowania figury. Budowa programu jest podobna do budowy programu z zad2.

Zad 4 (obowiązkowy) - w definicji ciała każdej funkcji należy użyć wskaźniki wg przykładów 1-4 1. Napisz program, który zawiera funkcję, która bada, czy wprowadzony łańcuch znaków jest palindromem tekstowym. Łańcuch znaków należy przekazać do funkcji przez listę argumentów. Jeśli wprowadzony łańcuch jest palindromem, funkcja przez wynik zwraca wartość 1, a w przeciwnym wypadku zwraca wartość 0. 2. Funkcję należy wywoływać dowolną liczbę razy. Po wywołaniu funkcji należy zbadać zwrócony przez nią wynik i wyświetlić na ekranie słowo tak (wynik równy 1) lub nie (wynik równy 0). Po naciśnięciu klawisza k program powinien zakończyć się. Dodać komentarze w kodzie programu wyjaśniające, jak on reprezentuje działanie algorytmu badania łańcucha znaków w celu rozpoznania palindromu. Przykłady palindromów tekstowych Wprowadzony ciąg znaków: maloolam Tablica znaków Indeks tablicy 0 1 2 3 4 5 6 7 Wartość elementu m a l o o l a m Wprowadzony ciąg znaków: malotolam Tablica znaków Indeks tablicy 0 1 2 3 4 5 6 7 8 Wartość elementu m a l o t o I a m Słowo jest palindromem jest wtedy, gdy wartość znaku pierwszego jest równa ostatniemu, i drugi przedostatniemu itd. W przypadku pierwszej tablicy spełnione są powyższe warunki, ponieważ wyraz jest palindromem tab[0] == tab[7] tab[1] == tab[6] tab[2]== tab[5] tab[3]== tab[4] W przypadku drugiej tablicy spełnione są powyższe warunki, ponieważ wyraz jest palindromem : tab[0] == tab[8] tab[1] == tab[7] tab[2]== tab[6] tab[3]= =tab[5] Przy nieparzystej liczbie elementów pomija się sprawdzanie elementu środkowego.

Przykład rozwiązania zad4 należy zdefiniować funkcję palindrom #include<stdio.h> #include<conio.h> #include <stdlib.h> int palindrom(char wiersz[]); void main() { const int N=30; char klucz; char wiersz[n]; int wynik; do { system("cls"); printf("wprowadz lancuch, nie dluzszy niz %d znakow: ",N); scanf("%29s",wiersz); wynik=palindrom(wiersz); printf("czy to jest palindrom?\n"); if (wynik==1) printf("tak\n"); else printf("nie\n"); printf("czy koniec programu: k - koniec, dowolny inny klawisz - dalej\n"); klucz=_getch(); while(klucz!='k'); int palindrom(char wiersz[]) { //tutaj należy napisac kod funkcji badającej zawartosc tablicy wiersz // funkcja zwraca warunkowo 1, gdy wykryto palindrom, 0, gdy nie wykryto return 1;

Zad5 (dodatkowe) - należy zastosować funkcje oraz umieścić komentarze w programie, określające który krok algorytmu reprezentuje komentowany kod. W definicji ciała funkcji należy użyć wskaźniki wg przykładów 1-4 Algorytm wyszukania liczb pierwszych metodą sita Eratostenesa. Należy wyznaczyć wszystkie liczby pierwsze w podzbiorze liczb naturalnych {1..N za pomocą algorytmu sita Eratostenesa wg podanego algorytmu. Należy wykonać schemat blokowy i program z użyciem tablicy int tab[n]. 1) Utworzyć tablicę zawierającą N elementów i wstawić do każdego elementu wartość 0 1.1) Podaj N z klawiatury 1.2) Jeśli N<2, powtórz krok 1.1 1.3) Ustaw i:=2 1.4) Dopóki i<=n wykonuj kolejne kroki, w przeciwnym wypadku przejdź do kroku 2 1.4.1) wstaw 0 do elementu tablicy o indeksie i 1.4.2) zwiększ i:=i+1 i przejdź do kroku 1.4. 2) Zakłada sie, że pewne indeksy elementów są szukanymi liczbami pierwszymi i po zakończeniu algorytmu elementy tablicy o tych indeksach będą zawierać wartość 0, natomiast pozostałe elementy mają wartość 1, ponieważ nie są liczbami pierwszymi. Stąd należy wstawić na początku wartość 1 do elementu o indeksie równym 1, ponieważ 1 nie jest liczba pierwszą. 3) Ustawić ost_liczp:=1;

4) Na podstawie faktu, że każda liczba złożona nie większa niż N ma dzielnik nie większy niż sqrt(n), wykonuj kolejne kroki, gdy ost_liczp*ost_liczp <=N, w przeciwnym wypadku przejdź do kroku 5: 4.1) Należy zwiększyć ost_liczp o 1: ost_liczp:=ost_liczp+1 4.2) Wykonuj kolejne kroki, jeśli jest prawdziwy warunek ost_liczp<=n) and (tab[ost_liczp]=1, w przeciwnym wypadku przejdź do kroku 4.3. 4.2.1) zwiększaj ost_liczp o 1: ost_liczp:=ost_liczp+1 (poszukiwanie kolejnej liczby pierwszej, czyli elementu tablicy o indeksie ost_liczp nie zawierającej wartości 1) 4.4.2) przejdź do kroku 4.2 4.3) Należy wyznaczyć podwojoną wartość ost_liczp ost i wyznaczyć numer i kolejnej liczby, która nie jest liczbą pierwszą : i:= ost_liczp*2 (rozpoczęcie kolejnego etapu wykreślania liczb, które nie są liczbami pierwszymi) 4.4) Dopóki i<=n, wykonaj w kolejnych krokach eliminacje liczb, które nie są liczbami pierwszymi, ponieważ są ich wielokrotnościami, w przeciwnym wypadku przejdź do kroku 4. 4.4.1) wstaw wartość 1 to elementu tablicy o wierszu równym i : tab[i]:=1 4.4.2) dodaj wartość ost_liczp do i: i:=i+ost_liczp, następnie przejdź do kroku 4.4 5) Wyświetl zawartość tablicy na ekranie: 5.1) wstaw i:=1 5.2) dopóki i<=n wykonuj kolejne kroki, w przeciwnym wypadku zakończ algorytm Wyjaśnienie: 5.2.1) jeśli tab[i]=0, wyświetl indeks elementu jako wartość kolejnej liczby pierwszej 5.2.2) wyznacz kolejny indeks i:=i+1 i przejdź do kroku 5.2. Wyrażenie : ost_liczp:=ost_liczp+1 oznacza, że zmiennej ost_liczp została przypisana wartośc o 1 większa od poprzedniej