Замена текущего элемента массива переменной в целях экономии памяти

Тип работы:
Практическая работа
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Оглавление

Введение

Задание РГР-1

Раздел 1

Раздел 2

Раздел 3

Список литературы

Бланк задания РГР-1

Раздел 1. Ответить на теоретический вопрос

Виды информационно-вычислительных сетей

Раздел 2. Составить программу на языке программирования С

Дан одномерный массив D размером 13. Сформировать массив S, путем замены нулевых элементов на среднеарифметическое массива D, а отрицательных элементов на максимальный по модулю элемент массива D.

Раздел 3. Составить программу на языке программирования C

Задана строка символов, состоящая из слов. Разделителями между словами являются пробелы. Найти в строке слова равные первому и заменить их последним словом предложения.

Введение

В задании 2 при необходимости сэкономить затрачиваемую память возможно замена текущего элемента массива переменной, чтобы операция разыменования использовалась один раз, если бы таких обращений было 100, можно было бы значительно снизить «расходы» памяти.

Для уменьшения затрат ЦП было использовано динамическое распределение памяти, а также возможно использование функции для уменьшения объёма программного кода.

Также в теле программы можно встретить операторы цикла (while (){. }, for (){…}, do{…}while;), операторы ветвления if ()/if ()-else, безусловные операторы break и goto; стандартные функции библиотек C < stdio. h>, < stdlib. h>, < time. h>, < string. h> и < ctype. h>.

А именно: функция rand (); - для генерации псевдослучайных чисел, srand () — для генерации начального числа функции rand (); поиск подстроки в строке — strstr (); копирование символьной строки — strcpy (); и др.

Раздел 1. Виды информационно-вычислительных сетей

Объединение рассмотренных выше компонент в сеть может производиться различными способами и средствами. По составу своих компонент, способам их соединения, сфере использования и другим признакам сети можно разбить на классы таким образом, чтобы принадлежность описываемой сети к тому или иному классу достаточно полно могла характеризовать свойства и качественные параметры сети. Однако такого рода классификация сетей является довольно условной. Наибольшее распространение на сегодня получило, разделение компьютерных сетей по признаку территориального размещения.

Поэтому признаку сети делятся на три основных класса: LAN — локальные сети (Local Area Networks); MAN — городские сети (Metropolitan Area Networks). WAN — глобальные сети (Wide Area Networks);

Локальная сеть (ЛС) — это коммуникационная система, поддерживающая в пределах здания или некоторой другой ограниченной территории один или несколько высокоскоростных каналов передачи цифровой информации, предоставляемых подключенным устройствам для кратковременного монопольного использования. Территории, охватываемые ЛС, могут существенно различаться.

Длина линий связи для некоторых сетей может быть не более 1000 м, другие же ЛС в состоянии обслужить целый город. Обслуживаемыми территориями могут быть как заводы, суда, самолеты, так и учреждения, университеты, колледжи. В качестве передающей среды, как правило, используются коаксиальные кабели, хотя все большее распространение получают сети на витой паре и оптоволокне, а в последнее время также стремительно развивается технология беспроводных локальных сетей, в которых используется один из трех видов излучений: широкополосные радиосигналы, маломощное излучение сверхвысоких частот (СВЧ излучение) и инфракрасные лучи.

Небольшие расстояния между узлами сети, используемая передающая среда и связанная с этим малая вероятность появления ошибок в передаваемых данных позволяют поддерживать высокие скорости обмена — от 1 Мбит/с до 100 Мбит/с (в настоящее время уже есть промышленные образцы ЛС со скоростями порядка 1 Гбит/с).

Городские сети, как правило, охватывают группу зданий и реализуются на оптоволоконных или широкополосных кабелях. По своим характеристикам они являются промежуточными между локальными и глобальными сетями. В последнее время в связи с прокладкой высокоскоростных и надежных оптоволоконных кабелей на городских и междугородних участках, а новые перспективные сетевые протоколы, например, ATM (Asynchronous Transfer Mode — режим асинхронной передачи), которые в перспективе могут использоваться как в локальных, так и в глобальных сетях.

Глобальные сети, в отличие от локальных, как правило, охватывают значительно большие территории и даже большинство регионов земного шара (примером может служить сеть Internet). В настоящее время в качестве передающей среды в глобальных сетях используются аналоговые или цифровые проводные каналы, а также спутниковые каналы связи (обычно для связи между континентами). Ограничения по скорости передачи (до 28,8 Кбит/с на аналоговых каналах и до 64 Кбит/с — на пользовательских участках цифровых каналов) и относительно низкая надежность аналоговых каналов, требующая использования на нижних уровнях протоколов средств обнаружения и исправления ошибок существенно снижают скорость обмена данными в глобальных сетях по сравнению с локальными.

