МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра
З В І Т
до лабораторної роботи №4
з курсу: «Технології програмування»
на тему: «Робота з масивами. Використання функцій»
Варіант № 15
Мета роботи – вивчити елементи мови Сі, рядки, рядкові константи, принципи потокового вводу-виводу, стандартні файли і функції для роботи з ними.
Завдання
Дано текстовий файл, в якому міститься програма мовою С (Лабораторна робота №3). Скласти блок-схеми алгоритмів та програму мовою С для обробки текстового файлу з використанням розроблених функцій для роботи зі стрічками. Оформити виконання одного із завдань у вигляді підпрограми. Словами є слова в коментарях, назви ідентифікаторів, зарезервовані слова, які розділяються між собою згідно із синтаксисом мови С. Дані для роботи беруться з табл.1 за вказівкою викладача..
Таблиця 1
№ п/п
Завдання
15
Сформувати і вивести на екран текстовий файл в якому вилучити слова “while”, “if”, “for”. Вивести на екран рядки в яких містяться цифри і в кінці рядка дописати їх суму.
Блок-схема алгоритму основної програми
Список ідентифікаторів, констант, змінних, функцій, використаних у блок-схемі алгоритму і програмі, та їх пояснення
str,n – символьні рядки, типу char;
fp1, fp2 – вказівники на потоки файлів;
fopen() – відкриває файл із заданим режимом відкриття;
fprintf() – функція виводу даних у файл;
fgets() – функція зчитування рядка з файлу;
fputc()– запис одного символу в файл;
puts() – виведення на екран.
Текст програми
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define n 100
FILE *file1,*file2;
char str[n];
void string (char *str);
void rotate(int i,int kill,char *str);
int main(void)
{
file1 = fopen("input.txt","r");
file2 = fopen("output.txt","w+");
if(file1 != NULL)
{
while(
fgets(str,n,file1)!= NULL)
{
string(str);
}
fclose(file1);
fclose(file2);
}
scanf("%c");
}
void string(char *str)
{
char FOR[]="for";
char IF[] = "if";
char WHILE[] = "while";
int i=0;
int sum=0;
str[strlen(str)-1]=' ';
for(i=0;i<strlen(str);i++)
{
if(str[i]=='0') sum+=0;
if(str[i]=='1') sum+=1;
if(str[i]=='2') sum+=2;
if(str[i]=='3') sum+=3;
if(str[i]=='4') sum+=4;
if(str[i]=='5') sum+=5;
if(str[i]=='6') sum+=6;
if(str[i]=='7') sum+=7;
if(str[i]=='8') sum+=8;
if(str[i]=='9') sum+=9;
/// while
bool flag = false;
for(int j=i;j<strlen(str);j++)
{
if(str[j]==WHILE[j-i])
{
flag=true;
if(j-i==strlen(WHILE)-1) break;
}
else
{
flag=false;
break;
}
}
if(flag==true)
rotate(i,strlen(WHILE),str);
/// for
flag = false;
for(int j=i;j<strlen(str);j++)
{
if(str[j]==FOR[j-i])
{
flag=true;
if(j-i==strlen(FOR)-1) break;
}
else
{
flag=false;
break;
}
}
if(flag==true)
rotate(i,strlen(FOR),str);
/// if
flag = false;
for(int j=i;j<strlen(str);j++)
{
if(str[j]==IF[j-i])
{
flag=true;
if(j-i==strlen(IF)-1) break;
}
else
{
flag=false;
break;
}
}
if(flag==true)
rotate(i,strlen(IF),str);
}
printf(" %s <= sum = %d \n",str,sum);
fprintf(file2," %s <= sum = %d \n",str,sum);
}
void rotate(int i,int kill,char *str)
{
for(int j=i;j<strlen(str)-kill;j++)
str[j]=str[j+kill];
getchar();
}