Семинар 1. Разработка циклических алгоритмов (Семинары)
Описание файла
Файл "Семинар 1. Разработка циклических алгоритмов" внутри архива находится в папке "Семинары". PDF-файл из архива "Семинары", который расположен в категории "". Всё это находится в предмете "программирование и алгоритмизация" из 1 семестр, которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
Семинар 1. Разработка циклических алгоритмовЦель семинара: Овладение навыками разработки, кодирования на Си иотладки циклических алгоритмов.1. Задание1. Проработайте (еще раз) примеры §1.4.4 лекции 1. Попробуйте решить этизадачи самостоятельно, не заглядывая в лекцию. Если Ваше решениеотличается от лекционного, проанализируйте отличия. Как они повлияют наработу программы?2.
Отладьте программы примеров §1.4.4 лекции 1, рекомендации по отладкеданы в разделе 2.3. Выполните свой вариант задания (с Вашим номером по списку группы) израздела 5. Отчет по выполнению задания обязательно должен содержатьусловие задачи, анализ данных (возможно, в виде таблицы «Составданных»), блок-схему, программу.4. Проработайте (еще раз) пример из §1.5.2 лекции 1. Это задача на обработкуодномерных массивов. Попробуйте решить эту задачу самостоятельно, незаглядывая в лекцию. Если Ваше решение отличается от лекционного,проанализируйте отличия.
Как они повлияют на работу программы?5. Разберите два примера на обработку одномерных массивов из раздела 3.Попробуйте решить эти задачи самостоятельно, не заглядывая в лекцию.Если Ваше решение отличается от приведенного, проанализируйте отличия.Как они повлияют на работу программы?6. Выполните свой вариант задания (с Вашим номером по списку группы) израздела 6. Отчет по выполнению задания обязательно должен содержатьусловие задачи, анализ данных (возможно, в виде таблицы «Составданных»), блок-схему, программу.7.
Разберите пример на обработку двумерных массивов – матриц – израздела 4. Попробуйте решить эту задачу самостоятельно, не заглядывая влекцию. Если Ваше решение отличается от приведенного, проанализируйтеотличия. Как они повлияют на работу программы? Выполните свой вариантзадания на матрицы из раздела 7.Жду отчетов по индивидуальным заданиям разделов 5, 6, 7. Напоминаю, чтоотчет по выполнению задания обязательно должен содержать условие задачи,анализ данных (возможно, в виде таблицы «Состав данных»), блок-схему,программу.12. Краткая инструкция по созданию консольной Си++ программыWin32 в среде Microsoft Visual Studio 20081. Создайте проект (последовательно выбрав в менюФайл пункт Создать Проект).2.
В области типов проектов (слева) разверните Visual C++ и выберитегруппу Win32 . В окне справа щелкнитеэлемент Консольное приложение Win32.3. Введите имя проекта и папку для него.По умолчанию имя решения, содержащего проект, совпадает с именемпроекта.Нажмите кнопку ОК, чтобы создать проект.4. В окне мастера приложений Win32 справа нажмите параметрыприложения. В полученном окне выберите Консольное приложение иПустой проект и нажмите кнопку Готово.5. Если окно Обозреватель решений не открыто (обычно справа),откройте его, выберав в меню Вид пункт Обозреватель решений.6.
Добавьте новый исходный файл в проект, выполнив следующиедействия.a. В окне Обозреватель решений щелкните правой кнопкой мышипапку Файлы исходного кода и последовательно выберитепункты Добавить и Новый элемент.b. В узле Код выберите элемент Файл C++ (.cpp), введите имя файлаи нажмите кнопку Добавить.CPP-файл появится в папке "Исходные файлы" в окне Обозревательрешений и откроется в редакторе Visual Studio.7. В файле, открытом в редакторе, введите допустимый программный кодна языке C++.Пример кода (задача 1.3.4):#include <iostream>#include <conio.h>using namespace std;void main(){double A,B,p,At,Bt; int N,i;cout<<"A, B, p, N\n";cin>>A>>B>>p>>N;2At=A; Bt=B; i=1;while (At>=A/2 && i<=N){At=At-Bt;Bt=Bt-Bt*p/100;i=i+1;}if (At<A/2){i=i-1;cout<<"i="<<i;}elsecout<<"Time is over"<<endl;_getch();}8.
Сохраните файл.9. В меню Построение выберите Построить решение.10.В окне Выходные данные выводятся сведения о ходе компиляции, исообщение о состоянии построения.11.В меню Отладка выберите команду Начать отладку (или нажмитезеленый треугольник на панели инструментов). Обратите внимание надругие команды пункта меню Отладка и в дальнейшем принеобходимости используйте их для трассировки программы.12.Отладьте программу и протестируйте ее с разными исходными данными.13.Закройте проект (Файл/ Закрыть проект).14.Открывать существующий проект можно ТОЛЬКО активизацией файлапроекта с расширением .vcproj через Файл/ Открыть проект илищелчком на пиктограмме.33.
Примеры обработки одномерных массивовПример 1. Дан массив а из N элементов (N10). Вычислитьпроизведение элементов массива, меньших заданного значения с.Таблица 1. Состав данных примера 1.ИмяСмыслТипСтруктураИсходные данныезаданное значениевеществ.простая переменнаясчисло элементов массивацелыйпростая переменнаяNзаданный массиввеществ.одномерный массиваиз 10 элементовВыходные данныепроизведение элементоввеществ.простая переменнаярмассива, удовлетворяющихусловиюПромежуточные данныесчетчик элементов массивацелыйпростая переменнаяiколичество элементов,целыйпростая переменнаяkудовлетворяющих условиюОбратите внимание, что структура массива а предполагает отведение пода десяти ячеек памяти.
В программе описывается массив а из десятиэлементов, a используются лишь первые N них. Пользователь даннойпрограммы должен помнить, что вводимое значение числа элементов массивадолжно находиться в интервале 1N10. Проверка корректности введенногозначения N, несомненно, улучшила бы надежность программы; с цельюупрощения программы мы не делаем такой проверки. Для устранениянеобходимости распределения памяти под массив «по максимуму» в любомалгоритмическом языке, требующем компиляции, следует использоватьоператоры динамического распределения памяти, но этот материал выходит заграницы данного пособия.Блок-схема алгоритма приведена на рис.
1.4началоВвод с, N,a[i], i=0,…,N-1p:=1; k:=0i:=0`нетi<Nдадаa[i]<cp:=p*a[i]k:=k+1i:=i+1k=0давывод ‘нет такихвывод рэлементов’конецРис.1. Блок-схема программы примера 15Алгоритм не сильно отличается от рассмотренного в лекционномпримере. Остановимся на различиях. Для накапливания произведениянеобходимо перед циклом переменной р присвоить начальное значение 1(умножение на 1 не изменяет произведение).
Переменная k нужна длявыявления ситуации отсутствия элементов, меньших заданного значения;развилка после цикла позволяет обнаружить эту ситуацию.Далее приведена программа.include <stdio.h>#include <conio.h>#include <math.h>void main(){float a[10],c,p; int N,k,i;printf("Введите N, c\n");scanf_s("%d%f",&N,&c);printf("Введите массив из %d элементов\n",N);/* Далее цикл для поэлементного ввода массива*/for (i=0; i<N; i++)scanf_s("%f", &a[i]);/*Далее алгоритм по блок-схеме*/p=1; k=0;for (i=0; i<N; i++)if (a[i]<c){ p=p*a[i];k=k+1;}if (k==0)printf("Таких элементов нет\n");elseprintf(" p=%f \n",p);_getch();}6Пример 2. Дан массив а из N элементов (N10). Найти минимальноезначение среди элементов массива и номер элемента с таким значением.Таблица 2. Состав данных примера 2.ИмяСмыслТипСтруктураИсходные данныечисло элементов массива целыйпростая переменнаяNзаданный массиввещественны одномерный массив из 10айэлементовВыходные данныеминимальный элементвещественны простая переменнаяminмассивайномер минимальногоцелыйпростая переменнаяkэлементаПромежуточные данныесчетчик элементовцелыйпростая переменнаяiмассиваБлок-схема алгоритма приведена на рис.
2. В начале каждого выполненияцикла min – это минимальное значение среди (i-1) первых элементов массива.Это значение min сравнивается с а[i] и в результате определяется минимум изпервых i элементов массива; при изменении текущего минимального значениязапоминается номер элемента, на котором достигается текущий минимум(оператор k:=i).7началоВвод N,a[i], i=0,…,N-1min:=a[0]; k:=1i:=1нетiN-1даa[i]<minдаmin:=a[i]k:=i+1i:=i+1вывод min, kконецРис.2. Блок-схема программы примера 2Если минимальное (одинаковое) значение имеют несколько элементовмассива, то предложенный алгоритм выдаст наименьший из их индексов; принестрогом неравенстве (a[i]min) будет выдаваться наибольший номер.
Вситуации, когда надо определить номера всех элементов, имеющихминимальное значение, алгоритм должен иметь два цикла обработки: в первомцикле должен определяться минимум, а во втором по сравнению min=a[i]находиться номера элементов.#include <stdio.h>8#include <conio.h>void main(){float a[10],min; int N,k,i;printf("Введите N\n");scanf_s("%d",&N);printf("Введите массив из %d элементов\n",N);/* Далее цикл для поэлементного ввода массива*/for (i=0; i<N; i++)scanf_s("%f", &a[i]);/*Далее алгоритм по блок-схеме*/min=a[0]; k=1;for (i=1; i<N; i++)if (a[i]<min){ min=a[i];k=i+1;}printf(" min=%f k=%d \n",min,k);_getch();}94.
Пример обработки матрицДана матрица а из N строк и M столбцов (N5, M5). Для каждой строкиматрицы найти сумму элементов и определить число строк, для которых этасумма положительна.Таблица 3. Состав данных примера раздела 4.ИмяСмыслТипСтруктураИсходные данныечисло строк матрицыцелыйпростая переменнаяNчисло столбцовцелыйпростая переменнаяМзаданная матрицавещественный двумерный массиваразмером 5*5Выходные данныесчетчик строк матрицыцелыйпростая переменнаяiсумма элементов i-ойвещественный простая переменнаяsстрокичисло строк с положицелыйпростая переменнаяkтельной суммой элементовПромежуточные данныесчетчик столбцовцелыйпростая переменнаяjматрицыОбратим внимание, что считая s простой переменной мы предполагаем,что значения сумм всех строк должны последовательно записываться в однуячейку памяти. В этом случае в одном цикле по строкам мы должнывычислить сумму элементов строки s, вывести s и сравнить ее с нулем длявычисления k.
Можно было объявить s как одномерный массив (число егоэлементов равно числу строк матрицы); тогда алгоритм обработки мог бысостоять из двух последовательных циклов по строкам: в первом из нихвычислялись бы все элементы массива s и накапливалось значение k, а вовтором производился бы вывод значений элементов массива s.Таким образом, этот несложный пример иллюстрирует два очень важныхположения:101) выбор структуры данных (простая переменная или массив) может бытьнеоднозначен;2) выбор структуры данных влияет на алгоритм.Блок-схема алгоритма приведена на рис. 3,а.