Существуют и другие классификационные признаки компьютерных сетей.

По сфере функционирования сети делятся на: — банковские сети, — сети научных учреждений, — университетские сети;

По форме функционирования можно выделить: — коммерческие сети;- бесплатные сети, — корпоративные сети- сети общего пользования;

По характеру реализуемых функций сети разделяются на: — вычислительные, предназначенные для решения задач управления на основе вычислительной обработки исходной информации;- информационные, предназначенные для получения справочных данных по запросу пользователей; смешанные, в которых реализуются вычислительные и информационные функции.

По способу управления вычислительные сети делятся на: — сети с децентрализованным управлением;- централизованным управлением;- смешанным управлением.

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

В условиях смешанных сетей под централизованным управлением ведется решение задач, обладающих высшим приоритетом и, как правило, связанных с обработкой больших объемов информации.

По совместимости программного обеспечения бывают сети: — однородные;- гомогенные (состоящие из программно-совместимых компьютеров) — неоднородные или гетерогенные (если компьютеры, входящие в сеть, программно несовместимы).

Раздел 2. Составить программу на языке программирования С

Дан одномерный массив D размером 13. Сформировать массив S, путем замены нулевых элементов на среднеарифметическое массива D, а отрицательных элементов на максимальный по модулю элемент массива D.

информационный сеть массив элемент

Блок-схема 1. 1

/

/

Переменные:

int i — для работы с индексами массивов;

double max — максимальный по модулю элемент массива;

double sum — в ходе программы роль этой переменной меняется, с суммы всех элементов массива, на его среднеарифметическое;

double d[], s[] - массивы, исходный и полученный соответственно.

Листинг 1. 1

#include < stdio. h>

#include < stdlib. h>

#include < math. h>

int main (){

int i;

double d[13], s[13], max=0, sum=0;

//srand (time (NULL));

for (i=0; i< 13; i++)

{

//d[i]=rand ()%(100-(-100+1))+(-100);

scanf («%lf», & d[i]);

sum+=d[i];

if (i==1)

max=d[0];

if (fabs (d[i])> max)

max=fabs (d[i]);

printf («%02. 2g «, d[i]);

}

sum/=13. ;

printf («n»);

for (i=0; i< 13; i++)

{

s[i]=d[i];

if (d[i]==0)

s[i]=sum;

if (d[i]< 0)

s[i]=max;

printf («%02. 2g «, s[i]);

}

printf («n»);

return 0;

}

Описание 1. 1

После инициализации элементов массива, программа присваивает максимуму элемент массива с индексом 0, далее программа в ходе цикла выявляет максимальный по модулю элемент массива, параллельно этому считается сумма всех элементов массива. После завершения цикла программа считает среднеарифметическое массива, так как все данные для этого у нас есть это не составляет проблем. Далее мы запускаем ещё один цикл в ходе которого мы присваиваем все элементы массива d массиву s, за исключением тех которые меньше либо равны нуля. Для них у нас отдельное условие которое присваивает элементам равным нулю наше среднеарифметическое массива d, а отрицательным элементам мы присваиваем максимальное по модулю значение массива d. В конце мы выводим полученный массив.

Таблица 1

Тестовые примеры, раздел 2

Ввод:

Вывод:

-81 -89 -10 11 -19 -81 64 70 -36 -39 14 34 81

89 89 89 11 89 89 64 70 89 89 14 34 81

-5 -27 32 84 -35 -49 90 -88 92 -9 -95 90 -44

95 95 32 84 95 95 90 95 92 95 95 90 95

01 02 03 04 00 00 00 00 09 10 -11 -12 13

01 02 03 04 1.5 1.5 1.5 1.5 09 10 13 13 13

15 -15 00 13 12 -3 07 08 09 -10 00 00 13

15 15 3.8 13 12 15 07 08 09 15 3.8 3.8 13

Раздел 3. Составить программу на языке программирования C

Задана строка символов, состоящая из слов. Разделителями между словами являются пробелы. Найти в строке слова равные первому и заменить их последним словом предложения.

Блок-схема 1. 2

/

/

Переменные:

char* s — главная строка;

char* s1 — первое слово;

