![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Tribunal |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
мне нужно отсортировать массив записей,содержащих наименования алфавитном порядке.
как это сделать в с++ я понятия не имею. подскажите,пожалуйста,как это сделать. буду благодарна за помощь. -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
С:
используем qsort C++: используем std::vector.sort |
Tribunal |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
а если подробно описывать.
в смысле без стандартных вот этих функций:? и кстати как можно в тексте программы сравнить символьную величину с конкретным словом? -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата(Tribunal @ 11.10.2006 15:55) а если подробно описывать. Тогда вот тебе пример... Разбирайся... (сортировка взята из нашего FAQ-а)...в смысле без стандартных вот этих функций:? #include <string.h>
#define n 10
typedef struct tagT {
char title[20];
double price;
} T;
int main() {
int i, j;
T arr[10] = {
{"1234", 10.0},
{"a234", 10.0},
{"u234", 10.0},
{"f234", 10.0},
{"m234", 10.0},
{"gg34", 10.0},
{"er34", 10.0},
{"op34", 10.0},
{"ni34", 10.0},
{"ab34", 10.0}
};
T buffer;
printf("before:\n");
for(i = 0; i < 10; ++i)
printf("%10s (%f)\n", arr[i].title, arr[i].price);
for(i = 0; i < n; ++i)
for(j = n - 1; j >= i; --j) {
if(strcmp(arr[j - 1].title, arr[j].title) > 0) {
memmove(&buffer, &arr[j - 1], sizeof(T));
memmove(&arr[j - 1], &arr[j], sizeof(T));
memmove(&arr[j], &buffer, sizeof(T));
}
}
printf("after:\n");
for(i = 0; i < 10; ++i)
printf("%10s (%f)\n", arr[i].title, arr[i].price);
return 0;
}
Цитата(Tribunal @ 11.10.2006 15:55) и кстати как можно в тексте программы сравнить символьную величину с конкретным словом? Смотри выше (функция strcmp из string.h... Я надеюсь, переписывать функции сравнения строк ты не будешь? ![]() |
Tribunal |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
вот то,что у меня получилось.
компилируется,но выдает ошибку приложения. не подскажете,в чем может быть проблема? #include <iostream.h>
#include <fstream.h>
#include <string.h>
int main()
{
ofstream fout("output.txt");
typedef struct tagT
{
char descr_goods [20]; //наименование товара
char name_shop [20]; //название магазина
int good_value; //стоимость товара
} T;
int n=3; //кол-во записей
T list [n];
//вводим данные
cout << "name goods - name shop - good value" << endl;
for (int i=0;i<n;i++)
{
cout << "Memo " <<i+1 << endl;
cin >> list[i].descr_goods;
cin >> list[i].name_shop;
cin >> list[i].good_value;
fout << list[i].descr_goods << " - " << list[i].name_shop << " - " << list[i].good_value << "rub" << endl;
};
//сортируем по названиям магазинов
T buf;
for (int i=0;i<n;i++)
for (int j=n-1;j>=i;j--)
{
if (strcmp(list[j-1].name_shop,list[j].name_shop)>0)
{
memmove (&buf, &list[j-1], sizeof(T));
memmove (&list[j-1],&list[j], sizeof(T));
memmove (&list[j], &buf, sizeof(T));
};
};
//запрос на ассортимент в магазине
char rep [3];
char name [20];
cout << "Vivesti info o tovarax magazinov?";cin >> rep;
if (strcmp(rep,"yes")==0)
{
cout << "Vvedite nazvanie magazina:";cin >> name;
int k=0;
for (int i=0;i<n;i++)
if (strcmp(list[i].name_shop,name)==0)
{
cout << list[i].descr_goods << " - " <<list[i].good_value<< "rub" << endl;
k++;
};
if (k==0) cout << "Takogo magazina v baze net=(";
}
else cout << "Ok!V sleduyuschiy raz=)";
//записываем в файл изменения
for (int i=0;i<n;i++)
{
fout << list[i].descr_goods << " - " << list[i].name_shop << " - " << list[i].good_value << "rub" << endl;
};
}
-------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Хм... Выход за нижнюю границу массива. Странно, Турбо С не ловит это. Поймал на MinGW... Исправь:
//сортируем по названиям магазинов
T buf;
for (int i=0;i<n;i++)
for (int j=n-1;j>=i+1;j--) // <--- Добавлено +1
ну, или так: //сортируем по названиям магазинов
T buf;
for (int i=0;i<n;i++)
for (int j=n-1;j>i;j--)
Хотя я бы не рекомендовал тебе делать такую солянку из С и С++... Или одно, или другое... |
![]() ![]() |
![]() |
Текстовая версия | 29.07.2025 10:00 |