Квадрат Пифагора
Если второе - то интересно, в каких институтах такое задают в качестве задания на программирование. :)
Я вот тоже кое-что нацарапал. Вроде то. Но не на Паскале. :) Ибо Паскаль я не знаю.
using namespace std;
bool CheckDate(unsigned int day, unsigned int month, unsigned int year)
{
if(year < 1 || year > 9999)
return false;
if(month < 1 || month > 12)
return false;
if(day < 1)
return false;
unsigned int maxDay;
if(month == 2)
{
if(!(year % 4) && (year % 100 || (year / 100) % 4))
maxDay = 29;
else
maxDay = 28;
}
else if(month == 4 || month == 6 || month == 9 || month == 11)
maxDay = 30;
else
maxDay = 31;
if(day > maxDay)
return false;
return true;
}
void AssignSymbols(unsigned int *arr, unsigned int num, unsigned int size = 2)
{
for( ; size; --size)
{
arr[size - 1] = num % 10;
num /= 10;
}
}
unsigned int GetSum(unsigned int *arr, unsigned int size = 2)
{
unsigned int result = 0;
for(size_t i = 0; i < size; ++i)
result += arr;
return result;
}
int main()
{
unsigned int day_, month_, year_;
cout << "Enter day, month, year:\n";
cin >> day_ >> month_ >> year_;
if(!CheckDate(day_, month_, year_))
{
cout << "Incorrect date\n";
return 0;
}
unsigned int num_array[16];
AssignSymbols(num_array, day_);
AssignSymbols(num_array + 2, month_);
AssignSymbols(num_array + 4, year_, 4);
unsigned int first_number = GetSum(num_array, 8);
AssignSymbols(num_array + 8, first_number);
unsigned int sum = GetSum(num_array + 8);
AssignSymbols(num_array + 10, sum);
sum = first_number - (num_array[0] ? num_array[0] : num_array[1]) * 2;
AssignSymbols(num_array + 12, sum);
sum = GetSum(num_array + 12);
AssignSymbols(num_array + 14, sum);
unsigned int pMatrix[9] = { 0 };
unsigned int i;
for(i = 0; i < 16; ++i)
if(unsigned int n = num_array)
++pMatrix[n - 1];
cout << "\nPsycho Matrix:\n";
for(i = 0; i < 9; ++i)
if(unsigned int j = pMatrix)
{
for( ; j; --j)
cout << i + 1;
cout << "\n";
}
return 0;
}
Я к сожалению больше ничего, кроме ПАСКАЛЯ не знаю!
Это на великом и могучем C++.
Ну, для разнообразия можете по C++ попробовать что-нибудь почитать и начать что-то программировать. ;)
Паскаль тут много кто знает. Но вряд ли будут вам помогать, если вы не продемонстрируете, что с вашей стороны были хоть какие-то усилия написать программу. Халявщиков тут не любят.
Так что для начала можете написать здесь код (только пожалуйста с использованием тегов [NOPARSE]
Если вы не сделаете ничего из того что я написал - то ваши шансы получить помощь в написании программы ничтожно малы...
uses crt;
var a1,a2,b1,b2,c1,c2,z1,z2,z3,s,d,j,k,a,b,c,z4:integer;
begin
clrscr;
Writeln('введите число вашего рождения.');
readln(a);
writeln('введите месяц вашего рождения.');
readln(b);
writeln('введите год вашего рожения.');
readln(c);
a1:=a div 10;
a2:=a-10*a1;
b1:=b div 10;
b2:=b-10*b1;
c1:=c div 10;
c2:=c-10*c1;
z1:=a1+a2+b1+b2+c1+c2;
S:=z1 div 10;
d:=z2-10*s;
z2:=s+d;
case a1 of
0: z3:=z1-a2*2;
else z3:=z1-a1*2;
j:=z3 div 10;
k:=z3-10*j;
z4:=j+k;
writeln('ваши цифры ' , a , '.' , b , '.19' , c , ' Ё '
, z1, ' ' , z2 ,' ', z3 , ' ' , z4 ,'.');
end;
readln
end.
Она работает, но не так как мне бы хотелось. Хочется чтобы программа показывала сколько каких цифр есть конкретно! Ещё хочется не отдельно вводить число, месяц и год, а как то одним вводом. Тоже не соображу что-то!
Ну, для разнообразия можете по C++ попробовать что-нибудь почитать и начать что-то программировать. ;)
Паскаль тут много кто знает. Но вряд ли будут вам помогать, если вы не продемонстрируете, что с вашей стороны были хоть какие-то усилия написать программу. Халявщиков тут не любят.
Так что для начала можете написать здесь код (только пожалуйста с использованием тегов [NOPARSE]
Если вы не сделаете ничего из того что я написал - то ваши шансы получить помощь в написании программы ничтожно малы...
Я сбросила, то, что смогла. Я только начала изучать программирование. Я в 6 классе учусь, да ещё сейчас до кучи ногу сломала. По математике я должна выступить на конференции, там как раз я эту самую психоматрицу затрагиваю. Ну вот я и решила, что было бы не плохо, продемонстрировать программу расчёта, а не в ручную писать, а тут на коньках рухнуда и как говорится очнулась, закрытый перелом, гипс!
Ну что же, неплохо, неплохо. В том смысле - что сами что-то пытаетесь программировать, и для начинающего (того кто начал изучать программирование, да еще и ученик 6 класса) результат не сказать что плохой, по-моему... В том что ногу сломали - сочувствую, желаю выздоровления.
Выступление на конференции по математике - это хорошо, вот только... тему вы по моему выбрали не очень удачную - т.к. вся эту нумерология - сплошное шарлатанство, по-моему. Впрочем, для тренировки программированию можно и в составлении таких программ поупражняться. Так что дело ваше.
Ну, немного я Паскаль знаю, попробую помочь.
Сначала замечания:
1. Ввод года у вас реализован так, как будто он состоит всего из двух цифр, в то время как в годе - четыре цифры.
2. Вместо отдельных переменных, представляющих введенные день, год и месяц я бы посоветовал вам использовать массив, собственно в своем варианте на C++ я так и сделал.
3. У вас нет проверки на некорректные значения вводимых дня, месяца и года.
Теперь по поводу того что вам требуется - посчитать сколько каких символов встречается. Можно завести массив целых чисел размерностью 9 - на каждую цифру - соответствующий элемент, который хранит сколько раз такая цифра встретилась. Последовательно обходить все вычисленные цифры, и производить приращение соответствующих элементов массива.
Попробую даже набросать, но так как на Паскале не программирую, могут быть ошибки, знатоки Паскаля или вы сами могут поправить.
Сделал для вашего варианта (цифры хранятся в отдельных числовых переменных), но вместо ваших обозначений (a, a1, a2) использовал другие: для дня - d, d1, d2, для месяца - m, m1, m2 и т.д.
uses crt;
var
num, d1, d2, m1, m2, y1, y2, y3, y4, z1, z11, z12, z2, z21, z22, z3, z31, z32, z4, z41: integer;
ciphers: array[1..9] of integer;
begin
clrscr;
Writeln('введите число вашего рождения.');
readln(num);
d1 := num div 10;
d2 := num - 10 * d1;
writeln('введите месяц вашего рождения.');
readln(num);
m1 := num div 10;
m2 := num - 10 * d1;
writeln('введите год вашего рожения.');
readln(num);
y1 := num div 1000;
num := num - 1000 * y1;
y2 := num div 100;
num := num - 100 * y2;
y3 := num div 10;
y4 := num - 10 * y3;
z1 := d1 + d2 + m1 + m2 + y1 + y2 + y3 + y4;
z11 := z1 div 10;
z12 := z1 - 10 * z11;
z2 := z11 + z12;
z21 := z2 div 10;
z22 := z2 - 10 * z21;
case d1 of
0: z3 := z1 - d2 * 2;
else z3 := z1 - d1 * 2;
z31 := z3 div 10;
z32 := z3 - 10 * z31;
z4 = z31 + z32;
z41 := z4 div 10;
z42 := z4 - 10 * z41;
if d1 > 0 then
ciphers[d1] := ciphers[d1] + 1;
if d2 > 0 then
ciphers[d2] := ciphers[d2] + 1;
// и так далее для m1, m2, y1, ... z31, z32, z41, z42
// вывод результатов:
for num := 1 to 9 do
begin
if ciphers[num] > 0 then
writeln('цифра ', num, ' встречается ', ciphers[num], ' раз');
end;
end.
Если же сделать как я предлагаю (и наподобие того как сделано у меня в коде на C++) - исходные цифры (дня-месяца-года, и цифры четырех вычисляемых чисел) хранить в массиве из 16 целых чисел - допустим называется numbers: array[1..16], то тогда вместо того чтобы по каждому единичному значению сравнивать с нулем (if d1 > 0 then ... if d2 > 0 then...) можно обойтись циклом (только будет нужна вспомогательная переменная, положим называется i):
begin
i := numbers[num];
if i > 0 then
ciphers := ciphers + 1;
end;
А вот как это сделать в Паскале в данном случае - уже затрудняюсь, наверно надо строки использовать...
writeln('day ',i,' month ',j,' year ',k);
где i,j,k для простоты типа integer