sobota, 6 października 2012

Cyfry z matury maj 2012 cz. 2

Witam.
Dzisiaj zajmiemy się tak jak powiedziałem podpunktami a i b.

Tak więc przejdźmy do podpunktu a:

Mamy za zadanie wypisać ile liczb jest parzystych, prosta sprawa wystarczy sprawdzać czy liczba wczytana dzieli się przez 2, jeżeli tak zwiększamy parzyste o 1.

Zaczniemy już pisać program w wersji do kompilacji, pamiętajmy, że musimy dane wczytać z pliku cyfry.txt oraz zapisać je do pliku zadanie4.txt nie musimy tutaj kombinować z fstream'em wystarczy wejść w wiersz poleceń(start->uruchom->cmd) wejść do katalogu z naszym programem i plikami i napisać frazę:
cyfry.txt < nazwa_programu.exe > zadanie4.txt
Aha wszystkie programy wykonuje w środowisku CodeBlock.

Kod programu:
#include<iostream>

using namespace std;


int main()

{
unsigned long int liczba,parzyste=0; //deklarujemy zmienne oraz dla "spokojności" zerujemy
for(int i=0;i<1000;i++)   //wczytujemy liczby z pliku, pętla wykona się 1000 razy gdyż liczymy od 0
{
cin >> liczba;
if(liczba%2==0)parzyste++ //sprawdzamy czy zmienna z dzielenia liczby przez 2 wynosi 0 jeżeli tak to parzyste zwiększają się o jeden.
}
 cout <<"a " <<parzyste <<endl; //wypisujemy wynik poprzedzając go literką z podpunktu
To byłoby na tyle w podpunkcie a.

W podpunkcie b mamy wypisać liczbę która posiada największą oraz najmniejszą sumę cyfr..

tak więc dopisujemy zmienną punktB[1] którą stworzyliśmy w poprzedniej części oraz zmienną suma,najwieksza i najmniejsza:
 unsigned long int liczba,parzyste=0,punktB[1],suma=0,najwieksza=0,najmniejsza=0;
dodatkowo musimy wyzerować tablicę:
punktB[0]=0;
punktB[1]=0;
Aby znaleźć która z liczb ma największą sumę cyfr musimy znaleźć sumę. Wystarczy dodać 2 zmienne a i b, dzielić zmienną b która będzie przechowywać podzieloną liczbę oraz wyciągać resztę z dzielenia przez 10 ze zmiennej a. Zobaczmy jak to działa:


mamy liczbę 1234
zmienna a przyjmuje wartość liczby czyli 1234 
dzielimy ją dopóki nie osiągnie wartości 0
czyli
zmienna b równa się zmienna a dzielona przez 10 czyli 123,4 a ponieważ typ int przechowuje tylko zmienne całkowite otrzymamy 123
wyciągamy resztę z dzielenia z a czyli 1234%10=4  (a=4)
dodajemy otrzymany wynik do sumy suma+=a czyli 4
zmienna a przyjmuje wartość zmiennej b czyli a=123
i tak powtarzamy aż do 0

czyli nasz kod programu wygląda na razie tak:
int main()
{
unsigned long int liczba,parzyste=0,punktB[1],suma=0;//dodajemy nowe zmienne
for(int i=0;i<1000;i++)   //wczytujemy liczby z pliku
{
cin >> liczba;
if(liczba%2==0)parzyste++; 
while(a>0)
{
b=a/10;
a%=10;
suma+=a;
a=b;
}
}
 cout <<"a " <<parzyste <<endl;
}
Teraz wystarczy w pętli for sprawdzać czy otrzymana suma jest większa od zmiennej najwieksza lub mniejsza od najmniejsza jeżeli jest to podmieniamy najwieksza lub najwieksza na sume:
if(suma>najwieksza){punktB[0]=liczba;najwieksza=suma;}
else if(suma<najmniejsza){punktB[1]=liczba;najmniejsza=suma;}
I tak oto zakończyliśmy podpunkt b.

Kod programu:
    #include<iostream>
    using namespace std;
    int main()
    {

        unsigned long int liczba,parzyste=0,punktB[1],suma=0,a=0,b=0,najwieksza=0,najmniejsza=0;//dodajemy nowe zmienne
        punktB[0]=0;
        punktB[1]=0;
        for(int i=0;i<=1000;i++)   //wczytujemy liczby z pliku
        {

            cin >> liczba;
            if(liczba%2==0)parzyste++;
            a=liczba;
            while(a>0)
            {

                b=a/10;
                a%=10;
                suma+=a;
                a=b;
            }
            if(i==0){najmniejsza=suma;punktB[1]=liczba;}
            if(suma>=najwieksza){punktB[0]=liczba;najwieksza=suma;}
            else if(suma<najmniejsza){punktB[1]=liczba;najmniejsza=suma;}
            suma=0;

        }
         cout << "a " << parzyste << endl;

         cout << "b " << punktB[0] << " " << punktB[1] << endl;

        return 0;

    }
 W kolejnej części zajmiemy się podpunktem c.


Brak komentarzy:

Prześlij komentarz