Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2011, 16:44   #1
nyulkin
Новичок
Джуниор
 
Регистрация: 04.01.2011
Сообщений: 2
По умолчанию Программа на Си(линейные списки)

Очень нужно написать программу на Си для зачета!

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

Написать программу, которая обеспечивает:
• Начальное формирование предметного указателя;
• Вывод предметного указателя;
• Вывод номеров страниц для заданного слова.
Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.


Я в списках совсем не разбираюсь.. что-то попыталась сделать по подобию из книжки,но как-то оно не очень получилось..
Код:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
int n;
struct List
{
 char word[100];
 int page[10];
 struct List *next;
 struct List *prior;
};

struct List *start;
struct List *last;
struct List *find(char *);

void enter(void), search(void), show(void);
void display(struct List *);
void dlstore(struct List *i, struct List **last);
int menu_select(void);

int main(void)
{
 start=last=NULL;

 for(;;) {
  switch(menu_select()) {
   case 1: enter();
    break;
   case 2: search();
    break;
   case 3: show();
    break;
   case 4: exit(0);
  }
  return 0;
  }
 }

 int menu_select(void)
 {
  char s[80];
  int c;

  printf("1. Vvod slova\n");
  printf("2. Otobrazhenie spiska\n");
  printf("3. Poisk slova\n");
  printf("4. Exit\n");
  do {
   printf("\nVash vybor: ");
   gets(s);
   c=atoi(s);
  } while(c<0||c>4);
  return c;
 }


void enter(void)
{
struct List *info;
int m;
int j;
int k;

for(;;) {
 info=(struct List*)malloc(sizeof(struct List));
 if(!info){
  printf("\nNet cvobodnoi pamyati");
  return;
  }

  printf("Vvedite kol-vo slov\n");
  scanf("%d",&k);
  for(j=1;j<=k;j++)
 printf("Vvedite slovo\n",j+1);
  scanf("%s",info->word[j]);
  printf("Vvedite kol-vo stranic:");
 scanf("%d",&n);
  for(m=1;m<=n;m++)
  {
    printf("VVedite stranicy\n",m+1);
   scanf("%d", info->page[m]);
   }

   dlstore(info, &last);
   } }



  void dlstore(struct List *i,struct List **last)
  {
 if(!*last) *last=i;
 else (*last)->next=i;
 i->next=NULL;
 i->prior= *last;
 *last = i;
}

//poisk slova
struct List *find( char *word)
{
 struct List *info;

 info=start;
 while(info) {
  if(!strcmp(word, info->word)) return info;
  info=info->next;
 }
 printf("slovo ne naideno.\n");
  return NULL;
 }

 void show(void)
 {
  struct List *info;

  info=start;
  while(info) {
   display(info);
   info=info->next;
  }
  printf("n\n");
 }

 void display(struct List *info)
 {
  printf("%s", info->word);
  printf("%d", info->page);
  printf("\n\n");
  }

  void search(void)
  {
   char word[100];
   struct List *info;

   printf("Vvedite slovo: ");
   gets(word);
   info=find(word);
   if(!info) printf("Ne naideno\n");
   else display(info);
 }
nyulkin вне форума Ответить с цитированием
Старый 04.01.2011, 20:04   #2
nyulkin
Новичок
Джуниор
 
Регистрация: 04.01.2011
Сообщений: 2
По умолчанию

все,тему можно закрывать,мне помогли
nyulkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Линейные списки svt Помощь студентам 1 20.11.2010 08:22
Линейные списки Dead Romantic Помощь студентам 0 30.05.2010 21:35
Линейные списки Rusl92 Паскаль, Turbo Pascal, PascalABC.NET 3 26.04.2010 09:24
Линейные списки ManU Помощь студентам 1 03.11.2008 21:20