Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 52, средняя оценка - 4.63
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
#1

Магический квадрат - C++

15.01.2010, 16:37. Просмотров 7174. Ответов 29
Метки нет (Все метки)

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

1. Написать функцию, которая выводит на экран строку, состоящую из звёздочек. Длина строки (количество звёздочек) является параметром функции. Составить программу, использующую эту функцию для рисования равностороннего треугольника.

2. Написать программу, которая проверяет, является ли введённая с клавиатуры строка целым числом.

3. Написать программу, которая проверяет является ли введенная с клавиатуры квадратная матрица "магическим квадратом". "Магический квадрат"- матрица, у которой сумма чисел в каждом горизонтальном, вертикальном ряду и по каждой из диагоналей одна и та же.

4. Дан одномерный массив, содержащий по крайней мере 2 нуля. Вывести все элементы массива между этими нулями.


ну пятая была на структуру, я их люблю, поэтому сам написал)))

Надеюсь на вашу помощь, думаю если я смогу разобрать эти задачи, то экзамен сдам отлично, так как на экзамене задачи проще, по словам преподов.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2010, 16:37     Магический квадрат
Посмотрите здесь:

Магический квадрат - C++
Задана матрица целых чисел. Определить является ли она магическим квадратом, т.е. такой, в которой суммы элементов во всех строках и...

Магический квадрат) - C++
Определить, является ли заданная квадратная матрица порядка n магическим квадратом, т.е. матрицей, у которой суммы элементов строк и...

Магический квадрат - C++
Задача: Написать программу, которая определяет, явдяется ли заданная целочисленная квадратная матрица порядка N 'магическим квадратом',...

Магический квадрат - C++
прошу помочь в такой схеме решения магического квадрата. #include <iostream> using namespace std; #include <Windows.h> #include...

Магический квадрат - C++
с клавы вводиться число N. нужно сделать магический квадрат с размерами

Магический квадрат - C++
Опишу проблему, первая лаба по Си++, в прошлом году был просто Си, в Си немного понимаю, а теперь прога которую над сделать, ну не...

