Liczby przystajace modulo k
Kod był wyświetlany 1505 razy.
/*
Name: Liczby przystajace modulo k
Copyright: GPL GNU
Date: 03-04-10 17:23
Description:
w pliku wejsciowym liczby nie powinny se powtarzac.
*/
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <math.h>
#define OK 0
#define ERROR -1
using namespace std;
void errorLog(int);
void sortuj();
int * tablica,n;
int main()
{
ifstream rplik;
rplik.open("zad3.dane");
int liczba,i=0,k;
tablica = new int[100];
while(rplik>>liczba)
{
tablica[i] = liczba;
i++;
}
rplik.close();
n = i; // dla ulatwienia n oznacza ilosc elementow (1<n<100)
if(n<1 || n>=100)
{
errorLog(1);
return ERROR;
}
sortuj(); //tablica elementow zostaje posortowana,
// teraz wyznaczenie podzbiorow jest duzo prostsze
cout<<"Podaj k ";
cin>>k;
if(k>tablica[0] || k<2){errorLog(1); return ERROR;} // jezeli k jest wieksze
// niz najwiekszy element tablicy
// mamy do czynienia z bledem
// zerowy element jest najwiekszy
// bo tablica jest posortowana
// malejaco
//----------Program Wlasciwy---------------------------------
int wypisano = 0;
for(int q = 0;q<n;q++)
{
for(int i = q+1;i<n;i++)
{
if(((tablica[q] - tablica[i])%k == 0) && (tablica[q]!=tablica[i]) && (tablica[i]!=tablica[i-1]))
{
cout<<tablica[i]<<" ";
wypisano = 1;
}
}
if (wypisano ==1)
{
cout<<endl;
wypisano = 0;
}
}
cin.ignore();
getchar();
return OK;
}
//------------------------Implementacje procedur pomocniczych--------------
void errorLog(int nrBledu) // obsluga bledow
{
ofstream plikBledu;
plikBledu.open("zad3.err");
switch(nrBledu)
{
case 1:
{
//blad danych
plikBledu<<"Dane niezgodne z trescia zadania!";
break;
}
}
cout<<"Zajrzyj do pliku zad3.err!";
cin.ignore();
getchar();
}
void sortuj() // sortowanie poprzez wybieranie najwiekszego elementu
{
int maxIndex=0; //nr indexu najwiekszego elementu tablicy
int * tablica_pomocnicza = new int[n];
for(int k = 0;k<n;k++)
{
for(int i = 0;i<n;i++)
{
if(tablica[i] > tablica[maxIndex])
maxIndex = i;
}
tablica_pomocnicza[k] = tablica[maxIndex];
tablica[maxIndex] = -1; // aby ponownie nie brac tego samego elementu pod uwage
// warunek wynika z tresc zadania i mozliwych danych
}
for(int i = 0;i<n;i++)
{
tablica[i] = tablica_pomocnicza[i];
}
delete tablica_pomocnicza;
}
Pobierz plik tekstowy