Написание подпрограммы поиска заданного элемента в списке и подсчета количества вхождений четных цифр в каждую строку текста (Лабораторная работа № 1)

Страницы работы

8 страниц (Word-файл)

Содержание работы

                            МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

                            НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ

                                                         УНИВЕРСИТЕТ

                                  КАФЕДРА ПРИКЛАДНЙ МАТЕМАТИКИ

Лабораторная работа №1

По дисциплине

«Структуры данных и алгоритмы»

 СТУДЕНТ: Вознюк А.В.

ГРУППА ПМ-95

ФАКУЛЬТЕТ: ПРИКЛАДНАЯ МАТЕМАТИКА И ИНФОРМАТИКА

ПРЕПОДАВАТЕЛЬ: Еланцева И. Л


1)  Условие задачи: Задан текст, состоящий из строк разделенных пробелом и оканчивающийся точкой.

Написать подпрограмму поиска заданного элемента в списке. Используя эту подпрограмму: подсчитать количество  вхождений четных цифр в каждую строку текста.

2)  Анализ задачи

1.  Дано: L={li | l i Є{‘0’, ‘1’, … , ‘9’}υ{‘a’, ‘b’, … ,’z’}υ{‘A’, ‘B’, … , ‘Z’}υ{‘  ‘}υ{‘.’},  iЄN

2.  Результат К={k j | k j Є{0, 1, 2,…,9} jЄN

3.  Метод решения:

В задаче можно выделить одну подзадачу: поиск и подсчет четных цифр в каждой строке:

j=1

Kj=0

i=1,

Повторять

Если  li≥'0' и li≤’9’ и (li/2)=0, то кjj+1

Если li='  ' или li='.' , то j=j+1, кj=0

i=i+1,

Пока l i≠’.’



3)  Структура

·  Внешнее представление входных данных:

В  файле Laba1.txt входные данные представлены последовательностью строк разделенных пробелом в конце точка.

·  Внутреннее представление входных данных:

Последовательность строк представлена линейным однонаправленным списком без заглавного звена.

Элемент списка представлен структурой: list1{char b; list1*next}

·  Внешнее представление выходных данных:

Выходные  данные  представлены  последовательностью целых чисел

·  Внутреннее представление выходных данных

Полученная последовательность целых чисел представлена линейным  однонаправленным списком без заглавного звена.

struct list2

{

list2 *next;

int k;

};

4)  Алгоритм:

q=NULLg.next=NULL         g.b=a g=new list1Fscanf(fp, “%c”,
&a)!=EOF)
Fp=fopen(“Laba1.txt”,”r”)

   ВХОД                              

 


List1*f;                                                                                             -

 


f=f->nextf=g            q=g                                                                    +

 


     f.next≠NULL-

 


Chet (q, &F)f->next=g                                                                                                                                   +

 


                                                                                                                                           

list2*B

,   B=F,B≠NULL
 


                                                                                                       -

ВыходB=B->nextВывод B->k                                                                          +

list1* n, list2**m,int i=0
list2*g
,      r=n,r ≠NULL 


List2**m                                                                                                           -

 


                                                               +

      i=i+1r. b≥0 и r.b≤9 и 
(r.b)/2=0
                       -

 


r.b=’ ‘ или r.b=’.’                                                               +

 


*m=g*m=NULLg.next=NULL      g.r=ig=new list2                                                        +

 


                                                                                                                                               +

f.next=gf=f.nextf.next≠NULLlist2*f
       f=*m
                                                                                                                    -

                                                                                                                                                 +

r=r.next


       i=0                                                                                                                     -

5)  Текст программы:

#include <stdio.h>

struct list1

{

list1 *next;

char b;

};

struct list2

{

list2 *next;

int k;

};

void Chet(list1 *n, list2 **m)

{

 int i=0;

 list1*r;

 for(r=n; r!=NULL; r=r->next)

              {

                            if (r->b>='0' && r->b<='9' && r->b%2==0) i=i+1;

                            if(r->b==' '||r->b=='.')

              {

                                          list2 *g;

                                          g=new list2;

                                          g->k=i;

                                          g->next=NULL;

                                          if(*m==NULL) *m=g;

                                          else

                                          {

                                                         list2*f;

                                                         for(f=*m; f->next!=NULL; f=f->next);

                                                         f->next=g;

                                          }

            i = 0 ;

                            }

              }

}

#include<conio.h>

void main()

{

    clrscr();

    char a;

    list1 *q;

    list2 *F;

    F=NULL;

    FILE *fp;

    fp=fopen("Laba1.txt", "r");

    q = NULL;

    while(fscanf(fp, "%c", &a)!=EOF)

    {

     list1 *g;

               g=new list1;

               g->b=a;

               g->next=NULL;

     if(q==NULL) q=g;

                                          else

                                          {

                                                         list1 *f;

                                                         for(f=q; f->next!=NULL; f=f->next);

                                                         f->next=g;

                                          }

    }

              Chet(q, &F);

              list2 *B;

    int p = 1 ;

              for(p=1,B=F; B!=NULL;p++,B=B->next)

              {

                            printf("v slove(%d) - %d\n",p,B->k);

              }

              fclose(fp);

    getch();

}

6)  Тесты:

              Дано                                                                                                    K
Ajji6  jy94 00j oty5 7687 khjy.                                                          1  1  2  0 2 0



.                                                                                                                  0

 


7)  Вывод: По результатам данных тестов программа работает правильно.

Похожие материалы

Информация о работе