Ćwiczenia 11 - dokończenie plików tekstwoych + rekurencja
Zad.1 Napisz program zapisujący wczytywane liczby z klawiatury do napotkania 0 do pliku i następnie wypisujący je na ekranie.
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
float liczba=1.0;
fstream plik("c:\\liczby.txt",ios::in | ios::out | ios::trunc);
while(true){
cout << "Podaj liczbe: ";
cin >> liczba;
if(liczba!=0) plik << liczba << " ";
else break;
}
plik.close();
plik.open("c:\\liczby.txt");
while(!plik.eof()){
plik>>liczba;
if(!plik.fail()) cout<<liczba<<" "; //ostatnim znakiem jest spacja, wiec eof jest dopiero po spacji
}
plik.close();
cout<<endl;
getch();
return 0;
}
//---------------------------------------------------------------------------
Uwaga:
Funkcja int fail() - funkcja zwraca wartość niezerową np. gdy oczekujemy wartości liczbowej a otrzymamy tekst,
Zad.2
Napisz program, który zapisze n liczb do pliku. Następnie dla każdej liczby zapisze ją i jej cyfry oddzielone spacjami do innego pliku. Drugi plik powinien zostać wypisany na ekranie.
Zad.3
Napisz program obliczający rekurencyjnie silnię. Porównaj z rozwiązaniem dla rozwiązania iteracyjnego.
Rozwiązanie rekurencyjne poniżej, iteracyjne samodzielnie.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
//---------------------------------------------------------------------------
int silnia(int n)
{
if (n==0) return 1;
else return n*silnia(n-1);
}
#pragma argsused
int main(int argc, char* argv[])
{
cout << silnia(5);
getch();
return 0;
}
//---------------------------------------------------------------------------
Zad.4
Napisz program obliczający sumę ciągu n-elemetowego liczb całkowitych z wykorzystaniem rekurencji.
Szkielet rozwiązania rekurencyjnego (samodzielnie program główny):
int suma(int n)
{
int x;
if (n==0) return coś_co_nie_zmienia_sumy;
else
{
wzytaj x;
return x+wywołanie_rekurencyjne_funkcji;
}
}
Zadanie 5. Napisz program obliczający sumę ciągu n-elemetowego liczb całkowitych zapisanych w tablicy z wykorzystaniem rekurencji. Funkcje do wprowadzania danych i wypisywania też są rekurencyjna.
Funkcja do wprowadzania danych:
void wprowadz(int *a, int n)
{
if (n==0)
return;
else
{
cin>>a[n];
wprowadz(a,n-1);
}
}
Zad.6. Napisz program, który dla wektora n-elementowego policzy maksimum i minimum. Funkcje powinny być rekurencyjne.