Магический квадрат - C++
можно составить магический квадрат с первых 36 простых чисел? (сумма элементов которой в каждой срок, в каждом столбцы и по каждой...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GRANDEATH
39 / 39 / 1
Регистрация: 13.09.2009
Сообщений: 108
15.01.2010, 20:34     Магический квадрат #16
перевод - а все тоже самое. Только надо будет функции ввода-вывода поменять

Добавлено через 30 минут
Возможно - это. Почему возможно, потому что у меня сишный компилятор виснет. Я не знаю почему и что ему не хватает. Запусти и скажешь результат.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void foo(int n_of_asterisk)
{   
    while (n_of_asterisk--)
        printf("*");
   printf("\n");     
}
 
 
int main()
{
    printf("Enter number of asterisks>");
    int n;
    scanf("%d",&n); 
    foo(n);
    
    //printf ("Width trick: %*d \n", 5, 10);
        
  
    int i;
    for (i = 1; i < 20; i+=2)
    {
        //printf("%c",' ',(40 - i/2));
        printf ("Width trick: %*c", (40 - i/2),' ');
        foo(i);
    } 
    return 0;
}
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 21:45  [ТС]     Магический квадрат #17
нет не то это...не получается..там много добавить надо...ребят ну кто может перевести?? плиз!
breeve
75 / 75 / 14
Регистрация: 01.08.2009
Сообщений: 177
15.01.2010, 22:49     Магический квадрат #18
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
 
void foo(int n_of_asterisk)
{   
    while (n_of_asterisk--)
        printf("*");
   printf("\n");     
}
 
 
int main()
{
    //printf("Enter number of asterisks>");
    //int n;
    //scanf("%d",&n);
    //foo(n);
    int a, i, j;
    // Рисование треугольника
    for (i = 1, a = 20; i < 20; i+=2,a-=2)
    {
        j = a;
        for(; j > 0; j-=2)
         printf(" ");
        foo(i);
    }
    return 0;
}
Добавлено через 2 минуты
У меня что-то директиву где плюсовая функция setw() не хочет читать. Вот если без стандартных функции, а ручками.
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 23:16  [ТС]     Магический квадрат #19
а можно мне теперь расписать тут что к чему..ато не совсем понятно написание самой функции.
breeve
75 / 75 / 14
Регистрация: 01.08.2009
Сообщений: 177
15.01.2010, 23:20     Магический квадрат #20
А что там не понятного? Это:
C
1
while (n_of_asterisk--) printf("*");
Цикл будет работать, (выводить *) пока n не станет нулю..
Или что-то другое?
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.01.2010, 23:24     Магический квадрат #21
Bloodykeeper:
Спать еще не охото.
Такие вопросы задаешь.

Добавлено через 1 минуту
А что в итоге получается?
Хоть что то рисуется.

Добавлено через 1 минуту
Может моё утверждение верно.
Если ты пишешь алгоритмы тебе понятна суть, если смотришь на другие(циклы) надо вникать:
такой закон "fosters".
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 23:25  [ТС]     Магический квадрат #22
да, это. Очень интересное тело цикла while...я раньше такого не встречал...а где об этом можно почитать?
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,468
16.01.2010, 00:42     Магический квадрат #23
C++
1
while (n_of_asterisk--) printf("*");
В смысле непонятное тело цикла? Одно лишь printf("*"); поэтому использование { } не нужно. т.е. код аналогичен
C++
1
2
3
4
while (n_of_asterisk--)
{
   printf("*");
}
Вы это имели ввиду? Или о том что в теле цикла выполнилось printf("*");? Ну... в цикле может выполняться что угодно. Даже в for цикле где заданы i = 0 .. x не обязательно использовать это самое i.

А про почитать - это книги. А побыстрее - например http://progs.biz/cpp/cpp/lessons/005.aspx
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
16.01.2010, 12:52  [ТС]     Магический квадрат #24
нет я про (n_of_asterisk--) что это?
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
16.01.2010, 12:59     Магический квадрат #25
Я вчера ошибку допустил здесь нет прохода по столбцам.

//Суммируем в столбцах
for(int t = 0;t<Weight;t++){
for(int j = 0;j<Height;j++){
sumINSTB+=matrix[t][j];


}
}
переправь на

C++
1
2
3
4
5
6
7
for(int t = 0;t<Weight;t++){
        for(int j = 0;j<Height;j++){
    sumINSTB+=matrix[j][t];
 
 
        }
}
GRANDEATH
39 / 39 / 1
Регистрация: 13.09.2009
Сообщений: 108
16.01.2010, 13:09     Магический квадрат #26
Цитата Сообщение от Bloodykeeper Посмотреть сообщение
нет я про (n_of_asterisk--) что это?
n_of_asterisk-- эквивалентно n_of_asterisk = n_of_asterisk - 1
Уменьшает значение на 1
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,468
16.01.2010, 18:04     Магический квадрат #27
Цитата Сообщение от Bloodykeeper Посмотреть сообщение
нет я про (n_of_asterisk--) что это?
Это совсем не тело цикла, а условие продолжения работы. int автоматически будет преобразовываться к true\false как я понимаю и в конце концов когда переменная уменьшиться до 0 - 0 преобразуется к false и цикл прекратиться.
К предыдущему сообщению хочу добавить что использование var-- или var++ (тоже самое только увеличение переменной на 1) считается более быстрым по сравнению с var = var - 1 т.к. это ближе к машинному коду
GRANDEATH
39 / 39 / 1
Регистрация: 13.09.2009
Сообщений: 108
17.01.2010, 07:33     Магический квадрат #28
Assembler
1
2
3
4
5
6
7
8
    a++;
0041147C  mov         eax,dword ptr [a] 
0041147F  add         eax,1 
00411482  mov         dword ptr [a],eax 
    b = b + 1;
00411485  mov         eax,dword ptr [b] 
00411488  add         eax,1 
0041148B  mov         dword ptr [b],eax
Не имеет значения. Крмпилятор все равно к одному приводит
И добавлю, что команды
add и inc выполняются за одинаковое время в 99% процессоров. Главное преимущество - простота записи и привычка программиста.

Добавлено через 3 минуты
C++
1
int автоматически будет преобразовываться к true\false
А он не преобразовывается. Если значение int = 0, то это false. В остальных случаях true

Добавлено через 10 часов 18 минут
Вот ещё кодик. Взят у Страуструпа. (Давно читал, что -то могу наврать.) Алгоритм копирования одной строки в другую
C++
1
while(*str2++ = *str1++);
И все. Вот пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
char *str1 = new char[6];
    strcpy(str1,"12345");
 
    char *str2 = new char[6];
    strcpy(str2,"qqqqq");
 
    printf(str1);
    printf("\n");
    printf(str2);
    printf("\n");
    char* p2 = str2; //Это для сохранения предыдущего значения указателя
    char* p1 = str1; 
    while(*str2++ = *str1++);
Учти - значения str1 и str2 меняются, поэтому изпользуем переменные p1 и p2.
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,468
19.01.2010, 13:54     Магический квадрат #29
C++
1
2
3
4
5
6
7
8
9
class Str{
    char* data;
    unsigned short int _size;
/* какие то там конструкторы и деструкторы */
    bool operator== (char* otherStr){
        char* dataCopy = data; unsigned char count = 0;
        while (*dataCopy++ == *otherStr++) count++;
    return ( count == _size );
}
Тогда получается по аналогии так можно сравнивать?)
или лучше будет не придумывать и сделать так?
C++
1
2
3
    bool operator== (char* otherStr){
        return !strcmp(data, otherStr);
    }
Добавлено через 1 час 40 минут
А так кажется можно сравнить строки без знаний о их длине. Она вообще не определяется
C++
1
2
3
4
5
6
7
8
9
bool cmp(char* Str1, char* Str2)
{
while (
    ( *Str1++ == *Str2++ )
    &&
    ( ( Str1[-1] != 0) || ( Str2[-1] != 0) )
);
return (((Str1[-1] == 0) || (Str2[-1] == 0)) && (Str1[-1] == Str2[-1]));
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2010, 01:27     Магический квадрат
Еще ссылки по теме:

Задача.Магический квадрат. - C++
Хочу решить задачу. http://atpp.vstu.edu.ru/cgi-bin/arh_problems.pl?id_prb=994. Подскажите по какому принципу действовать? С чего...

Магический квадрат матрицы - C++
Доброго времени суток. Помогите пож-ста. Условие с++: Квадратная матрица M, состоящая из целых чисел, вводится с клавиатуры....

Магический квадрат, предикаты - C++
Доброе время суток, господа. Молю вас о помощи. Есть сие задание: Составить программу для решения одной из следующих задач....

Задача с матрицей (магический квадрат) - C++
Дана матрица А целых чисел. Будет ли эта матрица магическим квадратом, тобто такой, у которой сумы элементов в каждой строке и столбце...

Магический квадрат и другие задачи - C++
здравствуйте. Мне очень не обходима ваща помощь в следуших заданиях. 1. Дана целая квадратная матрица n-го порядка. Определить, является...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
22.01.2010, 01:27     Магический квадрат #30
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <conio.h>
 
int main()
{
    unsigned short size=0;
    std::cout<<"vvedite razmernost kvadrata: ";
    std::cin>>size;
    unsigned int max_size=size+(size-1);
    unsigned int**pMagic_square;
    pMagic_square=new unsigned int*[max_size];
    for (unsigned int i=0; i<max_size; i++)
    pMagic_square[i]=new unsigned int[max_size];
    unsigned int i;
    unsigned int j;
    for (i=0; i<max_size; i++ )
    for (j=0; j<max_size; j++ )
    pMagic_square[i][j]=0;
    unsigned int k=1;
    i=(max_size>>1);
    j=0;
    while (i<max_size){
        unsigned int i1=i;
        unsigned int j1=j;
        unsigned int gr=size>>1; //gr-расстояние от границы увеличенного массива
        while (j1<((j+(max_size>>1))+1)){
            pMagic_square[i1][j1]=k;
            if ((i1>(gr)) && (j1<(gr)))  //left
            pMagic_square[i1][j1+size]=k;
            if ((i1>(size+gr)-1) && (j1>(gr)))
            pMagic_square[i1-size][j1]=k;  //down
            if ((i1<(gr)) && (j1>(gr)))
            pMagic_square[i1+size][j1]=k; //up
            if ((i1>(gr)) && (j1>(size+gr)-1))
            pMagic_square[i1][j1-size]=k; //right
            i1--;
            j1++;
            k++;
        }
        i++;
        j++;
    }
    std::cout<<std::endl<<"Magic kvadrat gotov:  "<<std::endl<<std::endl;
    for (i=(size-1)>>1; i<=max_size-(size>>1)-1; i++ ){
        for (j=(size-1)/2; j<=max_size-(size>>1)-1; j++ ){
            printf("%d\t",pMagic_square[i][j]);
        }
        std::cout<<std::endl;
    }
    getch();
    return 0;
}
Yandex
Объявления
22.01.2010, 01:27     Магический квадрат
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru