Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

29
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;
}
0
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 21:45  [ТС] #17
нет не то это...не получается..там много добавить надо...ребят ну кто может перевести?? плиз!
0
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() не хочет читать. Вот если без стандартных функции, а ручками.
1
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 23:16  [ТС] #19
а можно мне теперь расписать тут что к чему..ато не совсем понятно написание самой функции.
0
breeve
75 / 75 / 14
Регистрация: 01.08.2009
Сообщений: 177
15.01.2010, 23:20 #20
А что там не понятного? Это:
C
1
while (n_of_asterisk--) printf("*");
Цикл будет работать, (выводить *) пока n не станет нулю..
Или что-то другое?
0
Genius Ignat
1238 / 776 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.01.2010, 23:24 #21
Bloodykeeper:
Спать еще не охото.
Такие вопросы задаешь.

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

Добавлено через 1 минуту
Может моё утверждение верно.
Если ты пишешь алгоритмы тебе понятна суть, если смотришь на другие(циклы) надо вникать:
такой закон "fosters".
0
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 23:25  [ТС] #22
да, это. Очень интересное тело цикла while...я раньше такого не встречал...а где об этом можно почитать?
0
insideone
Модератор
Автор FAQ
3643 / 922 / 51
Регистрация: 10.01.2010
Сообщений: 2,487
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
0
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
16.01.2010, 12:52  [ТС] #24
нет я про (n_of_asterisk--) что это?
0
Genius Ignat
1238 / 776 / 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];
 
 
        }
}
1
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
1
insideone
Модератор
Автор FAQ
3643 / 922 / 51
Регистрация: 10.01.2010
Сообщений: 2,487
16.01.2010, 18:04 #27
Цитата Сообщение от Bloodykeeper Посмотреть сообщение
нет я про (n_of_asterisk--) что это?
Это совсем не тело цикла, а условие продолжения работы. int автоматически будет преобразовываться к true\false как я понимаю и в конце концов когда переменная уменьшиться до 0 - 0 преобразуется к false и цикл прекратиться.
К предыдущему сообщению хочу добавить что использование var-- или var++ (тоже самое только увеличение переменной на 1) считается более быстрым по сравнению с var = var - 1 т.к. это ближе к машинному коду
0
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.
2
insideone
Модератор
Автор FAQ
3643 / 922 / 51
Регистрация: 10.01.2010
Сообщений: 2,487
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]));
}
0
PointsEqual
ниначмуроФ
837 / 521 / 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;
}
0
22.01.2010, 01:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2010, 01:27
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

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