Форум программистов, компьютерный форум CyberForum.ru

помогите,пожалка,сделать сортировку - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ заполнение матрицы случайными числами в установленном диапазоне http://www.cyberforum.ru/cpp-beginners/thread12446.html
C++ не могу найти где ошибка я написал эту программу но никак не могу найти где ошибка что не создает файл в конце если не трудно можете посмотрет? заранее все спасибо..... #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv) { int i; http://www.cyberforum.ru/cpp-beginners/thread12326.html
Помогите решить алгоритм C++
:)
C++ Уравнение методом простых итераций
нужно решить уравнение x^3 - sinX = 0, методом простых итераций. Я вроде все правильно сделал, но программа почему то зацикливается:(, в чем может быть проблема? Вот сама прога: #include <stdio.h> #include <math.h> int main(){ float e=0.0001;//Точность float t;//abs |x-y| float x,y; //значение функции
C++ Вычислить сумму ряда http://www.cyberforum.ru/cpp-beginners/thread12244.html
Вычислить сумму ряда для заданного в режиме диалога с ЭВМ |x|<1. Вычисления заканчиваются, когда очередной член ряда становится меньше 0.0001:
C++ Сортировка Двумерного массива Создать двумерный массив. Отсортировать каждую строку по возрастанию. Одномерный смог отсортировать а.двух мерный слабо =( #include<iostream> #include<time.h> using namespace std; void main() { const int row=6,col=6; подробнее

Показать сообщение отдельно
AlexGaudino
0 / 0 / 0
Регистрация: 11.09.2008
Сообщений: 3

помогите,пожалка,сделать сортировку - C++

11.09.2008, 21:45. Просмотров 731. Ответов 0
Метки (Все метки)

помогите,пожалка,сделать сортировку по полю пункта назначения-никак не получается(((
вот листинг main файла:
Код
#include <stdio.h>

struct Marsh {char mbeg[10]; char mend[10]; int number; float distans; Marsh* next;};

struct Mash {char mbeg[10]; char mend[10]; int number; float distans;};


int compare (const void *marsh1, const void *marsh2);
Marsh* Read_file (char* filename);                                                            
Marsh* Add (Marsh* beg, const Marsh &M);
void Print_file (Marsh* beg);
void read (char* filename);
int menu();
/*void Sorting(Marsh* beg);
void Sort(Marsh** beg, Marsh** prev);
void ssort (Marsh* beg);                                                                    
void sord();*/
void get_name(char* name);
void Find(Marsh* beg);
Marsh* Find_name(Marsh* beg, char* name, Marsh** prev);
Marsh* Remove(Marsh* beg);
Marsh Enter();


int main(){
    Marsh* beg = Read_file ("info.txt");
    if (!beg) return 1;

    while (true){
        switch (menu()){
        case 1: Print_file (beg); break;
        /*case 2: Sorting (beg); break;*/
        case 3: beg = Remove(beg); break;
        case 4: return 0;
        default: puts(" Please Enter a Number between 1 and 2"); break;
        }
    }

    return 0;
}
а вот подключаемого модуля:
Код
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct Marsh {char mbeg[10]; char mend[10]; int number; float distans; Marsh* next;};
const int l_name = 28;
//int n_rec = 0;
//struct Mash {char mbeg[10]; char mend[10]; int number; float distans;};


int compare (const void *marsh1, const void *marsh2);
Marsh* Read_file (char* filename);                                                        
Marsh* Add (Marsh* beg, const Marsh &M);
void Print_file (Marsh* beg);
void read (char* filename);
int menu();
/*void Sorting(Marsh* beg);
void Sort(Marsh** beg, Marsh** prev);
void ssort (Marsh* beg);                                                                
void sord();*/
void get_name(char* name);
void Find(Marsh* beg);
Marsh* Find_name(Marsh* beg, char* name, Marsh** prev);
Marsh* Remove(Marsh* beg);
Marsh Enter();                                                                        


Marsh* Read_file (char* filename){
    FILE* F;
    Marsh M,*beg = 0;

    if ((F = fopen(filename, "r")) == 0){
        printf ("File does not exist %s\n", filename);
        return 0;
    }

    while (!feof(F)){
        fgets (M.mbeg, 10, F);
        fgets (M.mend, 10, F);
        fscanf (F, "%i%f\n", &M.number, &M.distans);
         beg = Add (beg, M);
    }
    fclose (F);
    return beg;
}


Marsh* Add (Marsh* beg, const Marsh& M){
    Marsh* sp = new Marsh;
    *sp = M;
    sp->next = 0;
    
    if (beg){
        Marsh* temp = beg;
        while (temp->next)
            temp = temp->next;
        temp->next = sp;
    }
    else
        beg = sp;
    return beg;
}


void Print_file (Marsh* beg){
    Marsh* sp = beg;
    puts("===================================================================");
    puts("===================================================================");
    puts(" NameBeg I NameEnd I           I NumberMarsh I      I Distans (km)I");
    puts("===================================================================");
    while (sp){
        n_rec++;
        printf("%s%10s%20i%25.1f%s\n", sp->mbeg, sp->mend, sp->number, sp->distans, " km");
        sp = sp->next;
    }
    puts("===================================================================");                                        
    
    /*read ("info.txt");*/
}


int menu(){
    char buf[10];
    int option;

    do {
        puts("===================================================================");
        puts("1 - Display Information\n");
        puts("2 - Sorting...\n");
        puts("3 - Remove Entry\n");
        puts("4 - Exit\n");
        gets(buf);
        option = atoi(buf);
    }

    while (!option);
    return option;
}
/*
void Sorting(Marsh* beg){
    char buf[l_name];
    int option;

    do {
        puts("\n1 - Sort\n2 - ssort\n3 - sord\n\n4 - Back\n");
        gets(buf);
    }
    while (!(option = atoi(buf)));

    
    switch (option) {
    
    case 1: Marsh *prev;
            Sort(&beg, &prev);
            break;

    case 2: ssort(beg); break;

    case 3: sord(); break;

    case 4: return;

    default: puts ("Error\n");
    }
}

void Sort(Marsh** beg, Marsh** prev){
    Marsh* sp = new Marsh;
    sp = *beg;
    *prev = 0;
    //char name[10] = sp->mbeg;

    for (int i = 0; i < n_rec - 1; i++){

    Marsh* pt = *beg;
    while (pt){

        if (sp->mbeg < pt->mbeg){
            sp->next = pt;

            if (pt == *beg)
                *beg = sp; 
            else //{pt->next = sp; sp->next = pt->next; }        
                (*prev)->next = sp;

            *prev = sp;
            return;            
        }
            *prev = pt;
            pt = pt->next; 
    }
    sp->next = 0; 
    
    sp = sp->next;}

    sp = *beg;
    puts("===================================================================");
    puts("===================================================================");
    puts(" NameBeg I NameEnd I           I NumberMarsh I      I Distans (km)I");
    puts("===================================================================");
    while (sp){
        printf("%s%10s%20i%25.1f%s\n", sp->mbeg, sp->mend, sp->number, sp->distans, " km");
        sp = sp->next; 
    }
    puts("===================================================================");
}                                                                                                                

int ii = 0;
void ssort (Marsh* sp){
    Marsh* beg = sp;
    Marsh* pt = sp;
    while(sp){
        //Marsh* min = new Marsh;
        //min = sp;
        Marsh* min = sp;
        ii++;
        pt = beg;

        for (int i = 0; i < ii; i++) pt = pt->next;

        while(pt){
            if (pt->mbeg < min->mbeg) min = pt;

        Marsh* buf = sp;
        sp = min;
        min = buf;

        pt = pt->next;
        }
        sp = sp->next;
    }

    sp = beg;
    puts("===================================================================");
    puts("===================================================================");
    puts(" NameBeg I NameEnd I           I NumberMarsh I      I Distans (km)I");
    puts("===================================================================");
    while (sp){
        printf("%s%10s%20i%25.1f%s\n", sp->mbeg, sp->mend, sp->number, sp->distans, " km");
        sp = sp->next;
    }
    puts("===================================================================");
}

Mash *marsh = new Mash [n_rec];
int i = 0;
void read (char* filename){
    FILE* F;
    
    if ((F = fopen(filename, "r")) == 0){
        printf ("File does not exist %s\n", filename);
    }

    while (!feof(F)){
        fgets (marsh[i].mbeg, 10, F);
        fgets (marsh[i].mend, 10, F);
        fscanf (F, "%i%f\n", marsh[i].number, marsh[i].distans);
         i++;
    }
    fclose (F);
}

void sord(){

    qsort(marsh, n_rec, sizeof(Mash), compare);

    puts("===================================================================");
    puts("===================================================================");
    puts(" NameBeg I NameEnd I           I NumberMarsh I      I Distans (km)I");
    puts("===================================================================");
    for (i = 0; i < n_rec; i++){
        printf("%s%10s%20i%25.1f%s\n", marsh[i].mbeg, marsh[i].mend, marsh[i].number, marsh[i].distans, " km");
    }
    puts("===================================================================");
}

int compare(const void *marsh1, const void *marsh2){
        return strcmp(((Mash *) marsh1)->mbeg, ((Mash *) marsh2)->mbeg);
    }
*/
void get_name (char* name){
    puts ("Please Enter Name of Marsh");
    gets(name);
}

void Find(Marsh* beg){
    char buf[l_name];
    int option;

    do {
        puts("1 - Search by Name\n\n2 - Exit");
        gets(buf);
    }
    while (!(option = atoi(buf)));

    switch (option) {

    case 1: get_name(buf);
        Marsh *prev;
        Marsh *sp = Find_name (beg, buf, &prev);
        break;

    //case 2: return;

    //default:
        //puts("Error\n");
    }
}

Marsh* Find_name(Marsh* sp, char* name, Marsh** prev){
    *prev = 0;
    while(sp){
        if (strstr(sp->mbeg, name))
            if (sp->mbeg[strlen(name)] == ' '){
                printf("%s%10s%20i%25.1f%s\n", sp->mbeg, sp->mend, sp->number, sp->distans, " km");
                return sp;
            }
    *prev = sp;
    sp = sp->next;
    }
    puts("This name doesn't exist");
    return 0;
}

Marsh* Remove(Marsh* beg){
    char name [l_name];
    get_name (name);
    Marsh* prev;
    Marsh* sp = Find_name (beg, name, &prev);
    if (sp) {
        if (sp == beg)
            beg = beg->next;
        else
            prev->next = sp->next;
        delete sp;
    }
    return beg;
}

Marsh Enter() {
    Marsh M; char buf[50];
    
    get_name();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru