Премини към съдържанието

denisov_slav

Потребител
  • Публикации

    39
  • Регистрация

  • Последно онлайн

Харесвания

4 Неутрална репутация

1 Последовател

Всичко за denisov_slav

  • Титла
    Потребител

Последни посетители

687 прегледа на профила
  1. Здравейте колеги, имам като задание да имплементирам "bash shell" ( език : С ), естествено, не в пълния си вид, а да може да изпълнява някои команди, като ( pwd, ls, echo, cat, rm, cd, etc. ). Седнах и направих план как да напиша програмата, и мисля че съм стигнал до някъде, баш шела работи, но странно защо, въведените команди веднъж се изпълняват веднъж не ( излиза съобщение : "command not found" ). Долу ще видите кода, моля за съвети как да процедирам. П.С. ще прикача снимка за да имате представа за какво говоря. #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <sys/wait.h> #include <time.h> #include <signal.h> #include "functions.h" #define SIZE 128 int main(int argc, char **argv) { // call shell shell_loop(); return 0; } /** * gets user input */ char *read_line(void) { char *line = NULL; size_t len = 0; // save user's input in a character array getline(&line, &len, stdin); return line; } /** * splits user input into tokens */ char **split(char *line) { int pos = 0; char **tokens = malloc(SIZE * sizeof(char *)); char *curr; curr = strtok(line, " "); while (curr != NULL) { tokens[pos] = curr; // save current word into 'tokens' pos++; // update position curr = strtok(NULL, " "); // get next word } return tokens; } /** * remove trailing '\n' */ void trim(char *s) { int len = strlen(s); // get size of string // remove newline character if (s[len - 1] == '\n') { s[len - 1] = '\0'; } } /** * gets local date and time in a specified format * and saves it into a character array */ void *getLocalDateTime(char (*myTime)[SIZE]) { time_t t; struct tm *tmp; time(&t); tmp = localtime(&t); // get local date/time // saved it in passed char array // by formatting it in a specific way strftime(*myTime, sizeof(*myTime), "[%d/%m %H:%M]", tmp); return 0; } int execute(char **args){ // if no command was entered if(args[0] == NULL){ return 1; } // if "cd" is encountered else if(strcmp(args[0], "cd") == 0 ){ return builtin_cd(args); } // else use execvp() return launch_args(args); } int launch_args(char **arguments) { pid_t pid; int status; // create a new process pid = fork(); // if child = true if (pid == 0) { // execute command if (execvp(arguments[0], arguments) == -1) { printf("shell: command not found: %s\n", arguments[0]); } exit(EXIT_FAILURE); } else if (pid < 0) { perror("forking failed"); } //TODO: else { // parent process waits for child to complete wait(&status); } return 1; } int builtin_cd(char **args) { if (args[1] == NULL) { // change directory to home directory char *home = getenv("PATH"); strcat(home, "/"); chdir(home); } else { if (chdir(args[1]) != 0) { perror("shell: directory not found"); } } return 1; } void shell_loop(void) { char *line; char **arguments; int status; char myTime[SIZE]; do { getLocalDateTime(&myTime); // get local date and time printf("%s # ", myTime); // print prompt line = read_line(); // get user input trim(line); // remove newline character arguments = split(line); // split input into tokens status = execute(arguments); // call appropriate function // cleanup free(line); free(arguments); } while (status); }
  2. Да, работи вече! Благодаря за което!
  3. Здравейте съфорумци, имам един проблем, който не мога да реша, от 2-3 дена не мога да си вляза в акаунта, използвайки Тапаталк, от сафари проблем няма обаче... Ако някой може да помогне, ще бъда благодарен.
  4. denisov_slav

    Задача на С

    Това е едно от правилата на зададения въпрос, по който се ориентирам как да процедирам, иначе да, и това което си написал е решение, но не покрива изискванията на зададеният ми въпрос, но мога да използвам предоставената информация и само да модифицирам леко. Sent from my iPhone using Tapatalk Pro
  5. denisov_slav

    Задача на С

    Това е добро предложение, но първо ще ми трябва да проверя дъската за валидни ходове, спрямо правилата, за момента това трябва да направя, а иначе имам масив, който записва въведените стойности за дадена позиция. Sent from my iPhone using Tapatalk Pro
  6. denisov_slav

    Задача на С

    Като гледам, освен с "if" друг избор нямам, ще разгледам обстойно всичко което си ми предоставил като материал, и ще намеря нещо, което да ми помогне да си завърша кода! Благодаря за помощта.
  7. denisov_slav

    Задача на С

    В момента уча, и от училището ни дават такива домашни, и не, не си търся решена задачата, а малко помощ с алгоритма за намиране на позиции, помислих за " if statements", след мислене и пробване, то ще трябва да има сумати такива 60+ най-малко за да се провери всяка позиция, помислих за двойна " for loop", ама ще излезе от границите 8х8..., опитвам се да намеря по-умно решение на проблема..., ако някой изяви желание да помогне, нека заповяда!
  8. denisov_slav

    Задача на С

    Помолих за помощ, защото вече търсих в интернет, и или се обърквам още повече, или не разбирам за какво става въпрос, линковете, които си дал, са С# и някой друг език, но не и С, и да, може и да кажеш, че няма да е трудно да се досетя по пътя на логиката, но съм начинаещ, и доста неща не са ми ясни, въпроса ми беше свързан с това как да намеря възможните позиции на дъската, според правилата.
  9. Здравейте съфорумци, имам като задание да имплементирам някои аспекти на играта 'Реверси'. Аспектите са: Първи почва човека, който играе с черните. Играта трябва да му покаже възможните позиции на дъската (според правилата) и той да си избере. Но, това му е трудното, дъската е 8х8. Трябва да се търси възможна позиция (според правилата) и трябва да няма друга фигура на това място. Ще трябва да търся по диагонал, хоризонтал и вертикал, и в двете посоки ендовременно, напред и назад, според зависи на противника фигурата къде е, и малко се замотах. Моля за помощ, искам съвети как да процедирам. Всичко на всичко: 1. Искам да знам как ще е най-добре да подходя, дали с двойна 'for loop' или по някакъв друг начин. 2. Трябва да извеждам възможните позиции на дъската на екрана за да може играчът да си избере позиция. 3. Играчите трябва да си сменят реда, т.е., първият е с черните фигури, после с белите, и така, например, в най-лошия случай до 64 хода, иначе докато някой не може да направи повече ходове. Тука малко се затруднявам. Ще прикача снимка на правилата:
  10. denisov_slav

    С задача!

    Прав си, не се бях сетил за това, току що го пробвах и работи! Благодаря!
  11. denisov_slav

    С задача!

    Благодаря много @ined, досега не бях виждал този начин на решаване на проблема, което е един + за мен. Имам един въпрос, какво прави " *t = 0" ? Другата част от кода я разбирам, освен това. @Реджеп Иведик, ако използвам 'length' вместо 'length-1' се получаваше това: + 2, 3 произволни елемента всеки път, незнайно защо. И не можах да открия къде съм сбъркал.
  12. Напишете С програма, която демонстрира копирането на масив чрез използването на пойнтер нотация. Новият масив не трябва да съдържа гласни букви също така всички елементи трябва да се превърнат в главни букви. До тук добре, почнах да копирам, но нещо накрая все ми 1 елемент по-малко, не знам защо... Превърнах буквите в главни.. това беше лесната част. И тука идва трудната, да премахна гласните чрез използване на пойнтер нотация, което не съм сигурен на 100% дали ми работи, стигам до някъде.. но после все нещо куца, ще прикача кода и снимка на това какво ми излиза. #include <stdio.h> #include <ctype.h> #include <string.h> void convertToUpper(char *capitalise); void deleteConsonants(char *consonants); int main(void) { char slogan[] = "Comp10120 is my favourite module"; char string[100]; int length = strlen(slogan); // converting every element of the char array into uppercase convertToUpper(slogan); char *copySlogan = slogan; char *copyString = string; for(int i = 0; i < length-1; i++) { *(copyString + i) = *(copySlogan + i); } deleteConsonants(slogan); printf("Копиране: \n"); printf("%s", string); printf("\n\nПремахване на гласни: "); printf("\n%s", slogan); //printf("%s\n", slogan); //deleteConsonants(slogan); //printf("%s", slogan); } void convertToUpper(char *capitalise) { while(*capitalise != '\0') { *capitalise = toupper(*capitalise); capitalise++; } } void deleteConsonants(char *consonants) { while(*consonants != '\0') { for(int i = 0; i < strlen(consonants); i++) { if(*consonants == 'E' || *consonants == 'A' || *consonants == 'I' || *consonants == 'O' || *consonants == 'U' || *consonants == 'e' || *consonants == 'a' || *consonants == 'i' || *consonants == 'o' || *consonants == 'u') { for(int j = i; j < strlen(consonants); j++) { *consonants = *(consonants +1); } } } consonants++; } } Както ще видите на снимката, капитализацията е 6, при копирането се губи 1 елемент, а при премахването на гласни е доста объркано, и една гласна даже остава 'U'. Ако някой може да ми даде съвет, ще бъда благодарен, благорадя!
  13. Май не ме разбра.. не искам да подписвам договори , просто да си взема някакъв тунер и ако мога да хващам българските канали.. то няма как всички но поне половината..?
  14. Алтернативата няма да стане.. , а може ли да ми кажеш от къде да си купя такъв? и колко програми ще има и какви или които се хващат само? ще има ли хубав сигнал или няма да има смисъл да взимам?
  15. Здравейте .. след 2 месеца заминавам за Германия и се чудех дали има някаква възможност да си взема от тука някакъв тунер за ПС-то и да си гледам българска телевизия "free" както се казва..? и какъв трябва да е той DVB-S/T/C ? ако може да предложите , няма да е зле
  • Разглеждащи това в момента   0 потребители

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

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване