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

Односвязный линейный список: Для трёх товаров с максимальной ценой уменьшить цену в два раза - C++

Восстановить пароль Регистрация
 
mary-lavina
1 / 1 / 0
Регистрация: 31.12.2009
Сообщений: 9
16.05.2010, 21:50     Односвязный линейный список: Для трёх товаров с максимальной ценой уменьшить цену в два раза #1
Помогите пожалуйста составить алгоритм решения задачи с односвязным линейным списком. Для трёх товаров с максимальной ценой (->price), уменьшить цену в два раза.
Теоретически это должно быть просто, у меня такое чувство, что я просто перемудрила:
Если делать три просмотра, то может оказаться, что одна и таже цена будет уменьшена в 2 раза трижды. Пробовала делать счётчик - тоже бред получается.

Буду благодарна, если вы просто предложите идею...
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2010, 21:50     Односвязный линейный список: Для трёх товаров с максимальной ценой уменьшить цену в два раза
Посмотрите здесь:

Что такое линейный односвязный список? C++
C++ Задать двумерный массив с помощью линейного односвязного списка
Односвязный линейный список C++
Линейный односвязный список C++
C++ Добавление элементов в односвязный линейный список
Попытка реализовать односвязный линейный список C++
Линейный односвязный список C++
Вставка элемента в линейный односвязный список после заданного C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
16.05.2010, 23:26     Односвязный линейный список: Для трёх товаров с максимальной ценой уменьшить цену в два раза #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct GOODS {
    char * name;
    double price;
    struct GOODS *next;
} goods_t;
 
goods_t * new_goods(const char * name, double price, goods_t * last){
    goods_t *g;
    if ( ( g = (goods_t*)malloc(sizeof(goods_t)) ) == NULL )
        return NULL;
    if ( ( g->name = strdup(name) ) == NULL ){
        free(g);
        return NULL;
    }
    g->price = price;
    g->next = NULL;
    if ( last )
        last->next = g;
    return g;
}
 
goods_t * max_price(const goods_t * g){
    double maxPrice;
    const goods_t * maxGoods;
 
    maxPrice = g->price;
    maxGoods = g;
    while ( g = g->next ){
        if ( g->price > maxPrice ){
            maxPrice = g->price;
            maxGoods = g;
        }
    }
    return (goods_t*)maxGoods;
}
 
void print_goods(const goods_t * g){
    printf("Name                Price\n----------------------------------------\n");
    while ( g ){
        printf("%-20s%-6.2f\n", g->name, g->price);
        g = g->next;
    }
    printf("----------------------------------------\n");
}
 
void delete_goods(goods_t * g){
    goods_t *t;
    while ( g ){
        t = g->next;
        free(g->name);
        free(g);
        g = t;
    }
}
 
#define NEED_DISCOUNT 3
 
int main(void){
    char buf[BUFSIZ];
    double price;
    int num;
    goods_t * gHead, * gTail, * gFound;
 
    printf("Number of goods: ");
    if ( scanf("%d%*c", &num) != 1 || num < NEED_DISCOUNT )
        exit(1);
 
    printf("Enter values for %d goods:\n", num);
    gHead = gTail = NULL;
    while ( num-- ){
        printf("\nName: ");
        if ( scanf("%[^\n]", buf) != 1 ){
            delete_goods(gHead);
            exit(1);
        }
        printf("Price: ");
        if ( scanf("%lf%*c", &price) != 1 ){
            delete_goods(gHead);
            exit(1);
        }
        if ( ( gTail = new_goods(buf, price, gTail) ) == NULL ){
            delete_goods(gHead);
            exit(1);
        }
        if ( ! gHead )
            gHead = gTail;
    }
 
    if ( ! gHead )
        exit(1);
 
    printf("\nBefore discount:\n");
    print_goods(gHead);
 
    for ( num = 0; num < NEED_DISCOUNT; ++num ){
        gFound = max_price(gHead);
        gFound->price /= 2.0;
    }
 
    printf("\nAfter discount:\n");
    print_goods(gHead);
 
    delete_goods(gHead);
    exit(0);
}
Yandex
Объявления
16.05.2010, 23:26     Односвязный линейный список: Для трёх товаров с максимальной ценой уменьшить цену в два раза
Ответ Создать тему
Опции темы

Текущее время: 13:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru