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

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

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

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

15.01.2010, 16:37. Просмотров 7899. Ответов 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, 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;
}
1
Bloodykeeper
This party getting crazy!
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;
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;
}
1
Genius Ignat
1238 / 776 / 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;
}
1
Bloodykeeper
This party getting crazy!
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;
}
если не трудно.

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

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

4. Дан одномерный массив, содержащий по крайней мере 2 нуля. Вывести все элементы массива между этими нулями.
0
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 17:59  [ТС] #8
ну я так думаю, если номер меньше ноля и больше девяти, то это неверный номер, при этом должно соблюдатся условие строки, верно?
0
Genius Ignat
1238 / 776 / 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;
}
1
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 поставить, что бы дальше не перебирать
1
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 19:00  [ТС] #11
Спасибо, а что такое posStart и PosEnd? начало и конец...а вот чего? или это просто формальное имя переменных?
0
Genius Ignat
1238 / 776 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.01.2010, 19:04 #12
Эти переменные должны хранить значения интервала. От 0 до 0.
Значения интервала выражаются через позицию элемента массива.

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

Добавлено через 30 секунд
Надеюсь поятно.
1
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 19:15  [ТС] #13
Да спасибо! всё очень понятно. Осталось только звёздочки разобрать) и повторить старые задачки и теорию ^^
0
GRANDEATH
39 / 39 / 1
Регистрация: 13.09.2009
Сообщений: 108
15.01.2010, 19:21 #14
Удачи. Если будешь готовиться серьезно, то по с есть книга
Керниган, Ричи. Язык C
. Очень рекомендую.
А по С++ - Дейтел.
0
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
15.01.2010, 19:30  [ТС] #15
уже пользуюсь) слушай, сможешь перевести сос звёздочками с С++ на С, если не тяжело
0
15.01.2010, 19:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2010, 19:30
Привет! Вот еще темы с ответами:

Магический квадрат - 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++
Доброе время суток, господа. Молю вас о помощи. Есть сие задание: Составить программу для решения одной из следующих задач....


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

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

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