списки.Прокомментируйте детально,как работает программа...

Модератор: Злобный

Ответить
grez
Новичок
Сообщения: 3
Зарегистрирован: Вс май 27, 2007 18:44

списки.Прокомментируйте детально,как работает программа...

Сообщение grez »

Помогите пожалуйста разобраться в программе,надо защитить лабу.Желательно каждую функцию... Особенно интересуют " ->"


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>

struct list{// Описание струкутры list
char data;// поле хранения символа
struct list *link;//поле хранения адерса на следующий элемент
};

void create_list(list **);//описание прототипов функции создания списка
void preview_list(list *);// просмотра
void clear_memory(list *);//очистки памяти


void main()
{ list *p1=NULL,*p2=NULL,*p=NULL;//объявление переменных
list *t1,*t2,*q1,*q2,*tp;
//*t1,t2,q1,q2 вспомогательные указатели
//p1 указатель на список пропсных букв
//P2 указатель на список строчных букв
clrscr();

create_list(&p);//вызов функции создания списка
puts("Start");
preview_list(p);//вызов функции просмотра

tp=p;
//Создание двух списков на основе исходного
while (tp){
if (tp->data<='Z'){
t1=new(list); t1->data=tp->data; t1->link=NULL;
if (p1==NULL) {p1=t1; q1=t1;}
else {q1->link=t1; q1=t1;}
}
else{
t2=new(list); t2->data=tp->data; t2->link=NULL;
if (p2==NULL) {p2=t2; q2=t2;}
else {q2->link=t2; q2=t2;}
}
tp=tp->link;
}
//Вывод списка отрицательных элементов
puts("\nPropisnie");
preview_list(p1);

//Вывод списка положительных элементов
puts("\nStrocnie");
preview_list(p2);

//Очистка памяти
clear_memory(p);clear_memory(p1);clear_memory(p2);

}

void create_list(list **top)
{ int i,n;
char ch;
list *t,*q;
printf("Vvedite kolicestvo elementov\n");
printf("n="); scanf("%d",&n);
//Создание первого элемента списка

printf("Vvedite bukvi\n");
printf("data=");ch=getche();puts("");
t=new(list);
t->data=ch;
t->link=NULL;
*top=t; q=t;

//создние и добавление в список последующих элементов
for(i=1; i<n; i++)
{
printf("data=");
ch=getche();
puts("");
t=new(list); t->data=ch; t->link=NULL;
q->link=t; q=t;

}
}

void preview_list(list *top)
{
list *t;
t=top;
//Вывод списка на экран
while (t)
{ printf("%c",t->data);
t=t->link;
}
getch();
}

void clear_memory(list *top)// функция очистки памяти
{ list *t;

t=top;
while(t)
{
top=top->link;
delete(t);
t=top;
}

}
Надо на основе заданного списка символов сформировать два других, помещая в первый из них строчные, а во второй пропистные из исходного списка
Аватара пользователя
MoHAX
Старожил
Сообщения: 1293
Зарегистрирован: Вс апр 30, 2006 10:00
Откуда: От сырости

Сообщение MoHAX »

Тебе нужно что именно? описать работу каждой функции и сделать анализ всех параметров и возвращаемых значений? или для начала самому понять о чём речь идёт в каждой функции?

-> используется для доступа к полю структуры с использованием указателя на неё......

к примеру

// создание объекта структуры list (List) и указателя на
структуру типа list (pList)

struct list List, *pList;

тогда обращение к полю data,( а у тебя именно так называется поле) структуры будет осуществляться так:

для объекта: List.data для указателя: pList->data
Аватара пользователя
Злобный
Завсегдатай
Сообщения: 2716
Зарегистрирован: Сб июн 18, 2005 21:05
Контактная информация:

Сообщение Злобный »

MoHAX,
пара небольших уточнений, если позволите:
1) для доступа не к полю, а к любому открытому нестатическому члену. кроме поля может быть, к примеру, метод.
2) не только объекта структуры, но и объекта класса.
Аватара пользователя
MoHAX
Старожил
Сообщения: 1293
Зарегистрирован: Вс апр 30, 2006 10:00
Откуда: От сырости

Сообщение MoHAX »

Злобный,

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

использованием структур....

Да и не думаю что так глубоко стоит копать..... Обычно

преподаватели ловят на том, что студенты лезут в дебри сами.... А потом не в

силах объяснить, что такое метод к примеру.... Хотя это уже от преподавателя зависит....)
grez
Новичок
Сообщения: 3
Зарегистрирован: Вс май 27, 2007 18:44

Сообщение grez »

Чтоб я смог рассказать учителю подробно, как, откуда,из списков вставляем строчные и пропистные буквы. Как работает программа.Вообщем на примере, если можно...
Аватара пользователя
MoHAX
Старожил
Сообщения: 1293
Зарегистрирован: Вс апр 30, 2006 10:00
Откуда: От сырости

Сообщение MoHAX »

grez,

Хм....тут писанины много.....вообще...чтобы понять прогу нужно её более понятно представить перед собой.....То есть удобней анализировать, когда в каждой строке по одной операции.....а когда всё в куче- сложно разобраться....всегда проще понять как и что происходит делая наброски для себя на листке и идя таким образом по ходу программы и анализируя.....

Извини....было бы лишнее время, помог бы.... Постарайся сам....Функции то не сложные....Правда не совсем рационально сделано, но да ладно....

Ты на каком уровне то находишься? Совсем плох?
Ответить

Вернуться в «Программирование»