Ім'я файлу: АСД3 [.docx
Розширення: docx
Розмір: 210кб.
Дата: 20.05.2023
скачати

Міністерство освіти і науки України

Національний університет «Львівська політехніка»

Кафедра ІТВС



Звіт

До лабораторної роботи №3

З дисципліни «Алгоритми і структури даних»

Виконала ст.гр. ВП-12

Харамбура Наталія

Приймав доц.каф.ІТВС

Кустра Н.О.

Львів,2023

Тема роботи: Збереження даних у динамічній пам’яті.

Мета: Навчитись використовувати динамічну пам’ять для раціо­наль­ного збере­ження та швидкого опрацювання даних програми.

Методичні вказівки:

1. Основні дані кожної задачі мають зберігатись у динамічній пам’яті. При цьому для кожного даного слід виділити необхідну за обсягом ділянку пам’яті.

  1. Для формування у динамічній пам’яті наборів вказаних у завданні символьних рядків, чисел або структур доцільно створити масив вказівників, кожен елемент якого буде зберігати адресу відповідного даного.

  2. Якщо умова задачі вимагає сортування даних чи виконання певних перестановок динамічних елементів, то слід у міру можливості міняти місцями (переставляти) відповідні вказівники, не змінюючи розташування у динамічній пам’яті самих елементів.

  3. У випадках, коли в процесі виконання програми потрібно вилучати окремі елементи, слід спочатку звільнити ділянку динамічної пам’яті, яку займає елемент, що видаляється, а потім онулити або видалити відповідний вказівник.

  4. Перед завершенням роботи програми треба обов’язково звільнити всю зайняту динамічну пам’ять.

  5. Як і в попередній лабораторній роботі, у кожному завданні вказано функцію (або функції), що мають бути розроблені та використані в програмі. Крім цього можна створити й інші функції для кращої структуризації програми.

  6. У програмі треба забезпечити зручну форму ведення вхідних даних та наочне відображення результатів.

Індивідуальний номер 17:

У динамічну пам’ять занести послідовність введених з клавіатури речень (ознака завершення введення – символ Х замість речення). Визначити серед введених ті речення, середня довжина слова в яких перевищує 6 літер, та витерти їх. Надрукувати речення, що залишились, і вказати, скільки речень витерто. У програмі створити й застосувати функцію, яка визначає середню довжину слова в заданому реченні (розділові знаки й інші небуквенні символи слід відкинути).

#include

#include

#include

#include
// функція, що рахує середню довжину слова у реченні

double average_word_length(char* sentence) {

int len = strlen(sentence);

int num_words = 0;

int total_word_len = 0;

int word_len = 0;

for (int i = 0; i < len; i++) {

if (isalpha(sentence[i])) {

word_len++;

} else {

if (word_len > 0) {

num_words++;

total_word_len += word_len;

word_len = 0;

}

}

}

if (word_len > 0) {

num_words++;

total_word_len += word_len;

}

return ((double) total_word_len) / num_words;

}
int main() {

char** sentences = malloc(sizeof(char*));

int num_sentences = 0;

int max_num_sentences = 1;
printf("Введіть послідовність речень (введіть X для завершення):\n");
char* sentence = malloc(sizeof(char));

int sentence_len = 0;

char c;

do {

c = getchar();

if (c == '\n') {

c = ' ';

}

sentence[sentence_len++] = c;

if (sentence_len == 1 && c == ' ') {

sentence_len--;

}

if (sentence_len == 1 && c == 'X') {

break;

}

if (sentence_len == max_num_sentences) {

max_num_sentences *= 2;

sentences = realloc(sentences, max_num_sentences * sizeof(char*));

}

if (c == ' ') {

sentence[sentence_len - 1] = '\0';

sentences[num_sentences++] = sentence;

sentence = malloc(sizeof(char));

sentence_len = 0;

}

} while (c != 'X');
double avg_word_length;

int num_deleted_sentences = 0;

for (int i = 0; i < num_sentences; i++) {

avg_word_length = average_word_length(sentences[i]);

if (avg_word_length > 6) {

// видаляємо слова, які мають більше 6 символів

char* word = strtok(sentences[i], " ");

printf("Речення %d було видалено. Залишились слова: ", i+1);

while (word != NULL) {

if (strlen(word) <= 6) {

printf("%s ", word);

}

word = strtok(NULL, " ");

}

printf("\n");

free(sentences[i]);

sentences[i] = NULL;

num_deleted_sentences++;

} else {

printf("Речення %d: %s\n", i+1, sentences[i]);

}

}
printf("Кількість витертих речень: %d\n", num_deleted_sentences);
free(sentences);

free(sentence);
return 0;

}
Результат:



Захист: в динамічну память занести ті слова які починаються на задану літеру




Висновок: на цій лабораторній роботі я навчилась використовувати динамічну пам’ять для раціо­наль­ного збере­ження та швидкого опрацювання даних програми.
скачати

© Усі права захищені
написати до нас