Войти

Показать полную графическую версию : [решено] Четыре задачи начального уровня


Мусик
06-11-2008, 13:03
мне нужно решить задачи в Pascal
1)найти f(х)
1. х^2 если х кратно 3
2.х, если при делении на 3 остаток 1
3.х/3
2)Найти наибольший общий делитель.
3)Напечатать строку из к случайных символов
4) Стороны прямоугольника заданы натуральными числами м и к. Составить программу, которая находит на сколько квадратов можно разделить данный прямоугольник, если от него каждый раз отрезается квадрат мах площади.
За ранее спасибо))))

iskander-k
06-11-2008, 13:38
Для начала посмотрите здесь (http://forum.oszone.net/announcement-21-122.html) и исправьте заголовок.

Drongo
06-11-2008, 13:47
Мусик, Какой-то непонятный набор заданий. Да и название темы (http://www.forum.oszone.net/rules.html#3.19) оставляет желать лучшего. Кстати, на каком языке это всё нужно написать?

//Программа нахождения наибольшего общего делителя
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
// Функция нахождения НОД
int ged(int, int);

int main()
{
int z,
num1,
num2,
result;

cout<<" START '0' FINISH '-1' : ";
cin>>z;
while(z != -1){
cout<<"\n ENTER NUMBER1: ";
cin>>num1;
cout<<" ENTER NUMBER2: ";
cin>>num2;
result = ged(num1, num2);
cout<<"\n MAXIMUM OBSCHIY DELITEL CHISEL: "<<num1
<<" I "<<num2<<" RAVEN: "<<result<<endl;
cout<<"\n\n START '0' FINISH '-1' : ";
cin>>z;
}
return 0;
}

//Функция нахождения НОД
int ged(int number1, int number2)
{
int c = 1;
while(c != 0){
c = number1 % number2;
number1 = number2;
number2 = c;
}
return number1;
}
//---------------------------------------------------------------------------
//Программа нахождения наибольшего общего делителя
#include <windows.h>
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
// Функция перекодировки символов русского языка
char* Rus(const char* text);
char bufRus[256];

char* Rus(const char* text)
{
CharToOem(text, bufRus);
return bufRus;
}
// Функция нахождения НОД
int ged(int, int);

int main()
{
int z,
num1,
num2,
result;

cout<<Rus(" Введите '0' для продолжения или '-1' для финиша : ");
cin>>z;
while(z != -1){
cout<<Rus("\n Введите 1-е число: ");
cin>>num1;
cout<<Rus(" Введите 2-е число: ");
cin>>num2;
result = ged(num1, num2);
cout<<Rus("\n Максимальный общий делитель чисел: ")<<num1;
cout<<Rus(" и ")<<num2;
cout<<Rus(" равен = ")<<result<<endl;
cout<<Rus("\n\n Введите '0' для продолжения или '-1' для финиша : ");
cin>>z;
}
return 0;
}

//Функция нахождения НОД
int ged(int number1, int number2)
{
int c = 1;
while(c != 0){
c = number1 % number2;
number1 = number2;
number2 = c;
}
return number1;
}
//---------------------------------------------------------------------------

Arrest
06-11-2008, 14:56
Алгоритм решения №4 (привожу исключительно функцию нахождения без проверок ошибок и ввода/вывода), C:

int getsquares(int x, int y){
int count;
while(x>0 && y>0){
if(x>y){
x -= y;
}else{
y -= x;
}
count++;
}
return count;
}


Алгоритм решения №1(аналогично), C :) :

float f(int x){
if(x % 3 == 0){
return x*x;
}
if(x % 3 == 1){
return x;
}
return x/3;
}

Задачу 3 решать самостоятельно, генеришь случайное число от 0 до 25, добавляешь к индексу первой буквы ASCII и кастуешь в char.

Drongo
06-11-2008, 15:10
Arrest, Задачу 3 решать самостоятельно, генеришь случайное число от 0 до 25, добавляешь к индексу первой буквы ASCII и кастуешь в char. »Можешь более подробнее объяснить? Я пробовал решить её, и знаю, что символ
'A' = 65
..
..
'z' = 122сделал так, но это не совсем получается верно.
...
num2 = 65 + rand() % 122;
element = static_cast <char> (num2);
cout<<element;
...Мне не понятно выражение. добавляешь к индексу первой буквы ASCII »Можно на примере только небольшого фрагмента кода показать как это будет?

Arrest
06-11-2008, 15:28
int randomnum = rand() % 26;
char randomchar = (char)randomnum+65;

как-то вот так

Drongo
06-11-2008, 15:59
Arrest, Точно, сработало. Только хочется, чтобы символы могли печататься в обоих регистрах:
num1 - переменная, которая показывает, сколько случайных символов генирировать..
...
for(int i = 0; i <= num1; i++){
num2 = rand() % 26;
element = static_cast <char> (num2 + 65);
cout<<element<<" ";
}
...

Arrest
07-11-2008, 22:24
for(int i = 0; i <= num1; i++){
num2 = rand() % (26*2); // символы больших и малых регистров стоят подряд, так что можно и так
element = static_cast <char> (num2 + 65);
cout<<element<<" ";
}

Drongo
08-11-2008, 16:39
Arrest, num2 = rand() % (26*2); Значит можно выражение (26 * 2), заменить на результат произведения = 52. :)




© OSzone.net 2001-2012