این هم اولین برنامه درست و حسابی من(یه برنامه دیگه هم دارم که یه عدد میگیره میگه اوله یا مرکب .یکی هم ناقصه که بین دو تا عدد اعداد اول رو پیدا میکنه.بخواید اینا رو هم میذارم)
(پیدا کردم جفت اعداد صلح آمیز و اعداد کامل)(en.wikipedia.org/wiki/amicable_pairs)
فایل main.cpp
#include <conio.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include "conticker.h"
#include "conticker.cpp"
using namespace std;
int main(){
char c='y';
do{
int start,end;
int ai=0,pi=0;
bool checked=true;
cout<<"----------------------------------------\n";
cout<<"Enter a number to begin with : ";
cin>>start;
cout<<"Enter a number to finish with : ";
cin>>end;
cout<<"----------------------------------------\n";
if(start>=end){
cout<<"The beginning number must be smaller than the ending one.\n";
continue;}
else{
system("cls");
cout<<"Searching from "<<start<<" to "<<end<<".\n\n";
if(start==1) start=2;
long double a[500][2],p[500];
a[0][0]=0;
p[0]=0;
ConTicker::start();
for (size_t i = 0; i < 200; ++i) {
for(int i=start;i<=end;++i){
int sum1=1,sum2=1;
for(int j=(int)sqrt(i);j>1;--j){
if(i%j==0){
sum1+=j;
sum1+=i/j;
}
}
for(int j=(int)sqrt(sum1);j>1;--j){
if(sum1%j==0){
sum2+=j;
sum2+=sum1/j;
}
}
if(sum2==i){
if(sum1==i){
for(int j=0;p[j]!=0;++j){
if(p[j]==i){
checked=false;
break;}}
if(checked){
p[pi]=i;
++pi;
p[pi]=0;
cout<<"\rI found a perfect number : "<<i<<"\nPlease wait";}
checked=true;}
else{
if(sum1<i){
for(int j=0;a[j][0]!=0;++j){
if(a[j][0]==sum1){
checked=false;
break;}}
if(checked){
a[ai][0]=sum1;
a[ai][1]=i;
++ai;
a[ai][0]=0;
cout<<"\rI found an amicable pair : ("<<sum1<<","<<i<<")\nPlease wait";}
checked=true;}
else if(sum1>i ){
for(int j=0;a[j][0]!=0;++j){
if(a[j][0]==i){
checked=false;
break;}}
if(checked){
a[ai][0]=i;
a[ai][1]=sum1;
++ai;
a[ai][0]=0;
cout<<"\rI found an amicable pair : ("<<i<<","<<sum1<<")\nPlease wait";}
checked=true;}}}
ConTicker::tick();}}
ConTicker::stop();
cout<<"\n----------------------------------------\n";
cout<<"Do you want to continue(y/n)?";
cin>>c;}}
while(c=='y');
return 0;
}
فایل conticker.h
class ConTicker
{
public:
ConTicker() {}
static void start();
static void tick();
static void stop();
private:
static time_t t;
static size_t i;
static const char* c;
};
فایل conticker.cpp
#include <windows.h>
#include <time.h>
time_t ConTicker::t = 0;
size_t ConTicker::i = 0;
void ConTicker::start()
{
time(&ConTicker::t);
i = 0;
}
void ConTicker::tick()
{
if (ConTicker::t) {
time_t t;
time(&t);
if (0.01 < difftime(t,ConTicker::t)) {
ConTicker::t = t;
ConTicker::i = ((ConTicker::i+1)&3);
if(ConTicker::i!=0){
_putch('.');
}
else{
_cputs("\r \rPlease wait");
}
}
}
}
void ConTicker::stop()
{
ConTicker::i = 0;
ConTicker::t = 0;
_cputs("\rDone! \r\n");
cout<<"\a";
}
این یارو conticker چیز جالب و به درد بخوریه البته کار من نیست من فقط از یه بک اسلش چرخون به please wait و سه تا نقطه تغییرش دادم.
این برنامه رو تازه کارا حتما بخونن
امیدوارم خوشتون بیاد