Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ СИ. Лабораторный практикум доцента кафедры «Системы управления и компьютерные технологии» Пановой Т.В..doc
Скачиваний:
106
Добавлен:
26.03.2015
Размер:
585.22 Кб
Скачать

III. Практическая часть.

1. Выполнение общего задания.

Разобрать задачи; по текстам программ составить алгоритмы решения задач.

Задача 1

1. Постановка задачи: подсчитать количество строк, символов и слов в текстовом файле (слова – любые связные группы символов, разделенные пробелами, табуляциями или разделителями строк).

2. Блок-схема алгоритма:

3. Текст программы:

#include <stdio.h>

#include <conio.h>

#include <ctype.h>

int main()

{

FILE *f; // структура, описывающая файл

int s; // код введенного символа

int sim=0,word=0,line=0; // количество символов, слов, строк соответственно

int read_word=0; // признак чтения слова

char fileName[256]; // полное имя файла

printf("\nВвести имя файла: ");

scanf("%s", fileName);

f=fopen(fileName, "r"); // открытие файла для чтения

if (f!=NULL)

{

while ((s=fgetc(f))&&!feof(f)) // чтение символа пока не конец файла

{

if (c!='\n')

sim++; // увеличение количества символов

else

line++; // увеличение количества строк – подсчет символов перевода строки

if (!isspace(s) && !read_word) // если s – не разделитель

{

words++; // увеличение количества слов

read_word=1; // чтение слова

}

else

if (isspace(s))

read_word=0;

}

fclose(f);

printf("количество в файле символов =%d\n",sim);

printf("количество слов =%d\n",word);

printf("количество строк =%d\n",line);

}

else // ошибка открытия файла - вывод сообщения об ошибке

perror("\nФайл не может быть открыт для чтения");

getch();

return 0;

}

Задача 2

1. Постановка задачи: постранично просмотреть текстовый файл.

2. Текст программы:

#include <stdio.h>

#include <conio.h>

#define nstr 25

#define m 80

#define s 100

#define c 256

int Read_str(FILE *f,int num,long *p0,char st[]); /* функция вывода содержимого страницы по введенному номеру */

int main()

{

FILE *fd;

long p[s],*p1;

int np=0,i=nstr;

char fileName[c],str[m];

clrscr();

printf("\nInput file's name:");

gets(fileName);

fd=fopen(fileName,"r");

if (fd==NULL) // ошибка открытия файла

{

perror("File can't open!");

getch();

return 1; // выход из главной функции с кодом 1

}

else

{

p1=&p[0]; /* установить указатель на начало массива позиций начала страниц в файле */

while(np<s&&i==nstr) // просмотр страниц файла

{

*p1=ftell(fd);

i=0;

while(i<nstr&&fgets(str,m,fd)!=NULL)

i++;

p1++;

np++;

}

p1-=np;

Read_str(fd,np,p1,str);

fclose(fd);

getch();

return 0;

}

}

int Read_str(FILE *f,int num,long *p0,char st[])

{

long *p2;

int n,i;

while(1)

{

clrscr();

gotoxy(1,27);

do

{

printf("Number of the page ");

scanf("%d",&n);

}

while(n>num+1||n<=0);

p2=p0;

p2=p2+n-1;

fseek(f,*p2,SEEK_SET);

i=0;

while(i<nstr&&fgets(st,m,f)!=NULL)

{

gotoxy(1,1+i);

puts(st);

i++;

}

if (fgets(st,m,f)==NULL)

break;

getch();

}

return 0;

}

Задача 3

1. Постановка задачи: каждое число записано в новой строке текстового файла; считать числа из файла в одномерный массив.

2. Текст программы:

#include <stdio.h>

#include <conio.h>

#define n 10

void main(void)

{

int m[n],i=0,j;

FILE *f;

if ((f=fopen(“с:\file.txt”,”r”))==NULL) // открытие текстового файла

printf("\nФайл не открыт");

else

{

while (!feof(f)) // пока не конец файла считывать числа в массив

{

fscanf(f,”%d\n”,&m[i]); i++;

}

printf(“\n”);

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

printf(“%d “,m[j]);

fclose(f); // Закрытие файла

}

getch(); return;

}

Задача 4

1. Постановка задачи: создать пустой двоичный файл, открыть существующий файл, добавить 20 переменных вещественного типа, прочитать их в обратном порядке.

Соседние файлы в предмете Программирование