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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2012, 10:49   #1
илья93
Новичок
Джуниор
 
Регистрация: 11.06.2012
Сообщений: 1
Сообщение сортировка и поиск

Здравствуйте! курсовая по информатике "Сортировки и поиск", задание - "составить программу с использованием процедур и функций для сортировки таблицы заданным методом и двоичного поиска по ключу в таблице".
Метод сортировки - метод пузырька
Структура таблицы - "тип ключа=строковый, длина ключа в байтах=5, хранение данных и ключей=отдельно , число элементов таблиц=8-12"

Помогите пожалуйста в программировании я ламер((
есть код аналогичной программы но тип ключа=целый и хранение вместе(вроде) не могу исправить

вот код:
#include<stdio.h>
#include<string.h>
#define MAXSTRING 100
#define MAXELEM 100
#define SIZE 2
typedef struct ln{
int key;
char str[MAXSTRING];
int size;
}line;


//------------------------------file read
void readf(FILE *fl,line **st){
int a=1;
while ( fscanf(fl,"%d",&st[st[a]->size]->key)!=EOF ){
fscanf(fl,"%d",&st[st[a]->size]->key);
fgets(st[st[a]->size]->str,MAXSTRING,fl);
st[a]->size++;
}
st[a]->size--;
// for(a=0;a<=size;++a)
// {
// printf("%i\n",st[a].key);
// }
}

//------------------------------bubble sort
void ssort(line **st){
int l=0,a=1,r,k,i,j;
int temp;
char stemp[MAXSTRING];
r=st[a]->size;
while(l<r)
{
//printf("%i %i\n",l,r);
for( j = 0; j<r; j++ ){
//printf("%i\n",j);
if(st[j]->key>st[j+1]->key)
{
temp=st[j]->key;
strcpy(stemp,st[j]->str);
st[j]->key=st[j+1]->key;
strcpy(st[j]->str,st[j+1]->str);
st[j+1]->key=temp;
strcpy(st[j+1]->str,stemp);
}
}
--r;
}
}

//------------------------------binary search
void bsearch (line **st){
int m,a=1;
int left=0,right=st[a]->size;

int key;

printf("Enter key: ");
scanf("%i",&key);
for(;{
m=(left+right)/2;
if (key<st[m]->key) right=m - 1;
else if ( key>st[m]->key) left=m + 1;
else {printf("Key is found:\n%i\t%s\n",st[m]->key,st[m]->str);return;}
if ( left > right ){printf("Key not found\n"); return;}
}
}

//------------------------------unsorted print(вывод сод-го файла на экран)
void unsprint(FILE *fl,line **st){
int a=0;
int i=1;
char c[MAXSTRING];
//float k;
printf("Key Element\n");
fseek(fl,0,SEEK_SET);
while ( a <= st[i]->size ){
//fscanf(fl,"%f",&k);
fgets(c,MAXSTRING,fl);
printf("%s\n",c);
a++;
}
}

//------------------------------file print(печать после действия - сортировка или рассеивание)
void sprint(line **st){
int i,a=1;
if ( st[a]->size > 0 ){
printf("Key\t\tElement\n");
for(i=0;i<=st[a]->size;i++)printf("%i\t%s\n",st[i]->key,st[i]->str);
}
else{printf("Struct is empty\n");return;}
}

//-----------------рассеивание (перераспределяет строки)
void revers(line **st){
int l=0,a=1,r,k,i,j;
int temp;
char stemp[MAXSTRING];
r=st[a]->size;
while(l<r)
{
int i;
for(i=0; i<=r/2-1; i++){
temp=st[i]->key;
strcpy(stemp,st[i]->str);
st[i]->key=st[r-1-i]->key;
strcpy(st[i]->str,st[r-1-i]->str);
st[r-1-i]->key=temp;
strcpy(st[r-1-i]->str,stemp);
}
--r;
}
}

//------------------------------menu
int menu(){
int m;
printf("Program menu:\n");
printf("1 - Sort\n");
printf("2 - Unsort\n");
printf("3 - Line search\n");
printf("4 - Print file\n");
printf("5 - Print result\n");
printf("6 - Exit\n");
printf("\nEnter action: ");
scanf("%d",&m);
return m;
}

//=================================== ====main
int main(int argc,char *argv[]){
char *fn;
FILE *f;
int i;
int m;
int z=0;
line st[MAXELEM],*stadr[MAXELEM];
for(i = 0;i < MAXELEM; ++i)stadr[i] = &st[i];

//if ( argc < 2 ) {printf("Invalid arguments\n"); return 1;} else
fn=argv[1];
if( (f=fopen("test.txt","r")) == NULL ) {printf("File doesn't exists\n"); return 1;}

readf(f,stadr);
while(1)
{
m=menu();
switch(m){

case 1:{ssort(stadr);z=1;break;}

case 2:{revers(stadr);z=1;break;}

case 3:{if ( z )bsearch(stadr);else printf("You should sort first\n");break;}

case 4:{unsprint(f,stadr);break;}

case 5:{if ( z ) sprint(stadr);else printf("You should sort first\n");break;}

case 6:{fclose(f);return 0;}


default:{printf("\nInvalide menu action\n");break;}
}}
}
илья93 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка и поиск в GridView Lesa1988 ASP.NET 1 13.09.2011 12:43
поиск и сортировка sashunechka Помощь студентам 3 18.05.2011 21:36
сортировка и поиск Barcc Помощь студентам 3 10.06.2010 15:48
Поиск и сортировка sssdog Microsoft Office Excel 2 10.07.2009 13:27
Поиск и сортировка junkie Паскаль, Turbo Pascal, PascalABC.NET 3 01.06.2009 17:17