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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 52, средняя оценка - 4.63
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 16:37     Магический квадрат #1
Всем привет! Вот во вторник экзамен по программированию, препод дала задачки разобрать пять штук, для подготоки, помогите если не сложно.

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

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

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

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


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

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

Магический квадрат C++
Магический квадрат) C++
C++ Магический квадрат
Магический квадрат C++
C++ Магический квадрат
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GRANDEATH
39 / 39 / 1
Регистрация: 13.09.2009
Сообщений: 108
15.01.2010, 16:52     Магический квадрат #2
Эта про звездочки. Сначала она тестирует функцию. Введешь ей число, обозначающее кол-во звездочек на вывод
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
//Задача по выводу *
 
#include <iostream>
#include <iomanip>
using namespace std;
 
 
void foo(int n_of_asterisk)
{   
    while (n_of_asterisk--)
        cout << '*';
   cout << endl;     
}
 
 
int main()
{
    cout << "Enter number of asterisks>";
    int n;
    cin >> n;
    foo(n);
    
    // Рисование треугольника
    for (int i = 1; i < 20; i+=2)
    {
        cout << setw(40 - i/2);
        foo(i);
    }
    system("pause");
    return 0;
}
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 17:01  [ТС]     Магический квадрат #3
Блин! опять забыл указать(( мне надо на Си

Добавлено через 8 минут
Вот я про строку начал, терь помогите доделать, как проверить целое число или просто буквы или не целое?

C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <conio.h>
#define s 80
int main()
{  char str[s];
char p = str, n, k;
int i;
printf("Please enter the str\n");
scanf("%d", &n);
i=0;
GRANDEATH
39 / 39 / 1
Регистрация: 13.09.2009
Сообщений: 108
15.01.2010, 17:16     Магический квадрат #4
C++
1
2
3
4
5
6
7
8
9
10
11
int i = 0;
    bool is_number = true;
    while (line[i])
    {
        if (line[i] < '0' && line[i] > '9')
                is_number = false;
    }
    if (is_number)
        cout << "is_number" << endl;
    else
        cout << "not_number" << endl;
Добавлено через 3 минуты
C
1
2
3
4
5
6
7
8
char str[s];
int i = 0;
bool is_number = true;
while (!str[i])
{
     if (line[i] < '0' && line[i] > '9')
                is_number = false;
}
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.01.2010, 17:35     Магический квадрат #5
Задание 3: вроде, что типа такого.
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <stdio.h>
//программа на C
 
 
 
void main(){
 
const int Height = 2;
const int Weight = 2;
 
 
int matrix[Height][Weight]= { {0, 0}, {0, 0} };  
 
 
int sumINSTR = 0;            //сумма в строках
int sumINSTB = 0;            //сумма в столбцах
int DYAG1 = 0;               //cумма в одной  диагонали.
int DYAG2 = 0;               //сумма в другой диагонали.
 
//Суммируем с строках
for(int i = 0;i<Height;i++){
    for(int j = 0;j<Weight;j++){
    sumINSTR+=matrix[i][j];
 
 
    }
 
 
}
//Суммируем в столбцах
for(int t = 0;t<Weight;t++){
    for(int j = 0;j<Height;j++){
    sumINSTB+=matrix[t][j];
 
 
    }
}
 
 
//Если матрица не квадратная возможен выход за буфер по строке
//Суммируем в одной диагонали
for(int p = 0, j = 0; p<Weight; p++,j++){
 
    DYAG1+=matrix[p][j];
 
    
 
}
 
 
//Если матрица не квадратная возможен выход за буфер по строке
//Суммируем в другой диагонали
for(int g = 0, k = Weight-1; k>=0; g++,k--){
 
    DYAG2+=matrix[g][k];
 
    
}
 
 
//Выводим суммы----------------
printf("%d",sumINSTR);printf("\n");
printf("%d",sumINSTB);printf("\n");
printf("%d",DYAG1);printf("\n");
printf("%d",DYAG2);printf("\n");
//-----------------------------
 
 
int CONTROL = sumINSTR;
//Проверка на магию-----------------------------------------
if((sumINSTB==CONTROL)&&(DYAG1==CONTROL)&&(DYAG2==CONTROL)){
printf("Magic Matrix\n");
}
//----------------------------------------------------------
//Если что то с логикой сравнения: не продумал, доделай тогда сам.
 
return;
}
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 17:41  [ТС]     Магический квадрат #6
спасибо, а можно пост про звёздочки в Си и расшифруйте
C
1
2
3
4
5
6
bool is_number = true;
while (!str[i])
{
     if (line[i] < '0' && line[i] > '9')
                is_number = false;
}
если не трудно.

Решил Си нормально подучить наконецто)
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.01.2010, 17:55     Магический квадрат #7
Я такими конструкциями не пользуюсь, ты мне подскажи для чего этот цикл тогда я
попытаюсь его расшифровать, просто я в задачу не вникал.

Добавлено через 52 секунды
Сейчас попытаюсь сделать: вот это.

4. Дан одномерный массив, содержащий по крайней мере 2 нуля. Вывести все элементы массива между этими нулями.
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 17:59  [ТС]     Магический квадрат #8
ну я так думаю, если номер меньше ноля и больше девяти, то это неверный номер, при этом должно соблюдатся условие строки, верно?
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.01.2010, 18:22     Магический квадрат #9
Ты письмо GRANDEATH напиши, это его руки дело.

Добавлено через 14 минут
//Первое что пришло в голову,

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
#include <stdio.h>
void main(){
 
const int size = 6;
int mas [size] = { 1,0,2,2,0,1 };
int posStart = 0;
int posEnd = 0;
for(int i=0;i<size;i++){
    
    if(mas[i]==0){
    posStart=i;     //записываем начало интервала первый: 0
                     //запускаем цикл нахождения конца интервала
    for(int j = posStart;j<size;j++)if(mas[j]==0)posEnd = j; 
    
 
    }
    //Выход из цикла если нашли интерал между нулями
    if((posStart!=0)||(posEnd!=0))break;
 
}
 
//Выводим значия от нуля до нуля
for(int y=posStart+1;y<posEnd;y++){
    printf("%d",mas[y]);
    printf("\n");
}
printf("\n");
 
return;
}
Добавлено через 3 минуты
Поправка к коду

Добавлено через 44 секунды
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
#include <stdio.h>
void main(){
 
const int size = 6;
int mas [size] = { 1,0,2,2,0,1 };
int posStart = -1;
int posEnd = -1;
for(int i=0;i<size;i++){
        
        if(mas[i]==0){
        posStart=i;     //записываем начало интервала первый: 0
                     //запускаем цикл нахождения конца интервала
        for(int j = posStart;j<size;j++)if(mas[j]==0)posEnd = j; 
        
 
        }
        //Выход из цикла если нашли интерал между нулями
        if((posStart!=-1)||(posEnd!=-1))break;
 
}
 
//Выводим значия от нуля до нуля
for(int y=posStart+1;y<posEnd;y++){
        printf("%d",mas[y]);
    printf("\n");
}
printf("\n");
 
return;
}
GRANDEATH
39 / 39 / 1
Регистрация: 13.09.2009
Сообщений: 108
15.01.2010, 18:29     Магический квадрат #10
Цитата Сообщение от Bloodykeeper Посмотреть сообщение
ну я так думаю, если номер меньше ноля и больше девяти, то это неверный номер, при этом должно соблюдатся условие строки, верно?
Извини. Ошибся. Вместо и надо поставить или.
C
1
2
3
4
5
6
bool is_number = true;
while (!str[i])
{
     if (line[i] < '0' || line[i] > '9')
                is_number = false;
}
Добавлено через 45 секунд
Еще бы сюда можно break поставить, что бы дальше не перебирать
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 19:00  [ТС]     Магический квадрат #11
Спасибо, а что такое posStart и PosEnd? начало и конец...а вот чего? или это просто формальное имя переменных?
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.01.2010, 19:04     Магический квадрат #12
Эти переменные должны хранить значения интервала. От 0 до 0.
Значения интервала выражаются через позицию элемента массива.

Начало интервала эта какая-то позиция, в массиве.
Конец интервала эта какая-то позиция, в массиве.

Добавлено через 30 секунд
Надеюсь поятно.
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 19:15  [ТС]     Магический квадрат #13
Да спасибо! всё очень понятно. Осталось только звёздочки разобрать) и повторить старые задачки и теорию ^^
GRANDEATH
39 / 39 / 1
Регистрация: 13.09.2009
Сообщений: 108
15.01.2010, 19:21     Магический квадрат #14
Удачи. Если будешь готовиться серьезно, то по с есть книга
Керниган, Ричи. Язык C
. Очень рекомендую.
А по С++ - Дейтел.
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 19:30  [ТС]     Магический квадрат #15
уже пользуюсь) слушай, сможешь перевести сос звёздочками с С++ на С, если не тяжело
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!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 21:45  [ТС]     Магический квадрат #17
нет не то это...не получается..там много добавить надо...ребят ну кто может перевести?? плиз!
breeve
 Аватар для breeve
73 / 73 / 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!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 23:16  [ТС]     Магический квадрат #19
а можно мне теперь расписать тут что к чему..ато не совсем понятно написание самой функции.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2010, 23:20     Магический квадрат
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
breeve
 Аватар для breeve
73 / 73 / 14
Регистрация: 01.08.2009
Сообщений: 177
15.01.2010, 23:20     Магический квадрат #20
А что там не понятного? Это:
C
1
while (n_of_asterisk--) printf("*");
Цикл будет работать, (выводить *) пока n не станет нулю..
Или что-то другое?
Yandex
Объявления
15.01.2010, 23:20     Магический квадрат
Ответ Создать тему
Опции темы

Текущее время: 17:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru