Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Cи]Работа с массивом структуированных переменных


Автор: maxnsk82 13.4.2010, 03:52
Помогите дописать, а то со временем туго, а я долго разбираюсь что да как.

Вот само задание:

Определить структурированный тип, определить набор функций для работы с массивом структур. В  структурированной переменной предусмотреть способ отметки ее как не содержащей данных (т.е. "пустой"). Функции должны работать с массивом структур или с отдельной структурой через указатели, а также при необходимости возвращать указатель на структуру. В перечень функций входят:
- «очистка» структурированных переменных;
- поиск свободной структурированной переменной;
- ввод элементов (полей) структуры с клавиатуры;
- вывод элементов (полей) структуры с клавиатуры;
- поиск в массиве структуры и минимальным значением  заданного поля;
- сортировка массива  структур в порядке возрастания заданного поля (при сортировке можно использовать тот факт, что в Си++ разрешается присваивание структурированных переменных);
- поиск в массиве структур элемента с заданным значением поля или с наиболее близким к нему по значению. 
- удаление заданного элемента;
- изменение (редактирование) заданного элемента.

А вот что успел сделать, но даже и это не совсем рабочее:

Код

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

#define size 10

int menu(void); int findFree(void);
void Enter(void); void Delete(void);
void List(void); void Redactor(void);
void Sort(void);

struct Student
{
    int num;
    char fio[25];    
    char facult[25];
    char group[5];
}Stud[size];

void main(void)
{
int i, choice;

clrscr();
textbackground(15);
textcolor(4);

for(i=0;i<10;++i)
{
    Stud[i].fio[0]="\0";
}

cprintf("Na danny moment spisok pust: \n");

for(;;)
{
    choice=menu();
    switch(choice)
    {
        case 1:Enter();break;
        case 2:Delete();break;
        case 3:List();break;
        case 4:Sort();break;
        case 5:Redactor();break;
        case 6:exit(0);
    }
}
}

//---Menu polzavatelya---//
int menu(void)
{
int s;
cprintf("1.Vvesti zapis' o studente\n");
cprintf("2.Udalit' zapis' o studente\n");
cprintf("3.Vvesti ves' spisok\n");
cprintf("4.Sortirovat' zapisi\n");
cprintf("5.Redaktirovat' zapisi\n");
cprintf("6.Vyhod\n");
do
{
cprintf("\nVyberite deistvie: ");
scanf("%d",&s);
}
while(s<0||s>size);
return s;
}

//---Poisk mesta dlya zapisi---//
int findFree(void)
{
int i;
for(i=0;Stud[i].fio!="\0"&&i<size;++i);
if(i==size)return -1;
return i;
}

//---Vnesenie zapisi---//
void Enter(void)
{
int slot;
char num;
slot=findFree();
if(slot==-1)
    {
    cprintf("\nSpisok zapolnen");
    return;
    }

cprintf("\nVvedite FIO: ");
gets(Stud[slot].fio);

cprintf("\nVvedite nomer zachetki: ");
scanf("%d",&num);
Stud[slot].num = num;

cprintf("\nVvedite facultet: ");
gets(Stud[slot].facult);

cprintf("\nVvedite gruppu: ");
gets(Stud[slot].group);
}

//---Udalenie zapisey---//
void Delete(void)
{
int slot=0;
cprintf("\nVvedite nomer udalyaemoy zapisi:");
scanf("%d",slot);
if(slot>=0&&slot<size)
{
    Stud[slot].fio[0]="\0";
}
}

//---Vyvod vsego spiska---//
void List(void)
{
int i;
for(i=0;i<size;i++)
    {
    if(Stud[i].num)
    cprintf("%d\t%s\t%d\t%s\t%s\n",i,Stud[i].fio,Stud[i].num,Stud[i].facult,Stud[i].group);
    }
}


//---Sortirovka---//
void Sort(void)
{
}

//---Radactirovanie---//
void Redactor(void)
{
}


Автор: maxnsk82 22.4.2010, 10:26
Пытаюсь дальше сам делать, не могу сортировку сделать:

Код

void numSort(void)
{
    int i,tmp,cnt;
    for(i=0;i<size;i++)
    {    
        cnt=0;
        if(Stud[i].num>Stud[i+1].num)
        {
            tmp = Stud[i].num;
            Stud[i].num = Stud[i+1].num;
            Stud[i+1].num=tmp;
            cnt++;
        }if(cnt==0)break;
    }
}


Ошибка при присвоении: Lvalue required...как правильно сделать?

Автор: maxnsk82 6.6.2010, 06:36
На "с/с++ для новичков" помогли)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)