- •Лабораторна робота №10
- •Порядок виконання роботи
- •1. Варіанти завдання
- •2. Теоретичні відомості
- •Int len (char e[ ])
- •Int len (char *s)
- •Void invert(char e[ ])
- •Void main( )
- •Int index(char [ ], char [ ]);
- •Int row(char c1[ ], char c2[ ])
- •Void cone(char *c1, char *c2)
- •Void substr(char *c1, char *c2, int n, int k)
- •3. Приклад розв’язання задачі на еом (варіант 3, завдання №7)
- •Void ChangeStr(char **s1,int m)
- •3.3 Результати роботи програми
- •Контрольні запитання
- •Лабораторна робота №11
- •Тема: Особливості роботи з одномірними динамічними масивами
- •Мета роботи: Отримання практичних навиків у роботі з одномірними динамічними масивами в мові c
- •Порядок виконання роботи
- •1. Варіанти завдання
- •2. Теоретичні відомості
- •Void main()
- •3. Приклад розв’язання задачі на еом (варіант №30)
- •3.2. Визначення змінних програми
- •3.3. Розробка тексту програми Крім файлів:
- •Int main(void) {
- •3.4. Налагодження програми
- •3.5. Результати роботи програми
- •Контрольні запитання
- •2. Теоретичні відомості
- •Int**array;
- •Void quart(int n, float * х)
- •Void main()
- •Void quart (int n, float X [ ])
- •3. Приклад розв’язання задачі на еом (варіант №30)
- •3.1. Розробка алгоритму вирішення
- •3.2. Представлення матриці в пам'яті
- •3.3. Визначення змінних програми (варіант 1)
- •Int size;
- •3.4. Розробка тексту програми (варіант 1)
- •Void fill(int *, int);
- •Void fill(int *a, int s) {
- •3.5. Відмінності для варіанту реалізації 3
- •Void fill(int far **, int);
- •Void fill(int far **a, int s) {
- •3.6. Налагодження програми
- •3.7. Результати роботи програми
- •Контрольні запитання
- •Лабораторна робота №13
- •Порядок виконання роботи
- •1. Варіанти завдання Завдання 1
- •2. Теоретичні відомості
- •Void main( )
- •Void main( )
- •Void main( )
- •3.Стандартні функції для роботи зі стрічками (бібліотека string.H)
- •4. Приклади використання стандартних функцій для роботи зі стрічками
- •Функція аналогічна до stpcpy, strcpy, strncat
- •Функція аналогічна до strcspn, strrchr, strspn, strstr
- •Int far _fstrcmp(const char far *s1, const char far *s2);
- •Функція аналогічна до stpcpy, strncpy
- •- Size _t maxlen - максимальне число символів, які копіюємо з вихідної стрічки в результуючу.
- •Приклад: /*strncpy/cpp*/
- •5. Приклад розв’язання задачі на еом (варіант 2)
- •5.1. Розробка алгоритму вирішення
- •5.2 Розробка тексту програми
- •Int main()
- •4.3 Результати роботи програми
- •Контрольні запитання
- •Лабораторна робота №14
- •Порядок виконання роботи
- •1. Варіанти завдання
- •2. Теоретичні відомості
- •Void main( )
- •Приклади розробки функцій для обробки текстової інформації
- •Int len (char e[ ])
- •Int len (char *s)
- •Void invert(char e[ ])
- •Void main( )
- •Int index(char [ ], char [ ]);
- •Int row(char c1[ ], char c2[ ])
- •Void cone(char *c1, char *c2)
- •Void substr(char *c1, char *c2, int n, int k)
- •3. Приклад розв’язання задачі на еом (завдання 2, варіант 7)
- •Void ChangeStr(char **s1,int m)
- •4.3 Результати роботи програми
- •Контрольні запитання
- •Лабораторна робота №15
- •Порядок виконання роботи
- •Варіанти завдання
- •Теоретичні відомості
- •Int pole2 ;
- •Приклад розв’язання задачі на еом (варіант №30)
- •Розробка алгоритму розв’язання задачі
- •Визначення змінних програми
- •Розробка тексту програми Текст програми починаємо з підключення файлу stdio.H.
- •Int main(void) {
- •If (!strcmp(mm[n].Name,"***")) break;
- •Контрольні запитання
- •Лабораторна робота №16
- •Порядок виконання роботи
- •1. Варіанти завдання
- •Теоретичні відомості Читання і запис текстових файлів
- •Int main ()
- •Приклад розв’язання задачі на еом (варіант 6)
- •Контрольні запитання
- •Лабораторна робота №17
- •Порядок виконання роботи
- •Варіанти завдання
- •Теоретичні відомості Читання і запис двійкових файлів
- •Відкриття двійкових фалів
- •Файли з послідовним доступом
- •Запис даних у файл c послідовним доступом
- •Int main()
- •If ( ! outf)
- •Int array[100];
- •Int main()
- •If ( ! inpf)
- •Int array[100];
- •Файли з довільним доступом
- •Int main()
- •If ( ! inpf)
- •Int main()
- •If ( ! outf)
- •Передача файлів між комп’ютерами.
- •Програмне підтвердження зв’язку
- •Перекачування файлу
- •Void send_file(fname)
- •Void wait(port)
- •Int port;
- •Прийом файлу
- •Void rec_file()
- •If(ferror(fp)) {
- •Void get_file_name(f)
- •Приклад розв’язання задачі на еом (варіант 10)
- •Контрольні питання
- •Література
1. Варіанти завдання Завдання 1
Варіант 1. Розробити схему алгоритму, програму інвертування заданого рядка і тести, що підтверджують правильність роботи програми.
Варіант 2. Розробити схему алгоритму, програму визначення кількості слів у тексті, що вводиться з клавіатури і тести, що підтверджують правильність роботи програми.
Варіант 3. Розробити схему алгоритму, програму копіювання з заданого тексту даної частини в рядок і тести, що підтверджують правильність роботи програми.
Варіант 4. Розробити схему алгоритму, програму злиття заданих рядків з тексту, що вводиться з клавіатури, і тести, що підтверджують правильність роботи програми.
Варіант 5. Розробити схему алгоритму, програму визначення рядка максимальної довжини в тексті, що вводиться з клавіатури, і тести, що підтверджують правильність роботи програми.
Варіант 6. Розробити схему алгоритму, програму пошуку в рядку STR кількість входжень підстроки STR1 і тести, що підтверджують правильність роботи програми.
Варіант 7. Розробити схему алгоритму, програму поділу рядка на підстроки довжиною в 5 символів кожна, не враховуючи пробіл, і тести, що підтверджують правильність роботи програми.
Варіант 8. Розробити схему алгоритму, програму знаходження кількості однакових символів у слові, що вводиться з клавіатури, і тести, що підтверджують правильність роботи програми.
Варіант 9. Розробити схему алгоритму, програму перевірки, чи є заданий рядок паліндромом (таким, що читається в обох напрямках однаково), і тести, що підтверджують правильність роботи програми.
Варіант 10. Розробити схему алгоритму, програму визначення кількості цифр в рядку, введеному з клавіатури, і тести, що підтверджують правильність роботи програми.
2. Теоретичні відомості
Для представлення текстової інформації в мові Сі використовуються символи (константи), символьні змінні і строки (строкові константи), для яких у мові Сі не введено окремого типу на відміну від деяких інших мов програмування.
Для символьних даних введений базовий тип char. Опис символьних змінних має вид:
char список_імен_змінних;
Наприклад:
char a,z;
Введення-виведення символьних даних. Для введення і виведення символьних значень у форматних стрічках бібліотечних функцій printf() і scanf() використовується специфікація перетворення %с.
Розглянемо наступну задачу.
Ввести речення, слова в якому розділені пробілами і наприкінці якого стоїть крапка. Видалити пробіли, які повторюються між окремими словами (залишити по одному пробілі), вивести відредаговане речення на екран.
Текст програми:
/* Видалення повторюваних пробілів */
#include "stdafx.h"
Void main( )
{
char z,s; /* z - поточний символ, що вводиться */
printf("\n Напишіть речення з крапкою наприкінці:\n");
for (z=s=' ';z!='.';s=z)
{/* s - попередній символ */
scanf("%c",&z);
if (z==' '&& s==' ') continue;
printf ("%c",z) ;
} /* Кінець циклу обробки */
} /* Кінець програми */
У програмі дві символьні перемінні: z - для читання попереднього символу і s- для збереження попереднього. В заголовку циклу перемінні z і s одержують значення "пробіл". Черговий символ вводиться як значення перемінної z, і пара z, s аналізується. Якщо хоча б один із символів значень пари відмінний від пробілу, то значення z друкується. В заголовку циклу z порівнюється із символом "крапка" і при розбіжності запам’ятовується як значення s. Далі цикл повторюється до появи на вході крапки, причому поява двох пробілів (z і s) приводить до пропуску оператора друку.
Приклад роботи програми:
Напишіть речення з крапкою наприкінці:
yyyyy yyyyy hhhhh ttttt.
yyyyy yyyyy hhhhh ttttt.
Крім scanf() і printf() для введення і виведення символів в бібліотеці передбачені спеціальні функції обміну:
getchar() - функція без параметрів. Дозволяє читати з вхідного потоку (звичайно з клавіатури) по одному символу за звертання. Як і при використанні функції scanf(), читання даних, що вводяться, починається після натискання клавіші <Enter>. Це дає можливість виправляти інформацію, що вводиться (стираючи останні введені символи за допомогою клавіші <Backspace>) до початку її читання програмою;
putchar(X) - виводить символьне значення X в стандартний потік (звичайно на екран дисплея).
Внутрішні коди й упорядкованість символів. У мові прийнята угода, що скрізь, де синтаксис дозволяє використовувати цілі числа, можна використовувати і символи, тобто дані типу char, що при цьому представляються числовими значеннями своїх внутрішніх кодів. Така угода дозволяє порівняно просто упорядковувати символи, працюючи з ними як з цілочисельними величинами. Наприклад, внутрішні коди десяткових цифр в таблицях кодів ASCII упорядковані за числовим значенням, тому нескладно перебирати символи десяткових цифр у потрібному порядку.
Строки, чи строкові константи. У програмі строки, або строкові константи, представляються послідовністю зображень символів, які заключені в лапки (не в апострофи), наприклад "будь-які символи". Серед символів стрічки можуть бути ескейп-послідовності, що відповідають кодам не зображуваних (спеціальних) символьних констант. Приклади рядків:
"1234567890"
"\t Склад президії"
" Початок стрічки \n і кінець стрічки".
Однак у стрічок є деякі особливості. Транслятор відводить кожному рядку окреме місце в пам'яті ЕОМ навіть у тих випадках, коли кілька рядків цілком збігаються (стандарт мови Сі припускає, що в конкретних реалізаціях це правило може не виконуватися). Розміщаючи рядок у пам'яті, транслятор автоматично додає в її кінці символ '\0', тобто нульовий байт. У записі рядка може бути й один символ: "А", однак на відміну від символьної константи 'А' (використані апострофи) довжина рядка "А" дорівнює двом байтам. На відміну від інших мов (наприклад, від Паскаля) у мові Сі немає окремого типу для рядків. Прийнято, що рядок - це масив символів, тобто вона завжди має тип char[ ]. Таким чином, рядок вважається значенням типу "масив символів". Кількість елементів у такому масиві на 1 більше, ніж у зображенні відповідної строкової константи, тому що в кінець рядка доданий нульовий байт '\0'.
Привласнити значення масиву символів (тобто рядку) за допомогою звичайного оператора присвоювання не можна. Помістити рядок у масив можна або за допомогою ініціалізації (при визначенні символьного масиву), або за допомогою функцій введення. У функції scanf() чи printf() для символьних рядків використовується специфікація перетворення %s.
При визначенні масиву типу char з одночасною ініціалізацією можна не вказувати межі зміни індексу. Сказане ілюструє наступна програма:
/* Друк символьного рядка */
#include <stdio.h>