char* s2 — последнее слово;

char* s0 — главная строка без первого слова;

char* pr — указатель на первое вхождение строки s1 в строку s0;

char* buf — итерационное хранилище для строки;

n — размерность;

int len, len1, len2 — длины строк;

int i, j, k — переменные для работы с индексами строки;

Листинг 1. 2

#include < stdio. h>

#include < string. h>

#include < memory. h>

#include < stdlib. h>

//char* str_replace (char* search, char* replace, char* resource);

#define n 1000

int main (){

char *s, *s1, *s2;

s=(char*) malloc (n);

s1=(char*) malloc (n);

s2=(char*) malloc (n);

int count=0, len, len1, len2, i, j, k;

gets (s);

len=strlen (s);

for (i=0; *(s+i) ≠ ' '; i++)

{

if (*(s+i) == ',')

break;

*(s1+i) = *(s+i);

}

for (i = len; i> 0;)

{

if (*(s+i) ≠ ' ' || *(s+i) ≠ ',')

--i;

if (*(s+i) == ' ')

{

for (k=i+1, j=0; *(s+k) ≠ ''; k++, j++)

break;

}

}

len1=strlen (s1);

len2=strlen (s2);

char* s0=strstr (s, s1);

s0+=len1+1;

printf («%sn», s0);

char* pr = strstr (s0, s1);

while (pr ≠ NULL)

{

size_t i;

size_t pr_len = strlen (pr);

size_t s0_len = strlen (s0);

char* buf = (char*)calloc ((s0_len — len1 + len2), sizeof (char));

strncpy (buf, s0, s0_len — pr_len);

strcat (buf, s2);

strcat (buf, pr + len1);

s0 = buf;

pr = strstr (s0, s1);

}

sprintf (s ,"%s %s", s1, s0);

printf («%s», s);

free (s);

free (s1);

free (s2);

free (buf);

free (pr);

return 0;

}

/*char* str_replace (char* original, char* replacement, char* mainLine)*/

/*{*/

/* size_t original_len = strlen (original); */

/* size_t replacement_len = strlen (replacement); */

/* char* pointer = strstr (mainLine, original); */

/* while (pointer ≠ NULL)*/

/* {*/

/* size_t i; */

/* size_t pointer_len = strlen (pointer); */

/* size_t mainLine_len = strlen (mainLine); */

/* char* buf = (char*)calloc ((mainLine_len — original_len + replacement_len), sizeof (char)); */

/* strncpy (buf, mainLine, mainLine_len — pointer_len); */

/* strcat (buf, replacement); */

/* strcat (buf, pointer + original_len); */

/* printf («%s», buf); */

/* free (mainLine); */

/* mainLine = buf; */

/* pointer = strstr (mainLine, original); */

/* }*/

/* return mainLine; */

/*}*/

Описание 1. 2

Первый цикл do-while предназначен для поиска «эталонного» значения, т. е. для поиска первого слова, в котором есть три различные буквы, причём буквы, а и, А — считаются эквивалентными.

Во втором цикле — снова считываются слова, которые сравниваются с «эталоном».

if (i> i_max & & task (word, i)), где i длинна считанного слова, а i_max — длинна «эталонного».

Если новое слово длине последнего и в новом есть хотя бы три различных символа — максимальному слову переприсваивают значение word.

В функции int task (char* word, char n) — проверяется условие о трёх различных символах слова. Но поскольку символы a и A считаются эквивалентными, то каждый символ переводится в нижний регистр при помощи стандартной функции char tolower (int c) из библиотеки < ctype. h> и далее сравнивается с ch1 либо ch1 и ch2, которые так же находятся в нижнем регистре.

Таблица 2

Тестовые примеры, раздел 3

Ввод:

Вывод:

aAbB bus fuf

Самое длинное слово — 'bus'

bbc cfC amamA Fuf

В данной строке нет слов с тремя и более различными буквами!

MacOS Windows Unix/Linux

Самое длинное слово — ' Unix/Linux '

Don’t trouble troubles until trouble trouble’s you

Самое длинное слово — 'trouble's'

double float int short char

Самое длинное слово — 'double '

Список литературы

П. Дейтел, Х. Дейтел / Как программировать на С. — 1152 стр.

Д.В. Балащенко, Д. В. Захаров / Программирование на языке C/C++. Часть I/ - Гомель: БелГУТ, 2006. — 84с. — 500экз.

ПоказатьСвернуть
Заполнить форму текущей работой