
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
Задачи к экзамену по дисциплине «Структуры и алгоритмы компьютерной обработки данных»
Написать программу для перевода числа из системы счисления с основанием 2 в систему счисления с основанием 9.
int n,a,k,t,i;
String str1="";
int main(int argc, char* argv[])
{
cout<<"VVedite chiclo v 2-i cicteme"<<endl;
cin>>n;
t=0;
i=0;
while(n>0)
{
a=n%10;
n=n/10;
t+=a*pow(2,i++);
};
cout <<"v 9-i sisteme ono ravno: ";
while (t!=0)
{
k=t%9;
t=t/9;
str1+=IntToStr(k);
}
for (int i=str1.Length(); i>=1;--i) cout<< str1[i];
}
Написать программу для перевода десятичного числа в римские цифры и обратно.
int _tmain()
{
setlocale( LC_ALL, "Russian" );
int ar[13] = {1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000};
string rim[13] = {"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};
string s;
int n;
s ="";
int i;
cout << "ВВедите арабское число = ";
cin >> n;
i = 12;
while (n > 0)
{
if (n < ar[i]) --i;
else{
s += rim[i];
n -= ar[i]; }
}
cout << "Римское число = "<<s<<endl;
s = "";
cout <<"ВВедите римское число = ";
cin >> s;
n = 0;
int v;
i = 12;
int k = 0;
while (i != -1)
{
int v = s.rfind(rim[i], 0);
if (v > -1) { n += ar[i];
if (rim[i].length() == 1)
{
for (int j = 0; j < s.length(); j++)
s[j] = s[j+1];
s.resize(s.length() - 1);
}
else{
for (int j = 0; j < s.length(); j++)
s[j] = s[j+1];
s.resize(s.length() - 1);
for (int j = 0; j < s.length(); j++)
s[j] = s[j+1];
s.resize(s.length() - 1);
}
}
else i--;
}
cout << "Арабское число = " << n << endl;
}
Написать программу, вычисляющую сумму двух «длинных» чисел, произведение «длинного» числа на обычное целое, умножение «длинного» числа на степень 10.
int* sum(int* m1, int* m2)
{
for(int i=n-1; i>=0; --i)
{
temp=m1[i]+m2[i]+m3[i];
if (temp > 9)
{
m3[i]=temp%10;
temp1=temp/10;
m3[i-1]+=temp1;
} else m3[i]=temp;
}
return m3;
} ;
int* umn_na_10(int* m1, int ch)
{
temp=ch;
int k3 = n-1;
for(int k=0; k<temp; ++k)
{
for(int i=1; i<n; ++i)
{
m1[i]=m1[i+1];
}
m1[k3]=0;
}
return m1;
} ;
int* umn_na_cif(int* m1,int ch)
{
int* m3;
m3=new int[n];
for (int i=0; i<n; ++i) m3[i]=0;
for(int i=n-1; i>=0; --i)
{
temp=m1[i]*ch+m3[i];
if (temp > 9)
{
m3[i]=temp%10;
temp1=temp/10;
m3[i-1]+=temp1;
} else m3[i]=temp;
}
return m3;
} ;
Написать программу, вычисляющую произведение двух «длинных» чисел. (см. задачу 3)
int* umn(int*m1,int* m2)
{
cozd_pust(m3);
cozd_pust(m4);
m4=umn_na_cif(m1,m2[n-1]);
for (int l=n-2; l>0; l--)
{
m3=umn_na_cif(m1,m2[l]);
m3=umn_na_10(m3,n-l-1);
m4=sum(m3,m4);
} ;
};
Написать программу, вычисляющую частное и остаток от деления двух «длинных чисел».
Написать программу, реализующую два простейших квадратичных алгоритма сортировки.
а. «пузырьком»
int a[100];
int n;
int temp;
void puzirok(int *m,int k)
{
int kk=k;
for(int j=0; j<kk-2;++j) {
for(int i=0; i<k-1; ++i)
{
if(m[i]>m[i+1]) {
temp=m[i];
m[i]=m[i+1];
m[i+1]=temp;
};
}
};
}
Int main(int argc, char* argv[])
{
cin>>n;
for(int i=0; i<n; ++i) cin>> a[i];
puzirok(a,n);
for(int i=0; i<n; ++i) cout << a[i];
б. Прямыми вставками
int a[10];
int n,k,j;
Int main(int argc, char* argv[])
{
cout << "kolich"<<endl;
cin >> n;
cout << "a"<<endl;
for (int i=1; i<=n; ++i) cin >> a[i];
for(int i=1; i<=n; ++i)
{
k=a[i];
for(j=i;(j>0)&&(a[j-1]>k);j--)
{
a[j]=a[j-1];
}
a[j]=k;
};
for (int i=1; i<=n; ++i) cout << a[i];
}
Написать программу, реализующую пирамидальную сортировку массива данных.
const int N=100;
int a[N];
int n,t,temp,maxe,kol,nn;
void minim(int k)
{
kol=n-1;
maxe=k;
if ((k*2+2<=kol)&&(a[k*2+2]>a[maxe])) maxe=2*k+2;
if ((k*2+1<=kol)&&(a[k*2+1]>a[maxe])) maxe=2*k+1;
if (maxe!=k)
{
t=a[maxe];
a[maxe]=a[k];
a[k]=t;
minim(maxe);
}
};
void pir_sort()
{ nn=n;
while (n>1) {
temp=a[0];
a[0]=a[n-1];
a[n-1]=temp;
--n;
minim(0);
} ;
for (int l=0; l<nn; ++l) cout << a[l]<<' ';
cout << endl;
};
Int main(int argc, char* argv[])
{
cout << "Vvedite koli4estvo elementov"<<endl;
cin >> n;
cout << "VVedite posledovatelnost"<<endl;
for (int i=0; i<n; ++i) cin >> a[i];
pir_sort();
}
Написать программу, реализующую сортировку слиянием массива данных.
int n;
int* mas; int* mas_new;
void sort(int l,int r)
{
if (l<r){
int q=(l+r)/2;
sort(l,q);
sort(q+1,r);
// дальше следует процедура слияния
int i=l;
int j=q+1;
int k=l;
while ((i<=q)&&(j<=r))
{
if (mas[i]<=mas[j])
{
mas_new[k]=mas[i];
i++; k++;
} else
{
mas_new[k]=mas[j];
j++; k++;
}
};
while (j<=r)
{
mas_new[k]=mas[j];
j++; k++;
} ;
while (i<=q)
{
mas_new[k]=mas[i];
i++; k++;
}
for (int i=l; i<=r; ++i) mas[i]=mas_new[i];
}
};
Int main(int argc, char* argv[])
{
cout << "vvedite pazmer"<<endl;
cin >> n;
mas = new int[n];
mas_new = new int[n];
cout << "vvedite massiv" << endl;
for (int i=0; i<n; i++) cin >> mas[i];
int l=0; int r=n-1;
// аналогично переписать оставшиеся элементы из левой половины
sort(l,r);
for (int i=0; i<n; i++) cout << mas[i];
}
Написать программу, реализующую алгоритм быстрой сортировки.
int n,j,i;
int* mas;
void sort(int l, int r)
{
i=l;
j=r;
int x = mas[(l+r)/2]; //опорный средний
while (i<=j)
{
while (mas[i]<x) i++;
while (mas[j]>x) j--;
if (i<=j)
{
int temp=mas[i];
mas[i]=mas[j];
mas[j]=temp;
i++; j--;
}
if (l<j) sort(l,j);
if (i<r) sort(i,r);
}
};
Int main(int argc, char* argv[])
{
cout << "vvedite pazmer"<<endl;
cin >> n;
mas = new int[n];
cout << "Input mnochestvo"<<endl;
for (int i=0; i<n; ++i) cin >> mas[i];
sort(0,n-1);
for (int i=0; i<n; ++i) cout << mas[i]<< " ";
getch();
}
Написать программу, выполняющую сортировку подсчетом набора целых чисел из диапазона от -1000 до 1000.
const int m = 30;
const int cou=100;
int n;
int a[cou];
int b[cou];
int c[m];