Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Задача на С

Featured Replies

Трябва да направя код със следните изисквания


 

Цитат

Да се разработи програма тип „меню” за поддържане на информация за
автопарк със следните изисквания:
1. Данните се съхраняват в двоични файлове. За всеки автомобил се пазят
следните данни:
• Код - уникално положително цяло число, по-голямо от 0
• Марка - символен низ (до 50 символа) само от главни букви
• Година на производство - цяло число, по-голямо от 1900 и по-малко
или равно на текущата година (въвежда се от потребителя)
• Мощност в конски сили - цяло число
• Цена - реално число, по-голямо от 0
• Наличност - цяло число, по-голямо или равно на 0

2. Да се извършват следните обработки:
а) Добавяне на нов автомобил. Прави се проверка за уникалност на
въведения код.
б) Променяне на данните за избрана марка коли. Ако наличността стане
равна на 0, колата да се изключи от списъка.
в) Извеждане данните за всички коли, подредени в ред на увеличаване на
тяхната цена.
г) Извеждане на данните за всички коли, произведени след избрана от
потребителя година.

3. Данните да се поддържат в динамична структура - едносвързан списък в
оперативната памет на компютъра.

направил съм typedef struct-урата  и функцията за изтриване на кола,но не съм сигурен дали е така,ако може да ми помогнете с курсовата,защото проблема ми е че разбирам до някъде(мога г/д да разчитам,но не знам реда на писане на програмата как се нарежда всичко) ,ако има някой който да помогне бих бил благодарен :)

преди 11 часа, tterziew написа:

 

Трябва да направя код със следните изисквания

 


 

направил съм typedef struct-урата  и функцията за изтриване на кола,но не съм сигурен дали е така,ако може да ми помогнете с курсовата,защото проблема ми е че разбирам до някъде(мога г/д да разчитам,но не знам реда на писане на програмата как се нарежда всичко) ,ако има някой който да помогне бих бил благодарен :)

Туй дето си го направил е все едно да си намерил копче и да търсиш някой да ти зашие един балтон за него.

Айде, почнаха курсовите работи...
Мързи те да пишеш ли, какво? Покажи, че нещо си се опитал да направиш! Ако нищо не си направил - на полето да береш картофи!

  • Автор

Съжалява,че не можех да отговоря,но лаптопа ми не беше в мен
ето това е текста до където съм стигнал
 

Цитат

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>

typedef struct {
    int kod;
    char marka[51];
    int god;
    int mosht;
    int cena;
} Kola;

typedef struct node {
    Kola s;
    struct node *next;
}node;

node * danpocena(node *Kola, FILE *c)
{
    node *kraicen, *crnt, *prev;
    node *danpocena(node *Kola, FILE *c);
    {
        do{
            kraicen = (node *)malloc(sizeof(node)); // if p==0
            kraicen->next = NULL;
            if (!fread(&(kraicen->s), sizeof(Kola), 1, c)){
                free(kraicen);
                break;
            }
            for (prev = NULL, crnt = Kola;
                crnt && (crnt->s.cena > kraicen->s.cena);
                prev = crnt, crnt = crnt->next);

            if (prev)prev->next = kraicen;
            else Kola = kraicen;
            kraicen->next = crnt;

        } while (1);
        return kraicen;
    }
}
               
    struct node *deleteKola(struct node *Kola, int kod)
    {
        struct node *tmp = Kola;
        struct node *del = NULL;
        if (Kola->s.kod == kod)
        {
            Kola = Kola->next;
            free(Kola);
        }
        else
        {
            for (tmp = Kola; tmp; tmp = tmp->next)
            {
                del = tmp->next;
                if ((del->s.kod) && (del->s.kod) == kod)
                {
                    tmp->next = del->next;
                    free(del);
                    return Kola;
                }
            }
        }
        return Kola;
    }

 

на 13.05.2017 г. в 13:24, simtech написа:

Айде, почнаха курсовите работи...
Мързи те да пишеш ли, какво? Покажи, че нещо си се опитал да направиш! Ако нищо не си направил - на полето да береш картофи!

ами не не ме мързи просто не го разбирам много ,да кажем че предподавателят ми 1-вия семестър не обясняваше а само пишеше и като му зададеш въпрос не отговаря и ми се губят някои знания,затова :) ако е против правилата да питам за помощ ще изтрия поста :)

  • 2 седмици по-късно...
  • Автор

написах уж кода но ми излиза много гадна грешка

