Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Квадрат Пифагора

54K
17 января 2010 года
Zarina
7 / / 17.01.2010
Помогите пожалйста написать программу на паскале по расчёту квадрата пифагора. Очень нужно!
12K
17 января 2010 года
Ghox
297 / / 26.07.2009
А под "квадратом Пифагора" что имеется в виду? Пифагоровы тройки натуральных чисел (навроде 3 ^ 2 + 4 ^ 2 = 5 ^ 2), или нумерологический квадрат Пифагора ("Расчет психоматрицы по дате рождения")?

Если второе - то интересно, в каких институтах такое задают в качестве задания на программирование. :)
54K
19 января 2010 года
Zarina
7 / / 17.01.2010
Расчёт психоматрицы по дате рождения. Это в школе. Кое что я нацарапала, но чего-то не то!
12K
20 января 2010 года
Ghox
297 / / 26.07.2009
Цитата: Zarina
Расчёт психоматрицы по дате рождения. Это в школе. Кое что я нацарапала, но чего-то не то!


Я вот тоже кое-что нацарапал. Вроде то. Но не на Паскале. :) Ибо Паскаль я не знаю.

Код:
#include <iostream>
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;
}
54K
20 января 2010 года
Zarina
7 / / 17.01.2010
:)А это на чём?!

Я к сожалению больше ничего, кроме ПАСКАЛЯ не знаю!
54K
20 января 2010 года
Zarina
7 / / 17.01.2010
Может ещё кто ПАСКАЛЬ знает???
12K
20 января 2010 года
Ghox
297 / / 26.07.2009
Цитата: Zarina
:)А это на чём?!


Это на великом и могучем C++.

Цитата: Zarina
Я к сожалению больше ничего, кроме ПАСКАЛЯ не знаю!


Ну, для разнообразия можете по C++ попробовать что-нибудь почитать и начать что-то программировать. ;)

Цитата: Zarina
Может ещё кто ПАСКАЛЬ знает???


Паскаль тут много кто знает. Но вряд ли будут вам помогать, если вы не продемонстрируете, что с вашей стороны были хоть какие-то усилия написать программу. Халявщиков тут не любят.

Так что для начала можете написать здесь код (только пожалуйста с использованием тегов [NOPARSE]

 
Код:
 
[/NOPARSE]), который вы нацарапали - знающие помогут исправить. Или можете попытаться разобрать мой пример на C++ и попытаться переписать на Паскале, если что-то не получается - написать что у вас получилось и какие есть проблемы.

Если вы не сделаете ничего из того что я написал - то ваши шансы получить помощь в написании программы ничтожно малы...
54K
22 января 2010 года
Zarina
7 / / 17.01.2010
Я попробую. Спасибо.
54K
25 января 2010 года
Zarina
7 / / 17.01.2010
Код:
program Pifagor;
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.



Она работает, но не так как мне бы хотелось. Хочется чтобы программа показывала сколько каких цифр есть конкретно! Ещё хочется не отдельно вводить число, месяц и год, а как то одним вводом. Тоже не соображу что-то!
54K
25 января 2010 года
Zarina
7 / / 17.01.2010
Цитата: Ghox
Это на великом и могучем C++.

Ну, для разнообразия можете по C++ попробовать что-нибудь почитать и начать что-то программировать. ;)

Паскаль тут много кто знает. Но вряд ли будут вам помогать, если вы не продемонстрируете, что с вашей стороны были хоть какие-то усилия написать программу. Халявщиков тут не любят.

Так что для начала можете написать здесь код (только пожалуйста с использованием тегов [NOPARSE]
 
Код:
 
[/NOPARSE]), который вы нацарапали - знающие помогут исправить. Или можете попытаться разобрать мой пример на C++ и попытаться переписать на Паскале, если что-то не получается - написать что у вас получилось и какие есть проблемы.

Если вы не сделаете ничего из того что я написал - то ваши шансы получить помощь в написании программы ничтожно малы...



