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

Podobne dokumenty
Język C zajęcia nr 5

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

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

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

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

ALGORYTMY I STRUKTURY DANYCH

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

Podstawy algorytmiki i programowania - wykład 3 Funkcje rekurencyjne Wyszukiwanie liniowe i binarne w tablicy

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Język C zajęcia nr 11. Funkcje

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

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

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

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

Rekurencja (rekursja)

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

Funkcja (podprogram) void

tablica: dane_liczbowe

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy.

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

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

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

Proste programy w C++ zadania

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

if (wyrażenie ) instrukcja

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Instrukcje sterujące

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

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

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

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

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

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

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

Wstęp do informatyki- wykład 6

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

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Wstęp do Programowania, laboratorium 02

Projektowanie algorytmów rekurencyjnych

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Język C, tablice i funkcje (laboratorium)

Programowanie - wykład 4

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

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

Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja!

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

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

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

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

2 Przygotował: mgr inż. Maciej Lasota

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

KURS C/C++ WYKŁAD 2. char znak; znak = a ; Program 2 #include<stdio.h> void main() { char znak; while( (znak = getchar() )!= t ) putchar(znak); }

Ćwiczenia podstawowe, zestaw 5, część 1

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

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

while (test) instrukcja; int i=0; while (i<10) i++; dopóki test prawdziwy wykonuj instrukcję Wykonano: 35% / \ fałsz test prawda instrukcja

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Część 4 życie programu

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

3. Podstawowe funkcje mamematyczne. ZAPOZNAĆ SIĘ!!!

Programowanie - instrukcje sterujące

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

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

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

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

Algorytm selekcji Hoare a. Łukasz Miemus

Podstawy programowania. Wykład 3 Konstrukcje sterujące. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Podstawy programowania C. dr. Krystyna Łapin

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

C++ wprowadzanie zmiennych

Wykład 3. Instrukcje powtarzające

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

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

Funkcje. Piotr Zierhoffer. 7 października Institute of Computer Science Poznań University of Technology

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Spis treści JĘZYK C - PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI, REKURENCJA. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

I. Podstawy języka C powtórka

Pzetestuj działanie pętli while i do...while na poniższym przykładzie:

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

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

Procedury i funkcje. Przykład programu z procedurą. Definicja. Cechy procedury

5. Rekurencja. Przykłady

WYKŁAD 4, 5 i 6. Wprowadzenie do języka C Mój pierwszy, drugi,..., n-ty program w języku C. Programy: c1_1.c... c1_9.c.

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

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Katedra Elektrotechniki Teoretycznej i Informatyki. sem. II - wykład 6. Dr hab. inż. M. Czyżak

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

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

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

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

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

Transkrypt:

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

METODY REKURENCYJNE (1) - program c3_1 ====================================================================================================== Funkcja rekurencyjna to funkcja, która wywołuje samą siebie. ====================================================================================================== /* Przyklad 3.1 - wypisz znaki z klawiatury w odwrotnej kolejnosci */ #include <stdio.h> void odwrotnie( void ); void main() printf("\npisz w linii. Zakoncz <Enter>. \n\n"); odwrotnie(); void odwrotnie( void ) char c; // wczytaj znak z klawiatury i podstaw jego if ( (c=getchar() )!= '\n' ) // kod ASCII do c; jeśli nie jest to koniec linii, to: // odwrotnie(); // wywołaj ponownie funkcję odwrotnie() printf( "%c", c); // wyświetl na ekranie znak c

METODY REKURENCYJNE (2) - program c3_1 Wypisz w odwrotnej kolejności znaki z klawiatury ZAŁOŻENIE: z klawiatury: ab [ENTER] void main()... odwrotnie();... c a ; odwrotnie(); c b ; odwrotnie(); c \n ; void odwrotnie( void ) char c; if ( (c=getchar())!= '\n' ) odwrotnie(); printf( "%c", c); wypisz c; wypisz c; c jest lokalną zmienną każdego z wywołań funkcji, która ma różną wartość w każdym z wywołań

METODY REKURENCYJNE (3) - program c3_1 Wypisz w odwrotnej kolejności znaki z klawiatury Program główny ZAŁOŻENIE: z klawiatury: abcd [ENTER] a printf b printf c printf d printf \n

METODY REKURENCYJNE (4) - program c3_2 Zamiana integer na ASCII /* Przyklad 3.2 - wypisz ma ekranie liczbę calkowitą */ /* czyli INTEGER na ASCII */ #include <stdio.h> #include <math.h> void wypisz( int n ); /* program glowny -------------------------------------------------------------------- */ void main() int x; printf(" \n jaka liczba calkowita? "); scanf("%d", &x); printf(" \n podane = %d \n", x); printf(" rekursja = "); wypisz( x ); printf("\n");

/* Funkcja rekurencyjna ----------------------------------------------------------- */ void wypisz( int n ) int i; if ( n < 0 ) putchar('-'); n = -n; if ( (i=n/10)!= 0 ) wypisz( i ); // jeśli liczba ujemna, // to napisz - oraz zaneguj liczbę // jeśli i, czyli część całkowita z n/10, // jest różna od zera, to wywołaj ponownie // ale z argumentem i putchar( 0 +n%10); // to (reszta z dzielenia n przez 10) // putchar( '0' + (unsigned char) (n - 10 * i) ); // lub to (czyli najmniej znacząca cyfra)