Цитат

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<ctype.h>

 


typedef struct kola
{
    char ID[16];
    char names[70];
    int nalichnost;
    int mosht;
    char date[11];
    int cena;
} marka_t;

typedef struct Node
{
    marka_t kolaData;
    struct Node *next;
} node;

marka_t initKola(node *head);
void printNode(node *head);
void addNode(node* head, marka_t kolaData, int mode);
void deleteNode(node** head);
char* getFileName();
void loadFile(node** head);
void saveFile(node** head);
int getID(node* head, char* ID, int mode);
int isUnique(node* head, char* ID);
void getNames(char *names);
int getDate(char* date);
int countList(node *head);
void deleteKola(node **head);
void getCena(int *cena);
void getMosht(int *mosht);
char menu();
void getNalichnost(int *nalichnost);

int main()
{
    node *head;
    while (1)  {
        system("cls");
        switch (menu())
        {
        case '1': loadFile(&head);
            break;
        case '2': saveFile(&head);
            break;
        case '3': addNode(&head, initKola(head), 1);
            break;
        case '4': printNode(head);
            break;
        case '5': deleteKola(&head);
            break;
        default:
            deleteNode(&head);
            return 0;
        }
        system("pause");
    }
}

char menu()
{
    char i;

    printf("1. Load file\n");
    printf("2. Save file\n");
    printf("3. Add cars\n");
    printf("4. Print all cars\n");
    printf("5. Pick a model car\n");
    printf("6. Delete car\n");
    printf("Ctrl + C to EXIT\n");

    do
    {
        printf("Select: ");
        fflush(stdin);
        scanf("%c", &i);
    } while (i < '0' || i > '6');

    return i;
}

void printKola(marka_t kolaData)
{
    printf("ID: %s\n", kolaData.ID);
    printf("Names: %s\n", kolaData.names);
    printf("Date of made: %s\n", kolaData.date);
    printf("mosht: %d\n", kolaData.mosht);
    printf("Cena: %d\n", kolaData.cena);
    printf("nalichnost: %d\n", kolaData.nalichnost);
}

void addNode(node** head, marka_t kolaData, int mode)
{
    node* temp = (node*)malloc(sizeof(node));
    node* temp2 = *head;
    temp->kolaData = kolaData;
    temp->next = NULL;

    if (!(*head))  {
        *head = temp;
        if (mode == 1)  {
            printf("First car added successfully!\n");
        }
        return;
    }

    while (temp2->next)  {
        temp2 = temp2->next;
    }

    temp2->next = temp;
    if (mode == 1)
        printf("New car added successfully!\n");
}

void deleteNode(node** head)
{
    node* temp;

    while (*head)  {
        temp = *head;
        *head = (*head)->next;
        free(temp);
    }
}

char* getFileName()
{
    char *fileName = (char*)malloc(50 * sizeof(char));

    printf("\nEnter file name: ");
    fflush(stdin);
    gets(fileName);

    if (!strchr(fileName, '.'))  {
        strcat(fileName, ".bin");
    }

    return fileName;
}

void loadFile(node** head)
{
    FILE* fp;
    marka_t data;
    char *fileName;

    fileName = getFileName();

    if (!(fp = fopen(fileName, "rb")))  {
        fprintf(stderr, "Error loading file!\a\n");
        free(fileName);
        return;
    }

    if (*head)
        deleteNode(head);

    while (1)  {
        if (!fread(&data, sizeof(data), 1, fp))
            break;

        addNode(head, data, 2);
    }

    fclose(fp);

    if (!(*head))
        printf("No data loaded from \"%s\"\n", fileName);
    else
        printf("Info loaded successfully from \"%s\"\n", fileName);

    free(fileName);
}

void saveFile(node* head)
{
    FILE* fp;
    char *fileName;

    if (!head)  {
        printf("List is empty!\n");
        printf("Add some new cars first!\n");
        return;
    }

    fileName = getFileName();

    if (!(fp = fopen(fileName, "wb")))  {
        exit(1);
    }

    while (head)  {
        if (fwrite(&head->kolaData, sizeof(marka_t), 1, fp) != 1){
            printf("Error occured while writing on file\n");
            exit(1);
        }
        head = head->next;
    }

    fclose(fp);

    printf("Info saved successfully to \"%s\"\n", fileName);
    free(fileName);
}

