Создание базы данных на Си
Помогите кто-нибудь пожалуйста с созданием базы данных на Си под такую задачу:
База данных деканата содержит информацию о студентах: номер зачетной книжки, ФИО студента (строки 20 символов), группа (строка 5 символов), курс (целое число), средний балл за прошлый семестр (целое число), средний балл за все семестры (целое число). Все баллы – по 10-и бальной системе.
Если можно пришлите помощь на ящик [email]Farior@yandex.ru[/email]
Заранее спасибо
- есть ли у кого нибудь исходник данной программы от dimon_9922, 25 декабря 2013 года
Если бы я делала это упражнение, то сделала бы struct, и сохраняла бы инфо в файле. А что ты хочешь непонятно. Самое главное попытайся решить сам, а сюда вопросы пости.
[COLOR=deeppink]Просьбы выслать на e-mail решения не приветствуються админестрацией.
Надеюсь вижу это у вас в последний раз.
[/COLOR]
http://forum.codenet.ru/showthread.php?s=&threadid=31131
использования struct в Си
использования struct и фаилов в С++
А в чем проблемы? И что ты подрузумеваешь под БД В С?
Если бы я делала это упражнение, то сделала бы struct, и сохраняла бы инфо в файле. А что ты хочешь непонятно. Самое главное попытайся решить сам, а сюда вопросы пости
Спасибо за совет...
Структура я так понимаю это то же что и списки.
Вот со списками второй день разбираюсь...
Дай бог дойдет до мозгов...
Пример:
http://forum.codenet.ru/showthread.php?s=&threadid=31131
использования struct в Си
использования struct и фаилов в С++
Товарищ Ольга, у тебя нет случайно конкретных примеров работы с структурами...
[QUOTE]Originally posted by OlgaKr
А в чем проблемы? И что ты подрузумеваешь под БД В С?
Если бы я делала это упражнение, то сделала бы struct, и сохраняла бы инфо в файле. А что ты хочешь непонятно. Самое главное попытайся решить сам, а сюда вопросы пости
Спасибо за совет...
Структура я так понимаю это то же что и списки.
Вот со списками второй день разбираюсь...
Дай бог дойдет до мозгов...
Связанные списки? Есть вопросы пости сюда.
В принцепе есть разница между списками и struct: при помощи списков организуют динамические массивы данных, при помощи struct объединяем логически связанные данные.
Товарищ Ольга, у тебя нет случайно конкретных примеров работы с структурами...
A popodrobnei gospodin Farior mozno, chto ty hochesh'?
Товарищ Ольга, у тебя нет случайно конкретных примеров работы с структурами...
К сожалению все мои лабароторки видно форматнула в свое время, написала тебе простой пример:
#include <string.h>
#define N 4
#define AmountGrades 3
void myprint(struct student []);
float calcCommonAverage(struct student []);
void printStudentsOfGroup(struct student [], char []);
struct student{
char id[6]; /* номер зачетной книжки */
char lastname[20];
char firstname[20];
char otechestvo[20];
char group[5];/* группа */
short course; /* курс */
int average; /* средний балл за прошлый семестр */
int grades[AmountGrades]; /* Все баллы */
};
int main(void)
{
struct student tblStudent[N] = {{"01234", "Familiya1", "Name1", "Otchestvo1", "GRP1", 1,9, {8,9,10}},
{"15224", "Familiya2", "Name2", "Otchestvo2", "GRP2", 1,8, {8,7,9}},
{"91834", "Familiya3", "Name3", "Otchestvo3", "GRP1", 1,7, {6,9,7}},
{"91934", "Familiya4", "Name4", "Otchestvo4", "GRP2", 1,9, {8,10,10}}};
myprint(tblStudent);
printf("\nCommon average is %f\n", calcCommonAverage(tblStudent));
putchar('\n');
printStudentsOfGroup(tblStudent, "GRP2");
putchar('\n');
return 0;
}
void printStudentsOfGroup(struct student tbl[], char g[])
{
int i;
for( i = 0; i < N; i++)
if(strcmp(g, tbl.group) == 0)
printf("%15s%15s%15s%10d\n", tbl.firstname,tbl.lastname,tbl.group, tbl.average);
}
float calcCommonAverage(struct student tbl[])
{
int i, j, sum = 0, amount = 0;
for(i = 0; i < N; i++)
for(j = 0; j < AmountGrades; j++)
sum += tbl.grades[j];
return ((float)sum/(N*AmountGrades));
}
void myprint(struct student tbl[])
{
int i;
for(i = 0; i < N; i++)
printf("%s%15s%15s%15s%10d\n",tbl.id,tbl.lastname,tbl.firstname,tbl.otechestvo,tbl.average);
}
#include <string.h>
#define N 4
#define AmountGrades 3
void myprint(struct student []);
Вот у меня после этой стро в компиляторе выскакивает "Undefined structure "student" " - что это за ерунда.
Возможно это из-зи того что мне нужно было написать эту прогу чисто на Си а не на Си++.
И вот так часто найдеш в литературе пример а он выкинет что-то подобное.
У меня есть методичка в которой тоже описана работа с списками но тоже засада.
Там написано создание списка :
"
typedef struct _ELEMENT{
int Val; _ELEMENT *Next, *Prev;
} ELEMENT;
ELEMENT *Head=NULL, *Curr=NULL;
"
и после
"
typedef struct _ELEMENT{
int Val; _ELEMENT
"
выкидывает "Declaration missing"
Что за ерунда не подскажешь случайно.
[QUOTE]
#include <string.h>
#define N 4
#define AmountGrades 3
void myprint(struct student []);
Вот у меня после этой стро в компиляторе выскакивает "Undefined structure "student" " - что это за ерунда.
Возможно это из-зи того что мне нужно было написать эту прогу чисто на Си а не на Си++.
Выкладываю рабочий исходник. У меня работает без проблем. Скачай и проверь как у тебя. ( у меня Microsoft Visual Studio 6.0)
И вот так часто найдеш в литературе пример а он выкинет что-то подобное.
У меня есть методичка в которой тоже описана работа с списками но тоже засада.
Там написано создание списка :
"
typedef struct _ELEMENT{
int Val; _ELEMENT *Next, *Prev;
} ELEMENT;
ELEMENT *Head=NULL, *Curr=NULL;
"
и после
"
typedef struct _ELEMENT{
int Val; _ELEMENT
"
выкидывает "Declaration missing"
Что за ерунда не подскажешь случайно.
Самое лучшее прикрепи фаил программы как я сделала в предыдущем посте, я хочу посмотреть весь код, запущу у себя если что.
int Val; _ELEMENT *Next, *Prev;
} ELEMENT;
ELEMENT *Head=NULL, *Curr=NULL;
typedef struct _ELEMENT{
int Val;[COLOR=red] _ELEMENT
[/COLOR]
Внутри структуры объявляем указатели на структуру, попробуй вместо
_ELEMENT сделать ELEMENT
Ведь при помощи typedef мы создаем тип структуры ELEMENT,а не _ELEMENT
Возможно это из-зи того что мне нужно было написать эту прогу чисто на Си а не на Си++.
То что ты откомпилировал файл как С++ это не важно, по крайней мере я обычно так делаю и ничего. Лишь бы не наоборот.
Выкладываю рабочий исходник. У меня работает без проблем. Скачай и проверь как у тебя. ( у меня Microsoft Visual Studio 6.0)
Видиш ли я пишу просто на Си, а твой пример работает на Си++.
Видно для Си что-то пишется по другому.
У меня "С++ Bilder 6" но когда я открываю новый файл указываю что этот файл будет написан на Си у меня (такое задание, написать на Си а не на Си++).
У меня твой исходник не работает на Си, а на Си++ вроде ошибок не выкидывает.
Как мне разобраться с моей проблемой...
Видиш ли я пишу просто на Си, а твой пример работает на Си++.
Видно для Си что-то пишется по другому.
У меня "С++ Bilder 6" но когда я открываю новый файл указываю что этот файл будет написан на Си у меня (такое задание, написать на Си а не на Си++).
У меня твой исходник не работает на Си, а на Си++ вроде ошибок не выкидывает.
Как мне разобраться с моей проблемой...
Bilder не учила, код думаю нормальный (у меня синтаксис С 6.0), разница скорее всего в библиотеках.
Кто может хелп пожалуйста :)
p.s. расширение фаила обычно меняеться без проблем : просто переименовываешь как тебе надо и все, или copy/paste
Самое лучшее прикрепи фаил программы как я сделала в предыдущем посте, я хочу посмотреть весь код, запущу у себя если что.
int Val; _ELEMENT *Next, *Prev;
} ELEMENT;
ELEMENT *Head=NULL, *Curr=NULL;
typedef struct _ELEMENT{
int Val;[COLOR=red] _ELEMENT
[/COLOR]
Вот методичка по Си там с 12 страницы описывается работа с списками.
А bilder безразница там ставиться на Си или на Си++ или даже на "билдер"
[QUOTE]Originally posted by OlgaKr
Самое лучшее прикрепи фаил программы как я сделала в предыдущем посте, я хочу посмотреть весь код, запущу у себя если что.
int Val; _ELEMENT *Next, *Prev;
} ELEMENT;
ELEMENT *Head=NULL, *Curr=NULL;
typedef struct _ELEMENT{
int Val;[COLOR=red] _ELEMENT
[/COLOR]
Вот методичка по Си там с 12 страницы описывается работа с списками.
А bilder безразница там ставиться на Си или на Си++ или даже на "билдер"
Спасибо за методички, только я вроде код просила, со списками, который ты откомпилировать не можешь :).
1 - поменяла фаил(см. выше, сохранила его как С - файл)
2 - ты заметил что я тебе написала(выше) предполагаемую ошибку в коде? ты пробавал его изменить?
Спасибо за методички, только я вроде код просила, со списками, который ты откомпилировать не можешь :).
1 - поменяла фаил(см. выше, сохранила его как С - файл)
2 - ты заметил что я тебе написала(выше) предполагаемую ошибку в коде? ты пробавал его изменить?
Я пробовал убрать черту как ты советовала но ничего
code:
typedef struct _ELEMENT{
int Val; _ELEMENT (вот здесь курсор)*Next, *Prev;
а в ошибках написано
"Declaration missing"
А втвоем примере я вроде прошол в перед там нужно было переставить строки местами
void myprint(struct student []);
float calcCommonAverage(struct student []);
void printStudentsOfGroup(struct student [], char []);
и
struct student{
char id[6]; /* номер зачетной книжки */
char lastname[20];
char firstname[20];
char otechestvo[20];
char group[5];/* группа */
short course; /* курс */
int average; /* средний балл за прошлый семестр */
int grades[AmountGrades]; /* Все баллы */
};
походу вызов функции с использованием объявляется после объявления структуры.
Пожалуйста если можешь напиши мне програмку где в структуру вводится даные склавиатуры, а потом выводятся на экран что бы до меня дошло как работать с структурой.
Пожалуйста если можешь напиши мне програмку где в структуру вводится даные склавиатуры, а потом выводятся на экран что бы до меня дошло как работать с структурой.
А можно конкретно выражать мысль, что надо: структура или связанные списки(ясно что на структуре основаны, но методы работы отличаются)
{
int Val;
_ELEMENT *Next, *Prev;
} ELEMENT;
обьявление для С++. На C оно выглядит так:
{
int Val;
struct _ELEMENT *Next, *Prev;
} ELEMENT;
OlgaKr это:
{
int Val;
ELEMENT *Next, *Prev;
} ELEMENT;
ничего не даст.
Ведь при помощи typedef мы создаем тип структуры ELEMENT,а не _ELEMENT
Это не верно, помощи typedef мы создаем тип ELEMENT, равный типу _ELEMENT.
Люди, вы C то знаете?!! Вот это:
{
int Val;
_ELEMENT *Next, *Prev;
} ELEMENT;
обьявление для С++. На C оно выглядит так:
{
int Val;
struct _ELEMENT *Next, *Prev;
} ELEMENT;
OlgaKr это:
{
int Val;
ELEMENT *Next, *Prev;
} ELEMENT;
ничего не даст.
Это не верно, помощи typedef мы создаем тип ELEMENT, равный типу _ELEMENT.
да вроде знаю но typedef обычно никогда не пользовалась.
Про помощи typedef создаем новый тип переменной, в struct это как раз выгодно тем что бы не писать всю эту красоту: struct _ELEMENT
Проверю и смогу сказать конкретней, спасибо за совет
[COLOR=blue]
typedef struct _ELEMENT
{
int Val;
struct _ELEMENT *Next, *Prev;
} ELEMENT;
Хорошо а как записать в первый элемент потом во второй и т.д. в этом списке, т.е. как проходит пополнение структуры?
Вот это обьявление:
[COLOR=blue]
typedef struct _ELEMENT
{
int Val;
struct _ELEMENT *Next, *Prev;
} ELEMENT;
Хорошо а как записать в первый элемент потом во второй и т.д. в этом списке, т.е. как проходит пополнение структуры?
Posmotri zdes', esli ne podoidet napishu
http://forum.codenet.ru/showthread.php?s=&threadid=27596&highlight=%D1%F2%F3%E4%E5%ED%F2%E0%EC
Posmotri zdes', esli ne podoidet napishu
http://forum.codenet.ru/showthread.php?s=&threadid=27596&highlight=%D1%F2%F3%E4%E5%ED%F2%E0%EC
Спасибо за совет сейчас попробую ....
Posmotri zdes', esli ne podoidet napishu
http://forum.codenet.ru/showthread.php?s=&threadid=27596&highlight=%D1%F2%F3%E4%E5%ED%F2%E0%EC
Вот посмотрел. Написано тоже походу под Си++
Дописал там чуть чуть, но толку никакого.
[COLOR=blue]
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
//СТРУКТУРА ОДНОГО ЭЛЕМЕНТА СПИСКА
struct list_item
{
int val;
struct list_item *next;
};
//ФУНКЦИЯ ВЫВОДЯЩАЯ РУССКИЕ БУКВЫ В КОНСОЛЬ ДЕЙСТВИТЕЛЬНО РУССКИМИ
void rus_out(char *str)
{
char out_str[255];
CharToOem(str,out_str);
printf("%s",out_str);
return;
}
int main(void)
{ int E;
unsigned int numb;
struct list_item *start, *curr;
rus_out("Введите число элементов в списке: ");
scanf("%d",&numb);
if(numb<1)
{
rus_out("Введено недопустимое число!\nНажмите любую кнопку для завершения программы\n");
getch();
return 1;
}
rus_out("Введите элементы списка.\n");
start=(struct list_item*)malloc(sizeof( struct list_item));
scanf("%d",&(start->val));
start->next=0;
numb--;
//ЕСЛИ ЭЛЕМЕНТОВ БОЛЬШЕ ЧЕМ ОДИН, ТО НАЧИНАЕМ СЧИТЫВАНИЕ СПИСКА
if(numb)
{
// curr = new list_item;
curr=start;
for(;numb;numb--)
{
curr->next=(struct list_item*)malloc(sizeof(struct list_item));
curr=curr->next;
scanf("%d",&(curr->val));
curr->next=0;
}
}
//ВЫВОДИМ СПИСОК ДЛЯ КОНТРОЛЯ
rus_out("Введен список: |");
curr=start;
do
{
printf(" %d |",curr->val);
curr=curr->next;
}while(curr);
printf("\n");
//ОСВОБОЖДАЕМ ДИНАМИЧЕСКУЮ ПАМЯТЬ ВЫДЕЛЕННУЮ ПОД СПИСОК
curr=start;
do
{
start=curr;
curr=curr->next;
free(start);
}while(curr);
rus_out("Нажмите любую клавишу для завершения программы...\n");
getch();
return 0;
}
вотчто таккое "struct list_item *start, *curr;" что здесь объявляется.
Что это "scanf("%d",&(start->val));
start->next=0;" особенно "->"
Как вообще в структуру просто ввести данные
Допустим есть структура:
typedef struct _ELEMENT
{
int Val;
struct _ELEMENT *Next, *Prev;
} ELEMENT;
я понимаю это "struct _ELEMENT *Next, *Prev;" указатели на предыдущий и следующий элемент.
Как записать в структуру данные, куда их нужно записывать в "val" что ли (походу в него), а с него пишется в список или даже и не знаю совсем запутался с этими структурами.
Мне бы простой пример где объявления структуры, запись в нее и вывод на экран.
Как объявит я походу понял а вот остальное...
Помоги пожалуйста разобраться !!!
Вот посмотрел. Написано тоже походу под Си++
Дописал там чуть чуть, но толку никакого.
честно, в данном отрывке что ты выбросил, от С++ не вижу ничего :), вроде родной С
вот что таккое "struct list_item *start, *curr;"
объявляются указатели на структуру при помощи которых будем передвигаться по списку. а бегать будем по спискам при помощи адресса сохранненого в next(данный пример на линйную структуру в которой сохранили только адрес следущий структуры, без предыдущей.
Что это "scanf("%d",&(start->val));
val - поле для сохранения каких то значений, и в данном коде ны инициализируем его зна чением с клавиатуры
start - указатель на структуру
start -> val - получаем доступ к переменной val, структуры на которую ыказывает start
start->next=0;" особенно "->"
аналогично start->val, только в данном случае получаем доступ к указателю структуры, на которую указывает start, и сохраняем в next 0 (ноль - т.е. не указывает не на что - конец списка, как [color=blue]null[/color]
В данном примере реализованы списки с одним указателем next(можем передвигаться только вперед по списку) поэтому 0 - это конец списка, если добавляем новую структуру в список значит вместо 0 пишем ее адрес, а в next новой структуры пишем 0 etc.
надеюсь хоть что то понял, тяжело мне писаниной заниматься :)
попробую написать простой пример (хотя разабраться со структурами немного трудно, помню себя), напишу только с одним указателем next разберись хотя с этим
Вот посмотрел. Написано тоже походу под Си++
Говорю тебе как аффтар того кода ;) - там всё на Си, без плюсов, т.к. в плюсах я шарю весьма слабо.
Говорю тебе как аффтар того кода ;) - там всё на Си, без плюсов, т.к. в плюсах я шарю весьма слабо.
Может ты мне сможешь сборосить кратенький пример работы с структурой (создание, запись и вывод на экран) сбрось пожалуйста если не трудно...
#include <stdlib.h>
struct node
{
int val;
struct node *next;
};
struct node *buildnode(int );
struct node *buildlist(void);
void addnode(int, struct node * );
void printlist(struct node *);
struct node *deletedlist(struct node *);
int main(void)
{
struct node *list = buildlist();
printlist(list);
putchar('\n');
addnode(50,list);
printlist(list);
putchar('\n');
list = deletedlist(list);
return 0;
}
struct node* buildlist(void)
{
struct node* first = NULL, *last;
int n;
printf("Enter number: ");
scanf("%d", &n);
if(n)
{
first = last = buildnode(n);
printf("Enter a number: ");
scanf("%d", &n);
while(last != NULL && n != 0)
{
last->next = buildnode(n);
last = last->next;
printf("Enter a number:");
scanf("%d",&n);
}
}
return first;
}
struct node* buildnode(int value)
{
struct node* temp = (struct node *)malloc(sizeof(struct node));
if(temp == NULL)
{
printf("No memory available\n\n");
return NULL;
}
temp->val = value;
temp->next = NULL;
return temp;
}
void printlist(struct node *ptr)
{
while(ptr != NULL)
{
printf("%d ", ptr->val);
ptr = ptr->next;
}
}
struct node *deletedlist(struct node *ptr)
{
struct node* temp;
while(ptr != NULL)
{
temp = ptr->next;
free(ptr);
ptr = temp;
}
return ptr; /*ptr == NULL*/
}
void addnode(int val, struct node *first )
{
while(first ->next != NULL)
first = first->next;
first->next = buildnode(val);
}
простеькая программа которая:
1) принимает от пользователя целые числа, ввод заканчивается на нуле
2)расспечатывает список
3)добавляет к концу списка еще один элемент(структуру)
4)расспечатывает обновленный список
5)удалет список
6)выход из программы
Огромное спасибо за программу буду пробовать разбираться главное что она у меня работает.
Как попробую сообщу о результатах.
Еще раз огромное спасибо тебе Оля за прогу.
Что объявляется этой строкой «struct node* first = NULL, *last;» в функции «struct node *buildnode(int )» Структура уже объявлена, тогда что объявляется здесь ?
Что записывается в указатель на следующий элемент (next).
Что такое «struct node* temp = (struct node *)malloc(sizeof(struct node));» я так понимаю это выделение памяти под переменную «temp».
Что такое «temp->val = value;».
Вообще если не сильно трудно напиши пожалуйста пояснения что где происходит.
я конечно попытаюсь объяснить, но если ты не понимаешь работу с указателями то надо брать книгу и начинать с простых упражнений :).
кстати обрати внимание что в моей подписи есть ссылка на книги foruma, также посмотри на lib.ru , рекомендую преобрести книгу Х.М Дейтел, П.Дж. Дейтел "Как программировать на С", в ней весьма доступно изложен матерьял.
1 - при помощи struct есть возможность объединить логически связанные между собой переменные, например надо построить таблицу содержащию личную информацию о рабочих: имя, д/р, адрес. имеются сотни рабочих, как программе обработать инфо о таком кол-ве людей?
существуют массивы, при помощи которых объединяем однотипные данные, но в данном случае нам нужен массив структур содержащий поля чтобы описать(обработать) нужное инфо (составное, содержащие больше одного поля).
2 - есть у нас структура, при помощи которой можем описать данные для одного рабочего. чтобы описать 1000 рабочих нужен массив структур типа стракт:
но проблема в том что завтра кол-во может увеличиться или умрньшиться тогда что делать? особенно если увеличиться. вывод - нужен диномеческий массив (т.е. массив размер которого можно изменять), в С он реализуется при помощи связанных списков.
в чем логика списков: добавляем в структуру данных еще поле/поля при помощи которых эти списки связываем, это поле/поля указатель/и содержащие адрес следующеи(next )/ предыдущей(previous) структуры, при помощи этих указателей можем передвигаться списку(в принцепе достаточно и одного, хотя бы next).
значение этих указателей нельзя изменять т.к. потерятся связь между структурами, поэтому нужен как минимум один ( или больше) вспомогательных переменных указателей чтобы передвигаться по спискам. обязанность программиста сохранить адрес первого элемента списка(если связь только по одному указателю next) если связь двухстороняя тогда достаточно иметь хоть один реальный адрес что бы бегать по структуре(честно говоря с такими не работала -> незнакома с принятой логикой работы, только личное понимание :))
1 - function main
struct node *list = buildlist();
можно записать как:
list = buildlist();[color=green]/*функ. buildlist строит список и возращает адрес первой структуры списка в main, который сохраняем в указателе list*/[/color]
вспомагательные указатели при помощи которых будем работать со списком
правильно, каждый раз когда надо добавить структуру мы запрашиваем необходимое кол-во памяти, malloc функция типа [color=blue]void *[/color], при помощи кастинга [color=blue](struct node *)[/color] преобразовываем ее в тип в тип указателя на переменную, для которой запрашиваем память(в данном случае для структуры node).
более простой пример преобразования:
float t = [color=blue](float)[/color]5/2;
изначально функ. malloc ~выглядит:
после преобразования:
адрес следующей структуры(смотри рисунок)
temp = ptr->next;
сохраняем в указателе temp адрес на следущую структуру(ptr naprimer ukazyvaet na strukturu s adresom 1FFh, togda v temp zapisyvaem znachenie next == 15h)
при помощи [color=blue]namepointer->namevariableOfstruct[/color] получаем доступ к значениям переменных сохранненым в структуре, на которую указывает pointer
[COLOR=blue]NULL[/COLOR] - конец списка(последний стракт в списке)
[attach]802[/attach]
только хочу заметить что temp это указатель на структуру, и он принимает адрес памяти запрашиваемый у ОС через функцию malloc для очередного узла(структуры node) который хотим добавить в список, если память(RAM) есть значит malloc возращает адрес зарезирвированной области RAM для данного стракта, если нет(закончилась) тогда malloc возращает NULL -> нет памяти, и не можем создать новый node.
обрати внимание что функ. malloc принимает как параметр размер памяти который нужно выделить, а точнее посылаем размер структуры node(оператор sizeof вычесляет этот размер)
typedef struct _ELEMENT
{
int Val;
struct _ELEMENT *Next, *Prev;
} ELEMENT;
ELEMENT *Head=NULL, *Curr=NULL;
В этом объявлении структуры Head и Curr.
Head это указатель на первый элемент, а его можно обозвать другим словом?
Я к тому что не обязательно такие названия (Head и Curr) указателей на первый и последний элемент а можно их обозвать по другому.
И еще переход на следующий элемент
void MoveNextD()
{if(Curr) Curr=Curr->Next;}
функция. а вот как понять
{if(Curr) Curr=Curr->Next;
если последний элемент то последний элемент равен следующему? но ведь если он последний элемент следующего нет.
И получается if выполняется в любом случае если условие (Curr)?
Вот почитал книги и опять появился вопрос.
typedef struct _ELEMENT
{
int Val;
struct _ELEMENT *Next, *Prev;
} ELEMENT;
ELEMENT *Head=NULL, *Curr=NULL;
В этом объявлении структуры Head и Curr.
Head это указатель на первый элемент, а его
можно обозвать другим словом?
Я к тому что не обязательно такие названия (Head и Curr) указателей на первый и последний элемент а можно их обозвать по другому.
неважно имя переменной, но значение которое в
нем сохраняем, естественно что желательно
значения давать смысловые, чтобы легче читались программы.
Хочу заметить что изначально этим переменным задается значение NULL(0) и пока не задаем действительные адресса структур они не
указывают не на что.
И еще переход на следующий элемент
void MoveNextD()
{if(Curr) Curr=Curr->Next;}
функция. а вот как понять
{if(Curr) Curr=Curr->Next;
если последний элемент то последний элемент равен следующему? но ведь если он последний элемент следующего нет.
И получается if выполняется в любом случае если условие (Curr)?
если значение Curr отлично от нуля(NULL,0) тогда это означает что Curr указывает на какую то структуру(не содержит в себе пустого нулевого значения) заходим в if и Curr принимает адресс следущей структуры сохранненой в next или NULL если Curr указывает на последнию структуру в списке.
а если Curr равен нулю то естественно в if не заходим. без этой проверки при Curr == NULL программа на этом коде вылетела бы в дебаг.
В С правило такое если в условии ноль стоит if не срабатывает, а если любое другое значение положительное или отрицательное тогда работает
[color=blue]if(условиe)[/color]
p.s. будет время постараюсь нассписать примечания к проге, если кто то другой может напишите плиз
ты понял логику построения списков хотя бы по рисунку
что я прикрепила, или запутался?
а то начинаю думать что это я для себя
мемуары пишу :)), на тему программирования
вот создаем структуру с двумя указателями
typedef struct _zap{
char nomer[7];
char fio[21];
int kours;
char group[6];
int avv_ls;
int avv_a;
struct _zap * next, * prev;} zap;
Получается zap - это вид структуры, а вот как сделать что бы zap был не один, а в нем находилось несколько записей вида структуры ?
созданием списка я разобрался, а вот как сделать несколько списков (базу), если использовать масив элементов то вроде получается но переход по записям (спискам) получается тежелое.
вот создаем структуру с двумя указателями
typedef struct _zap{
char nomer[7];
char fio[21];
int kours;
char group[6];
int avv_ls;
int avv_a;
struct _zap * next, * prev;} zap;
Получается zap - это вид структуры, а вот как сделать что бы zap был не один, а в нем находилось несколько записей вида структуры ?
помоему об этом уже говорили:
1 способ: объявить массив, размер массива не изменяется
2 способ: списки, списки то и состоят из структур
по ходу программы ты можеш добавлять, убирать структуры из списка
преимущество списка в том что его размер динамический(можно изменять его размеры)
пример со списком вроде есть.
Получается zap - это вид структуры, а вот как сделать что бы zap был не один,
[color=blue]а в нем[/color] находилось несколько записей вида структуры ?
может я неправильно поняла, как именно ты хочешь сохранить структуры? в чем "в нем" :)?
может я неправильно поняла, как именно ты хочешь сохранить структуры? в чем "в нем" :)?
а списки тебя чем не устарювают?
вроде с этого начинали
прогу которую я тебе бросила она допустим простая
можно написать с меню что бы пользователь выбирал опции:
добавить структуру
удалить структуру
расспечатать все списки
и вообще все что душе угодно, и возможно сделать
в принцепе такой пример я тебе изначально написала, просто не вылажала т.к. села в лужу с НЛО
(забыла о летающих enters, чуть голова не взорвалась пока поняла в чем дело, но к тому времени я уже не хотела ничего :))