METODY REKURENCYJNE (5) - program c3_2 Zamiana integer na ASCII Program główny ZAŁOŻENIE: z klawiatury: 12345 [ENTER] n 12345 putchar 5 putchar = putchar( 0 + (unsigned char) (n % 10) i = n/10 n=1234 putchar 4 = putchar( 0 + (unsigned char) (n 10*i) i = n/10 n=123 putchar 3 wypisz resztę z dzielenia n przez 10, czyli najmniej znaczącą cyfrę n i = n/10 n=12 putchar 2 i = n/10 n=1 putchar 1

METODY REKURENCYJNE (6) - program c3_3 n! czyli n-silnia /* Przyklad 3.3 - METODY REKURENCYJNE - oblicz n! */ /* n! = 1*2*3*...*(n-1)*n np. 5! = 1*2*3*4*5 */ #include <stdio.h> long silnia( long n ); /* program glowny -------------------------------------------------------------- */ void main() long n, x, iloczyn; printf("\n Obliczam funkcje n! Podaj n? [max 12] "); scanf("%ld", &n); /* Metoda iteracyjna */ iloczyn = 1; for( x = n; x > 0; x--) iloczyn = iloczyn * x; printf( "\n Metoda iteracyjna --> n! = %ld \n", iloczyn );

/* Metoda rekurencyjna */ iloczyn = silnia( n ); printf( "\n Metoda rekurencyjna --> n! = %ld \n", iloczyn); /* Funkcja rekurencyjna ----------------------------------------------------------- */ long silnia( long n ) long x, y; if( n == 0L ) return(1); // L znaczy long x = n-1; y = silnia(x); /* rekurencyjne wywolanie */ return(n*y); long silnia( long n ) if( n == 0L ) return(1); return(n* silnia(n-1)); /* rekurencyjne wywolanie */

METODY REKURENCYJNE (7) - program c3_3 n! czyli n-silnia Program główny ZAŁOŻENIE: z klawiatury: 4 [ENTER] n 4 4*(3*2*1*1) 24 n-1 3 3*(2*1*1) 6 n-1 2 2*(1*1) n-1 1 1*(1) n-1 0 1 2 1 1 long silnia( long n ) long x, y; if( n == 0L ) return(1); x = n-1; y = silnia(x); return(n*y); long silnia( long n ) if( n == 0L ) return(1); return( n*silnia(n-1) );

METODY REKURENCYJNE (7) - program c3_5 szukanie elementu metodą podziału zbioru na dwie części indeks i tablica dzielników ZADANIE: znaleźć indeks i tablicy, dla którego: tab[ i ] == x N-1 2.0 15 5 4 3 2 1 0 1.5 0.5 0.4 0.3 0.2 0.1 0.0 x = 1.6 ROZWIĄZANIE 1 (sekwencyjne): i = 0; while( ( x!= tab[i] ) & (i < N-1) ) i++; ROZWIĄZANIE 2 (rekurencyjne): int szukaj( int tab[ ], int x, int dol, int gora ) int srodek; srodek = (dol + gora)/2; if ( x == tab[ srodek ] ) return( srodek); if ( x < tab[ srodek ] ) return( szukaj( tab, x, dol, srodek - 1 ) ); else return( szukaj( tab, x, srodek + 1, gora ) );

METODY REKURENCYJNE (8) - program c3_5 PRZYKŁAD: przetworniki A/C kompensacyjne: równomierny (po lewej) i wagowy (po prawej) U licznika U x K 0/1 U x K 0/1 U C/A C/A 0 0 1 1 Licznik/Generator U REF Stop Start U C/A C/A U REF 0 0 1 1 Stop Układ logiki Start U licznika U zakres U zakres U x 3/4U z 1/2U z U x stan licznika 1/4U z 0000 0001 0010 0011 0100 0 1 2 3 nr bitu C/A

METODY REKURENCYJNE (9) - program c3_5 szukanie metodą podziału na dwie części /* Przyklad 3.5 - METODY REKURENCYJNE - szukanie "dwojkowe" */ /* WEJŚCIE: tab = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] */ /* x = liczba naturalna z klawiatury */ /* WYJŚCIE: położenie (indeks) elementu x w tablicy tab[] */ #include <stdio.h> int szukaj( int tab[ ], int x, int dol, int gora ); void main()/* program glowny ---------------------------------------------------------------------- */ int tab[ 11 ] = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10 ; int x, indeks, dol, gora; printf("\n Jaka jest calkowita wartosc poszukiwanego elementu? "); scanf("%d", &x); dol = 0; gora = 10; indeks = szukaj( tab, x, dol, gora ); printf( "\n Indeks = %i \n", indeks);

/* funkcja rekursywna ----------------------------------------------------------------- */ int szukaj( int tab[ ], int x, int dol, int gora ) int srodek; if ( dol > gora ) return(-1); /* -1 oznacza brak elementu w zbiorze */ srodek = (dol + gora)/2; if ( x == tab[ srodek ] ) return( srodek); if ( x < tab[ srodek ] ) return( szukaj( tab, x, dol, srodek - 1 ) ); else return( szukaj( tab, x, srodek + 1, gora ) );