marka_t initKola(node *head)
{
    marka_t data;
    

    while (!(getID(head, data.ID, 1)));
    getNames(data.names);
    getMosht(&data.mosht);
    while (!getDate(data.date));
    getNalichnost(&data.nalichnost);
    getCena(&data.cena);
    
    return data;

}
int getID(node* head, char* ID, int mode)
{
    unsigned i, len;

    printf("Enter unicode(letter and digits - 4 - 15 chars): ");
    fflush(stdin);
    gets(ID);

    if (strlen(ID) < 4 || strlen(ID) > 15)  {
        printf("Unicode must be 4 - 15 characters!\n\n");
        return 0;
    }
    if (!isalpha(ID[0]))  {
        printf("Unicode must start with a letter!\n\n");
        return 0;
    }

    len = strlen(ID);
    for (i = 1; i < len; i++)
    {
        if (!isdigit(ID))  {
            printf("Unicode must contain a letter and DIGITS!\n\n");
            return 0;
        }
    }
    if (mode == 1)  {
        if (!isUnique(head, ID))  {
            printf("Unicode already exist!\n\n");
            return 0;
        }
    }
    if (mode == 2)  {
        if (!isUnique(head, ID))  {
            return 1;
        }
    }
    return 1;
}

int isUnique(node* head, char* ID)
{
    while (head)  {
        if (!strcmp(head->kolaData.ID, ID))
            return 0;
        head = head->next;
    }
    return 1;
}

void getNames(char *names)
{
    char markaName[20], modelName[20];

    do
    {
        printf("Enter name: ");
        fflush(stdin);
        gets(markaName);
    } while (!(strlen(markaName)));

    do
    {
        printf("Enter model's name: ");
        fflush(stdin);
        gets(modelName);
    } while (!(strlen(modelName)));


    sprintf(names, "%s %s ", markaName, modelName);
}

void getNalichnost(int *nalichnost)
{
    do
    {
        printf("Enter gender. \"0\" for no in stock, \"1\" for in stock: ");
        scanf("%d", nalichnost);
    } while (*nalichnost < 0 || *nalichnost > 1);
}

int getDate(char* date)
{
    int year, month, day;

    printf("\nEnter year of madex: ");
    scanf("%u", &year);
    printf("Enter month: ");
    scanf("%u", &month);
    printf("Enter day: ");
    scanf("%u", &day);

    sprintf(date, "%.2u/%.2u/%u", day, month, year);

    return 1;
}

void getMosht(char *mosht)
{
    do
    {
        printf("Enter horse power: ");
        fflush(stdin);
        gets(mosht);
    } while (!strlen(mosht));
}


int countList(node *head)
{
    int n = 1;

    while (1)  {
        if (head->next != NULL)  {
            n++;
            head = head->next;
        }
        else break;
    }
    return n;
}

void deleteKola(node **head)
{
    node *temp = *head;
    char searchID[16];
    int poss = 1;
    char c;

    if (!(*head))  {
        printf("Empty list!\n");
        return;
    }
    while (1)  {
        printf("Enter ID to delete a Car: ");
        if (getID(*head, searchID, 2))   {
            break;
        }
    }
    if (isUnique(*head, searchID))   {
        printf("Not found!\n");
        return;
    }
    while (temp)   {
        if (!(strcmp(temp->kolaData.ID, searchID)))   {
            printKola(temp->kolaData);
            printf("\nDo you want to delete this car<Y/N>: ");
            while (1)   {
                fflush(stdin);
                c = toupper(getchar());
                if (c == 'N')
                    return;
                if (c == 'Y')
                    break;
                printf("Select <Y/N>: ");
            }
            printf("Car deleted!\n");
            return;
        }
        else   {
            temp = temp->next;
            ++poss;
        }
    }
}

void printNode(node *head)
{
    int i = 0;

    if (!head)   {
        printf("List is empty!\n");
        return;
    }

    while (head)   {
        printf("Car %d\n", ++i);
        printKola(head->kolaData);
        head = head->next;
    }
}

 

Error    1    error C4703: potentially uninitialized local pointer variable 'head' used   
за този ред
case '3': addNode(&head, initKola(head), 1);

бихте ли ми казали къде греша и дали е добре направено

 

Ми от майкорософтски компилатор не очаквай смислени обяснения на грешката. В Dev-C++ грешката е използване на несъвместими типове указатели. В декларацията ти е даден първия параметър като указател към node, а го ползваш като указател към указател към node 

 void addNode(node* head, marka_t kolaData, int mode);
 

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.