Informatyka I - wykład 6B
Funkcje wybrane problemy i ich rozwiÄ…zania
Slajd 1 Informatyka I wykład 6B G.P.Korbaś
Problem1.
Napisz funkcjÄ™ o prototypie
string psikus(string s)
która w tekście wyszukuje cyfry i każdą cyfrę zamienia na o 1 większą, czyli '0' zostanie
zamienione na '1', '7' na '8', itp. Przy czym cyfra '9' zostanie zamieniona na '0'
Slajd 2 Informatyka I wykład 6B G.P.Korbaś
Uwagi do rozwiÄ…zania problemu 1.
Koncepcja: sprawdzić każdy znak tekstu czy leży pomiędzy '0' a '9' (włącznie) znaki są
ułożone kolejno zgodnie z ich kodami ASCII. Jeśli jest to znak od '0' do '8', to wystarczy
zmienić jego kod ASCI na o 1 większy, jeśli jest to znak '9' to należy zmienić go na '0'.
Jeśli przekazujemy przez wartość zmienną typu string, to jest wykonywana jej kopia i nie
musimy martwić się o zmiany w oryginalnym tekście.
Slajd 3 Informatyka I wykład 6B G.P.Korbaś
Problem 1. - przykład rozwiązania
string psikus(string s)
{
int d=s.length();
int nr=0;
while (nr
{if (s[nr]>='0' && s[nr]<='9')
if (s[nr]=='9') s[nr]='0';
else s[nr]++;
nr++;
}
return s;
}
Slajd 4 Informatyka I wykład 6B G.P.Korbaś
Problem2.
A) Napisz funkcjÄ™ o prototypie
bool sprawdz(int &a,int &b,int aa=0,int bb=0)
Funkcja sprawdza, czy zmienna a jest równa aa. Jeśli nie, to do zmiennej a wpisywana jest
wartość aa. Ponadto funkcja sprawdza, czy zmienna b jest równa bb. Jeśli nie, to do
zmiennej b wpisywana jest wartość bb. Jeśli w obydwu przypadkach wystąpiła równość,
to funkcja zwraca prawdę, w przeciwnym wypadku fałsz.
B) Napisz program, który pobiera od użytkownika 4 liczby całkowite, aż do podania przez
użytkownika samych zer. Program wykorzystuje funkcję sprawdz aby sprawdzić, czy
pierwsza liczba jest równa drugiej i trzecia czwartej. Jeśli tak, to program pisze OK ,
jeśli nie, to program pisze NIE . Po napisaniu program pobiera koljną czwórkę liczb, np:
1 2 3 4
NIE
1 1 2 2
TAK
0 1 0 1
NIE
0 0 0 0 <----koniec
Slajd 5 Informatyka I wykład 6B G.P.Korbaś
Uwagi do rozwiÄ…zania problemu 2.
Koncepcja funkcji: W przedstawionym dalej rozwiązaniu stosuje się pośredniczącą
zmienną typu bool, której wartość zwracana jest pod koniec funkcji. Jeśli jest to możliwe
warto używać polecenia return jedynie pod koniec funkcji i nie ukrywać go w żadnej
pętli lub instrukcji warunkowej. Zmienna pośrednicząca pozwala często osiągnąć ten cel.
Koncepcja programu: Stosowana jest pętla while w nawiasie której występuje polecenie
wykonywane przed warunkiem. W nawiasie może być wiele poleceń oddzielonych
przecinkami rzeczywisty warunek pętli powinien być na końcu.
Jak sprawdzić w prosty sposób czy wszystkie 4 liczby są zerami? Wystarczy sprawdzić,
czy suma ich kwadratów jest zerami.
Slajd 6 Informatyka I wykład 6B G.P.Korbaś
Problem 2. - przykład rozwiązania
#include
using namespace std;
bool sprawdz(int &a,int &b,int aa=0,int bb=0)
{
bool rowno=true;
if (a!=aa)
{a=aa;
rowno=false;
}
if (b!=bb)
{b=bb;
rowno=false;
}
return rowno;
}
Slajd 7 Informatyka I wykład 6B G.P.Korbaś
int main()
{
int z1,z2,z3,z4;
while (cin>>z1>>z2>>z3>>z4,z1*z1+z2*z2+z3*z3+z4*z4!=0)
{
if (sprawdz(z1,z3,z2,z4))
cout << "OK\n";
else cout << "NIE\n";
}
return 0;
}
Slajd 8 Informatyka I wykład 6B G.P.Korbaś
Problem3.
A) Napisz funkcjÄ™ o prototypie
string zamiana(string s)
która w tekście wyszukuje przecinki i zamienia na kropki i dodatkowo z tekstu usuwa
wszystkie spacje
B) Załóżmy, że w pierwszym wierszu strumienia wejściowego znajduje się liczba
całkowita n, a następnie n wierszy z tekstem. Napisz program, który (wykorzystując
funkcję zamiana) pobierze dane i wyświetli wszystkie teksty zamienione. Można założyć,
że n<=1000.
Slajd 9 Informatyka I wykład 6B G.P.Korbaś
Uwagi do rozwiÄ…zania problemu 3.
Koncepcja funkcji: Funkcja składa się z dwu części. Pierwsza część zamienia przecinki na
kropki i jest podobna do problemu 1. Druga część szuka spacji jeśli spacja jest
znaleziona, to następuje jej usunięcie i dalsze sprawdzanie.
Koncepcja programu: Tworzona jest tablica na 1000 zmiennych typu string. Po
wprowadzeniu zmiennej liczbowej używamy cin.ignore(), co czyści bufor wejściowy i
powoduje, że pierwszy tekst jest wczytywany poprawnie (a nie pusty). Dalej wczytywane
są kolejne teksty za pomocą funkcji getline (z biblioteki string) zapamiętywane w
tablicy. Następnie teksty są zamieniane i wyświetlane w kolejnych wierszach.
Slajd 10 Informatyka I wykład 6B G.P.Korbaś
Problem 3. - przykład rozwiązania
#include
using namespace std;
string zamiana(string s)
{
int d=s.length();
int nr=0;
while (nr {if (s[nr]==',') s[nr]='.';
nr++;
}
do
{nr=s.find(' ');
if (nr>-1) s.erase(nr,1);
}
while (nr>-1);
return s;
}
Slajd 11 Informatyka I wykład 6B G.P.Korbaś
int main()
{
string t[1000];
int n;
cin >> n;
cin.ignore();
for (int i=0;i{getline(cin,t[i]);
cout<}
for (int i=0;i cout < return 0;
}
Slajd 12 Informatyka I wykład 6B G.P.Korbaś
Problem4.
A) Napisz funkcję, która rozwiązuje równanie postaci , gdzie a,b,c są
ax2ƒÄ…bxƒÄ…c=0
dowolnymi liczbami rzeczywistymi. Funkcja powinna zwracać informację o liczbie
pierwiastków tego rówania oraz same pierwiastki.
B) Napisz program, który pobiera od użytkownika współczynniki do podanego równania i
rozwiązuje je używając funkcji z podpunktu A. Po wyświetleniu wyników program
powinien pytać użytkownika czy chce rozwiązać kolejne równanie.
Slajd 13 Informatyka I wykład 6B G.P.Korbaś
Uwagi do rozwiÄ…zania problemu 4.
Koncepcja funkcji: Pełne rozwiązanie wymaga rozpatrzenia lewwej strony równania jako
funkcji kwadratowej, liniowej lub stałej.
Jeśli a`"0 , to obliczamy i możemy mieć zero rozwiązań (gdy
Ä…=b2-4 a c
x0=-b
Ä…"Ä…0 ), jedno rozwiÄ…zanie (gdy Ä…=0 ) lub dwa rozwiÄ…zania (gdy
wtedy
2a
ćą ćą
x1=-b- Ä… x2=-bƒÄ… Ä…
Ä…Ä…0 wtedy , )
2a 2a
Jeśli a=0, to patrzymy na b i c. Jeśli b=0 i c=0 to jest nieskończenie wiele rozwiązań.
Jeśli b=0 i c`"0 , to nie ma rozwiązań. Jeśli b`"0 , to jest jedno rozwiązanie x=-c/b
Koncepcja programu: Stosowana jest pętla do while i analiza odpowiedzi użytkownika.
Slajd 14 Informatyka I wykład 6B G.P.Korbaś
Problem 4. - przykład rozwiązania
#include
#include
using namespace std;
// zwraca liczbę rozwiązań lub -1 gdy jest nieskończenie wiele
int axxbxc(double a,double b,double c,double &x1,double &x2)
{
int liczroz=0; //licznik rozwiązań
if (a!=0) //kwadratowe
{double delta=b*b-4*a*c;
if (delta<0) liczroz=0;
else if (delta==0)
{x1=-b/(2*a);
liczroz=1;
}
else {x1=(-b-sqrt(delta))/(2*a);
x2=(-b+sqrt(delta))/(2*a);
liczroz=2;
}
}
else
Slajd 15 Informatyka I wykład 6B G.P.Korbaś
if (b!=0) //liniowe
{x1=-c/b;
liczroz=1;
}
else //stałe
if (c!=0) liczroz=0;
else liczroz=-1;
return liczroz;
}
Slajd 16 Informatyka I wykład 6B G.P.Korbaś
int main()
{ double a,b,c,x1,x2;
char z;
do
{cout << "a="; cin>>a;
cout << "b="; cin>>b;
cout << "c="; cin>>c;
switch (axxbxc(a,b,c,x1,x2)){
case -1: cout<<"Niesk. wiele rozw.."; break;
case 0: cout<<"Brak rozwiązań";break;
case 1: cout<<"Jedno rozwiÄ…zanie, x="<case 2: cout<<"Dwa rozw., x="<}
cout<<"\n\nWpisz 't' lub 'T' i naciśnij ENTER, aby liczyć
jeszcze raz - inny znak oznacza koniec\nCzy jeszcze raz? ";
cin >> z;
}
while (z=='t' || z=='T');
return 0;
}
Slajd 17 Informatyka I wykład 6B G.P.Korbaś
Wyszukiwarka
Podobne podstrony:
inf1 w6
W6
C w6 zmienne dynamiczne wskazniki funkcji
DoD Joint Services Weapon Safety Review Process
dod
w6 paleoklimat
Mah1 2 dod
DOD Net Centric Data Strategy and Community of Interest (COI) Training Glossary
czesc12 dod
ZJ SL 09 wyklad 1 dod A
w6
MSI AiR w6 2004
dod z2
W6
W6 Układy regulacji i dynamika AiS 2013
cwiczenia analogie dod ODP
w6 TRB
więcej podobnych podstron