C++ Kullanıcı Menüsü Oluşturmak
-
Uygulamada kullanıcının arama yapılmasını isteniyor.
#include <iostream>
#include <fstream> // headeren fail za failov potok
using namespace std;
//prototipi na funciite
int inter_search(int key, int num) ;
void zapis(int a[], int n); // za zapis na dannite v faila
int main()
{
int a[100]; // masiv s maksimum 100 elementa
int key,i=0; // promenlivi za tarseniq element, stapka za tarsene i indeksa na elementite v masiv
char ime[100]; // promenliva za patq na faila
fstream fp;
cout<<"Zadaite patqt na fail: ";
cin>>ime;
fp.open(ime); // otvarqne na izvikaniq fail ot saotvetnata direktoriq
if(!fp) // proverka za sa6testvuvaneto na faila
{
cout<<"Ne se namira faila !!!"<<endl;
exit(1);
}
int n=0;// promenliva za broq na elementite vuv faila
while(!fp.eof()) // obhojdane go kraq na faila
{
fp>>a[i]; // izvejdane na elementite ot faila
i++; // narastvane na indeksa na poredniq element prehvarlen v masiva
n++; // narastvane na broikata na elementite v masiva
}
for(i=0; i<n; i++) // cikal za obhojdane s izvejdane na elementite na ekrana
cout<<" "<<a[i];
cout<<endl;
fp.close(); // zatvarqne na faila
cout<<"Vuvejdane element za tarsene: "<<endl;
cin>>key;
if(inter_search( n, key)!=-1) // izvikvane na funkciqta za tarsene sas stapka
{
cout<<"Elementat "<<key<<" e nameren "<<endl;
cout<<endl<<"Premahvam go ot masiva. Noviqt vi masiv e: "<<endl;
//promqna na indeksite na masiva sled iztrivaneto na elementa
i=0;
while (i<n) {if (a[i]==key) {
for (int j=i;j<n;j++) a[j]=a[j+1]; n=n-1;}
else i+=1;}
for (i=0; i<n; i++)
cout<<endl<<"A ["<<i<<"]"<<a[i];
zapis(a, n); // izvikvane na funkciqta za zapis
}
else
cout<<"Elementat ne e namiran "<<key<<endl;
system("pause");
return 0;
}
//Funkciq za interpolacionno tarsene
int inter_search(int key, int num)
{ unsigned lf, rt, m;//lf - na4alniq indeks v intervala rt - krainiq indeks v intervala m - indeksa n? sravnqvaniq element
float k; //koeficient
int a[100];
lf=0; rt=num-1;
while (lf<=rt)
{ if (a[rt]==a[lf])
if (a[lf]==key)
return lf; //elementat ? nameren
else
return 0; //elementat ne e nameren
k=(float) (key-a[lf])/(a[rt]-a[lf]); //koeficient na poziciqta
if (k<0||k>1) return 0; //elementat ne e nameren
m=(unsigned)(lf+k*(rt-lf)+0.5);
if (key<a[m]) rt=m-1;
else if(key>a[m]) lf=m+1;
else return m; //elementat e nameren
}
return 0; //elementat ne ? nameren
}
void zapis(int a[], int n)
{
char ime[100];
fstream fp;
cout<<endl;
cout<<"Dannite shte se zapisat obratno v faila "<<endl;
cout<<"Zadaite patqt na faila: ";
cin>>ime;
fp.open(ime, ios::out); // otvarqne ?? faila za zapis
if(!fp)
{
cout<<"Nqma Takuv Fail!!!"<<endl;
exit(1);
}
for(int i=0; i<n; i++)
fp<<" "<<a[i];
fp.close();
cout<<endl;
cout<<"Va6ite danni sa zapisani uspe6no vuv faila "<<endl;
}
-
himm bilgarski :D
-
Wakizashi bunu yazdı:
-----------------------------
himm bilgarski :D
-----------------------------:)