Я сбросила, то, что смогла. Я только начала изучать программирование. Я в 6 классе учусь, да ещё сейчас до кучи ногу сломала. По математике я должна выступить на конференции, там как раз я эту самую психоматрицу затрагиваю. Ну вот я и решила, что было бы не плохо, продемонстрировать программу расчёта, а не в ручную писать, а тут на коньках рухнуда и как говорится очнулась, закрытый перелом, гипс!

12K
25 января 2010 года
Ghox
297 / / 26.07.2009
Цитата: Zarina
Я сбросила, то, что смогла. Я только начала изучать программирование. Я в 6 классе учусь, да ещё сейчас до кучи ногу сломала.


Ну что же, неплохо, неплохо. В том смысле - что сами что-то пытаетесь программировать, и для начинающего (того кто начал изучать программирование, да еще и ученик 6 класса) результат не сказать что плохой, по-моему... В том что ногу сломали - сочувствую, желаю выздоровления.

Цитата: Zarina
По математике я должна выступить на конференции, там как раз я эту самую психоматрицу затрагиваю. Ну вот я и решила, что было бы не плохо, продемонстрировать программу расчёта, а не в ручную писать, а тут на коньках рухнуда и как говорится очнулась, закрытый перелом, гипс!


Выступление на конференции по математике - это хорошо, вот только... тему вы по моему выбрали не очень удачную - т.к. вся эту нумерология - сплошное шарлатанство, по-моему. Впрочем, для тренировки программированию можно и в составлении таких программ поупражняться. Так что дело ваше.

Цитата: Zarina
Она работает, но не так как мне бы хотелось. Хочется чтобы программа показывала сколько каких цифр есть конкретно!


Ну, немного я Паскаль знаю, попробую помочь.

Сначала замечания:
1. Ввод года у вас реализован так, как будто он состоит всего из двух цифр, в то время как в годе - четыре цифры.
2. Вместо отдельных переменных, представляющих введенные день, год и месяц я бы посоветовал вам использовать массив, собственно в своем варианте на C++ я так и сделал.
3. У вас нет проверки на некорректные значения вводимых дня, месяца и года.

Теперь по поводу того что вам требуется - посчитать сколько каких символов встречается. Можно завести массив целых чисел размерностью 9 - на каждую цифру - соответствующий элемент, который хранит сколько раз такая цифра встретилась. Последовательно обходить все вычисленные цифры, и производить приращение соответствующих элементов массива.

Попробую даже набросать, но так как на Паскале не программирую, могут быть ошибки, знатоки Паскаля или вы сами могут поправить.

Сделал для вашего варианта (цифры хранятся в отдельных числовых переменных), но вместо ваших обозначений (a, a1, a2) использовал другие: для дня - d, d1, d2, для месяца - m, m1, m2 и т.д.

Код:
program Pifogor;
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):
 
Код:
for num := 1 to 16
     begin
          i := numbers[num];
          if i > 0 then
               ciphers := ciphers + 1;
     end;

Цитата: Zarina
Ещё хочется не отдельно вводить число, месяц и год, а как то одним вводом. Тоже не соображу что-то!


А вот как это сделать в Паскале в данном случае - уже затрудняюсь, наверно надо строки использовать...

8.4K
25 января 2010 года
z0rch
275 / / 02.09.2008
Цитата: Zarina
Ещё хочется не отдельно вводить число, месяц и год, а как то одним вводом. Тоже не соображу что-то!


 
Код:
readln(i,j,k);
writeln('day ',i,' month ',j,' year ',k);

где i,j,k для простоты типа integer
95K
15 марта 2015 года
alexmailercom
1 / / 15.03.2015
Ну если нужно курсач по быстрому то можешь сделать в веб или взять готовый типа этого (веб квадрат пифагора) и воткнут его в программу через компонент webbroeser вроде, идея не самая лучшая конечно но хоть спасла меня 1 раз)))

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог