Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Пример 2




Условие задачи:

«Улитка». Матрицу M(m, n) заполнить натуральными числами от 1 до m x n по спирали, начинающейся в левом верхнем углу и закрученной по часовой стрелке.

Для решения задачи в среде Microsoft Visual Studio 2013 было создано стандартное консольное приложение (проект типа Win32 Console Application) с установленным свойством «пустой проект» (Empty project). В проект добавлен файл с расширением .cpp, исходный код которого приведен ниже.

Листинг программы с комментариями:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char* argv[])

{

int **pMatr;

int n, m;

printf_s("n="); scanf_s("%d", &n);

printf_s("m="); scanf_s("%d", &m);

pMatr = (int **)malloc(n*sizeof(int *));

for (int i = 0; i<n; i++)

pMatr[i] = (int *)malloc(m*sizeof(int));

int i = 0, j = 0, // Текущие координаты улитки

minx = 0, maxx = m - 1, miny = 0, maxy = n - 1; // Границы поля движения

int step = 1; // Шаг перехода (может быть 1 или -1)

bool flag = true; // Направление движения

// улитки true - горизонтальное false - вертикальное

for (int k = 0; k<n*m; k++)

{

pMatr[i][j] = k + 1;

if (flag)

{

if (step>0) if (j<maxx) j++;

else {

miny++;

flag = false;

i++;

}

else

if (j>minx) j--;

else {

maxy--;

flag = false;

i--;

}

}

else // Движение было вертикальное

if (step>0) if (i<maxy) i++;

else {

maxx--;

flag = true;

step = -1;

j--;

}

else

if (i>miny) i--;

else {

minx++;

flag = true;

step = 1;

j++;

}

}

for (int i = 0; i<n; i++)

{

for (int j = 0; j<m; j++)

printf_s("%4d", pMatr[i][j]);

printf_s ("\n");

}

// Освобождаем память

for (int i = 0; i<n; i++) free(pMatr[i]);

free(pMatr);

system("pause");// Останавливаем программу, ждем нажатия любой клавиши

return 0;

}

 

Форма отчета по лабораторной работе

Отчет должен содержать: титульный лист; цель работы; условие задачи; текст программы с комментариями; результаты работы программ с массивами небольшой размерности и контрольные расчеты этих примеров для проверки правильности работы алгоритмов; выводы по работе.

 

Вопросы для самоконтроля

1. Связь указателей и массивов в языке Си.

2. Указатель на указатель.

3. Операции с указателями в Си.

4. Создание массивов динамически.


 

Лабораторная работа № 4. Изучение структурных типов языка Си

Цель и задачи работы, требования к результатам ее выполнения

Цель работы состоит в овладении навыками разработки программ на языке Си, использующих структурные типы данных. Для достижения цели необходимо выполнить следующие задачи:

- изучить учебный материал, посвященный структурам в языке Си [1, 3];

- разработать программу на языке Си для решения заданных вариантов заданий;

- отладить программу;

- выполнить решение контрольного примера небольшой размерности с помощью программы и ручной расчет контрольного примера;

- подготовить отчет по лабораторной работе.





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 462 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Своим успехом я обязана тому, что никогда не оправдывалась и не принимала оправданий от других. © Флоренс Найтингейл
==> читать все изречения...

2351 - | 2156 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.