Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all 21942 articles
Browse latest View live

Pierwsza aplikacja webowa - Menedżer zadań - ASP.NET Core MVC, Entity Framework Core, Bootstrap

$
0
0

 Witam miłośników nauki programowania .NET i języka C#

Na kanale Jak zostać programista NET pojawił się nowy film  Pierwsza aplikacja webowa - Menedżer zadań - ASP.NET Core MVC, Entity Framework Core, Bootstrap.

 Pokażę Ci w nim krok po kroku - jak utworzyć prostą aplikację webową z wykorzystaniem takich technologii jak ASP.NET Core MVC, Entity Framework Core oraz Bootstrap. To nie będzie tutorial, w którym szczegółowo omówię zagadnienia związane z platformą ASP.NET Core MVC. Chcę Ci raczej przybliżyć podstawowe pojęcia związane z programowanie webowym, pokrótce omówić wzorzec MVC, czyli Model-View-Controller oraz pokazać, w jak prosty i szybki sposób można stworzyć pierwszą w pełni funkcjonalną aplikację webową. Mam nadzieję, że przygotowany przeze mnie materiał łagodnie wprowadzi Cię w świat aplikacji webowych i zachęci do eksplorowania tego zagadnienia.

➡️ Link do filmu poniżej:

https://youtu.be/xcDEYIUFmU4


Jak zainstalować OpenGL dla C++?

$
0
0
Cześć. Chcę zacząć się uczyć OpenGL w C++. Od razu zaznaczam, że szukałem wcześniej na internecie jak zainstalować tą bibliotekę ale nic sensownego nie znalazłem. Skąd mam pobrać pliki? I jak wygląda proces instalacji, to mój pierwszy raz kiedy instaluję bibliotekę i nie wiem totalnie jak to się robi. Jeżeli możecie do podajcie jakieś linki. Dzięki za odpowiedzi.

Praca inżynierska AiR

$
0
0
Witam
Musze wybrac temat pracy lecz latwiejsze juz zeszly tak wiec moze mi ktos powiedziec ktory z tych 2 tematow jest prostrzy oraz o co w nich chodzi (na internecie praktycznie niama informacji )
1. Wybrane elementy obrony urządzeń IoT na brzegu sieci lokalnej

2. Implementacja wybranych algorytmów szyfrowania dla ochrony transmisji danych aktualizujących oprogramowanie robotów przemysłowych

Z góry dzięki za pomoc

Jak to jest z kursami cisco?

$
0
0
W moich technikum działa akademia cisco. Mamy możliwość przerabiania materiałów z ite oraz ccna na netacad. Te kursy są normalnie płatne? Czemu jak próbuję je znaleźć w internecie to zawsze mowa jest o stacjonarnych kursach a o tych online nic. Czy dostaje się jakieś certyfikaty za przerobienie tych materiałów w netacad?

VPN-protokoły VPN, haszowanie i szyfrowanie

$
0
0
Cześć potrzebuje pomocy z tymi zadaniami pomoże ktoś nakierować lub zna odpowiedź?

Jakie trzy rodzaje połączeń VPN obsługuje Windows Server 2016?

Co to są jednokierunkowe funkcje haszujące i gdzie są one używane?

Podaj przykładowe metody szyfrowania.

Z góry dziękuje za pomoc ;D

Rozmiar projektu Visual Studio

$
0
0

Cześć,
od jakiegoś czasu miałem problemy z CodeBlocksem i Devem więc postanowiłem się przenieść na Visual Studio. Pobrałem wersję 2019 commercial, zainstalowałem i wszystko fajnie działało. Dziś musiałem napisać projekt na studia (nic wielkiego, kilka klas) i szczerze powiem to zdziwiłem się i to mocno... Projekt który cały w powiedzmy CodeBlocks zajmował max 8MB, waży aż 330MB w VS. Skompresowany waży 48MB i jakimś cudem jeszcze udało mi się to na moodle zapakować jako załącznik... Zacząłem sprawdzać co tyle może ważyć w folderze i zdziwiłem się chyba jeszcze bardziej jak wcześniej, bo jak sprawdzę we właściwościach to folder główny zajmuje ponad 300MB, gdy sprawdzam pojedyncze pliki w środku to suma ich nie przekracza 5MB( ZDJĘCIE) . Wie ktoś może dlaczego tak jest? Jak można zredukować zajmowane miejsce przez projekty w VS, bo przyznam, że bardzo przyjemnie się w nim pisze i skłaniałbym się, by przy nim pozostać na dłużej.  

Dlaczego nie wykrywa mi AF_PACKET?

$
0
0

Cześć. Piszę program coś typu WireShark z tego poradnika https://www.youtube.com/watch?v=WGJC5vT5YJo&list=PL6gx4Cwl9DGDdduy0IPDDHYnUx66Vc4ed&index=1. Nie wiem dlaczego, ale chociaż zaimportowałem bibliotekę socket i uruchomiłem program z prawami administratora to wyskakuje mi taki błąd: 

Traceback (most recent call last):
  File "sniffer.py", line 27, in <module>
    main()
  File "sniffer.py", line 6, in main
    conn = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(3))
AttributeError: module 'socket' has no attribute 'AF_PACKET'

 

Dlaczego tak się dzieje? Jak to naprawić? Dzięki za odpowiedzi.

import socket
from _struct import *


def main():
	conn = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(3))

	while True:
		raw_data, addr = conn.recvfrom(65536)
		dest_mack, src_mack, eth_proto, data = ethernet_frame(raw_data)
		print("\nEthernet Frame: ")
		print("Destination: {}, Source: {}".format(dest_mack, src_mack, eth_proto))


#Unpack ethernet frame
def ethernet_frame(data):
	dest_mack, src_mack, proto = _struct.Unpack("! 6s 6s H", data[:14])
	return get_mack_addr(dest_mack), get_mack_addr(src_mack), socket.htons(proto), data[14:]


# Return properly formatted MAC address (ie AA:BB:CC:DD:EE:FF)
def get_mack_addr(bytes_addr):
	bytes_str = map("{:02x}".format,bytes_addr)
	return ":".join(bytes_str).upper()


main()

 

Dostęp do bazy danych brak uprawnień [błąd: 1045, 1698] - po imporcie strony na serwer

$
0
0
  GNU nano 2.9.3                                 baza.php                                            

<?php
if(!isset($_SESSION))      
{         
     session_start();      
} 
if(isset($_SESSION['fiszki_login'])&&isset($_SESSION['fiszki_password'])){
$connect = mysqli_connect('localhost',$_SESSION['fiszki_login'],$_SESSION['fiszki_password']);
    if (!$connect){
    unset($_SESSION['fiszki_login']);
    unset($_SESSION['fiszki_password']);
    header('location: index.php');
    }
if(!$table=mysqli_select_db($connect,'fiszki_nauka_slowek'))
{
    $query = 'CREATE DATABASE fiszki_nauka_slowek';//zapytanie wyświetlające wszystkie nazwy baz dan$
    $result=mysqli_query($connect,$query);
}
}
else{
    $connect=false;
}
?>

ERROR 1045 (28000): Access denied for user 'mateusz'@'localhost' (using password: NO)

Przy próbie logowania przez panel phpmyadmin mam następujący błąd:

#1698 - Access denied for user 'root'@'localhost'

PS: Importu dokonałem po ssh, bazy zaimportowałem przez konsole i mysql, utworzyło mi baze i tabelę, ale logowałem się z poziomu użytkownika root

Po ssh jako root siedzę w bazie danych, ale z poziomu użytkownika mateusz i protokołów http i https już nie, jak to zmienić?


Domena, hosting co wybrać w moim przypadku.

$
0
0
Witam

Posiadam "bloga"pod adresem https://instalacjadladomu.pl domena oraz hosting wykupione na webwave.

Jedak zastanawiam się nad przeniesieniem domeny oraz hostingu na linux.com (coś z top 10 ). Tak aby było stabilnie oraz dobry support. Stronę chcę tworzyć w programie, który nie wymaga znajomości programowania oraz ma możliwość dodania mini sklepiku gdzie byłoby dostępnych kilka rzeczy na sprzedaż. Nie chcę się uczyć programowania,kodowania ponieważ chcę skupić się na innych rzeczach.

Zastanawiałem się nad wordpress-em, tylko teraz czy jest to przyszłościowe. Teraz chciałbym stworzyć bloga, ale w przyszłości chciałbym mieć możliwość rozbudowania go o sklep (tworzenie sklepu już mogłoby wiazac sie z kodowaniem ponieważ zleciłbym jego wykonanie). Obawiam się o płynność oraz stabilność strony kiedy byłoby rozwinięta o sklep co wymagałoby instalowanie sporej ilosci wtyczek  z pośrednictwem wordpress-a .

Aktualnie budzet do 300zł (nie wliczajac kosztów stałych)

Podsumowując:

Aktualnie:Blog ma być wizytówką oparty o stabilną i z dobrym supportem domenę oraz hosting + mini sklepik z kilkoma produktami. Wszystko bez kodowania tak żebym to sobie sam umiał ogarnąć.
W przyszłości: Dostępna możliwość rozbudowy o sklep powiedzmy 2tyś produktów. (tak aby strona była bez lagów, stabilna) Tworzenie sklepu mógłbym zlecić wykonanie programiście, (chcę powiedzieć przez to, że może wiązać się z programowaniem). Na tym etapie nie chodzi mi już o prostotę, ale o jakość

Czyli co wg was powinienem wybrać i dlaczego ? Jaki hosting, domena oraz program do obsługi strony?

 

Dziękuje za odpowiedź !

Pozdrawiam, Mateusz :D

Jak tworzyć pakiety za pomocą surowych gniazd?

$
0
0
Cześć. Mam problem. Od dłuższego czasu próbuję się uczyć socketów pytonie i próbuję coś pisać korzystając z dokumentacji, ale nie wychodzi. Chciałbym wiedzieć jak tworzyć pakiety za pomocą surowych gniazd,a później odbierać z nich dane, np. flagę. Czy mógłby mi ktoś to opisać? Konkretnie jak stworzyć pakiet odebrać i odczytać z odpowiedzi różne dane? Szukałem na internecie i nie ma na ten temat nawet na angielskim zbyt wiele informacji. Proszę o przykład  wytłumaczenie. Dzięki za odpowiedzi.

bardzo dziwne wyniki

$
0
0

Czesc, mam pewien kawalek kodu:

for(i=0;i<(a->ile_klatek);i++)    
	{			
cout << " wysokosc "<< i+1 <<" klatki "<< wysokosc_klatki(a,a->klatki[i].nr_klatki) << endl;
		
		
	}

otrzymuje wyniki

5.02

7.35

11.3

a kiedy zrobimy tak;

for(i=0;i<(a->ile_klatek);i++)    
	{			
		cout << " wysokosc "<< i+1 <<" klatki "<< wysokosc_klatki(a,a->klatki[i].nr_klatki) << endl;
		tab[i]=wysokosc_klatki(a,a->klatki[i].nr_klatki);
		
	}

to dostaje:

5.02

12.25

18.45

nie mam zielonego pojecia czym to jest spowodowane jakies pomysly?

ngrok nie działa

$
0
0

Witam!

Mam taki problem z ngrokiem:

Failed to complete tunnel connection


The connection to https://137a21bd.ngrok.io was successfully tunneled to your ngrok client, but the client failed to establish a connection to the local address localhost:80.

Make sure that a web service is running on localhost:80 and that it is a valid address.

The error encountered was: dial tcp: lookup localhost on 192.168.1.1:53: no such host

Działa mi localhost:80 w przeglądarcem mam to co potrzebuję, ale już przez ngrok nie ma

Dzięki za każdą pomoc!, PS: ARCH używam, jeśli ten info potrzebne

studia informatyczne

$
0
0
Mam pytanie, czy może ktoś zdoła mi doradzić? Zastanawiam się, nad studiami informatycznymi. Mój problem polega na tym że niestety, nie chodziłem do żadnego technikum informatycznego, jedynie jestem pasjonatem programowania i zajmuje sie tym hobbystycznie. Uczelnia jest prywatna, wiec na pewno sie dostane, tylko czy sa szanse ze sobie poradze bez rozszerzonej informatyki? Rozszerzam jedynie matematyke.

Pisanie aplikacji, rozpisanie etapów

$
0
0
Witam serdecznie,

Uczę się programowania już jakiś czas. Ćwiczę sobie pisanie mniejszych aplikacji w ramach nauki. Ostatnio chciałem sobie napisać grę "papier, kamień, nożyce" bez przygotowania i na żywioł zasiadłem do pisania kodu. W trakcie pisania wpadałem na coraz to inny pomysł przez to mieszałem koncepcjami oraz mieszałem sobie w kodzie. Naszła mnie pewna refleksja oraz pytanie od was doświadczonych programistów czy przed pisaniem aplikacji analizujecie i zapisujecie sobie jak mają nazywać się zmienne, ile ich będziecie potrzebować, jak to ma mniej więcej wyglądać. Da się to w ogóle przewidzieć jakie funkcję będę potrzebował czy może lepiej zasad programowania obiektowego? Bo z tego co zauważyłem na własnym przykładzie pisanie tak z czapki stworzyło mi ogromny chaos.

choinka c++ dodanie pieńka

$
0
0

Witam serdecznie, zrobiłem choinkę w c++ i chciałbym, żeby drzewko miało pieniek na środku (znak #), a jęzeli jego wysokość wyniesie więcej niż 7 to chciałbym, aby pieniek miał dwa znaki #.. Chciałby mi ktoś pomóc zrobić lub w jakiś sposób mnie nakierować ?


#include <iostream>

using namespace std;

int main()
{
    cout << "Podaj wysokosc choinki"<< endl;
    int wysokosc;
    cin >> wysokosc;

	int a=1;
    while(a<=wysokosc)
    {
		int c=1;
			while(c<= wysokosc-a)
			{
				cout << "";
				c++;
			}
		c = 1;
			while(c<=a*2-1)
			{
				cout << "x";
				c++;
			}
		cout << endl;
		a++;
    }
    return 0;
}

 


Selenium python ukrycie procesu

$
0
0
Siemka, czy ktoś wie jak zrobić tak aby "bot" robiący akcje na stronie nie włączał przeglądarki tylko aby robił sobie swoje rzeczy jak by w tle? może jest jakaś biblioteka do tego?

Filtrowanie zagnieżdżonych tablic obiektów

$
0
0

Cześć,

Mam problem z filtrowaniem po tablicy obiektów. Otóż mam listę ludzi, którzy kupili bilety na filmy do różnych kin. Chcę w tej liście posegregować bilety, aby było widać z jakich kin pochodzą. Dlatego mam tablicę z kinami i sprzedanymi biletami. Jestem obecnie w stanie z tej tablicy wyciągnąć kina z których pochodzą bilety, ale muszę przefiltrować jeszcze bilety, bo przy kinie wszystkie sprzedane się wyświetlają, a nie kupione przez daną osobę.

Próbowałem dopisać kolejny filtr, poniżej ale nie działa tak jak należy, bo wyrzuca tylko po jednym elemencie i wyrzuca błąd ExpressionChangedAfterItHasBeenCheckedError

cinemas = [
{cinemaName:x,
tickets: [
{
ticketNo: 22e1dsf32,
ticket: someData
},
{
ticketNo: g43gsg44,
ticket: someData
},{
ticketNo: dfg343g,
ticket: someData
}
]
}];

person = {
tickets: [
{
{
ticketNo: dfg343g,
ticket: someData
}
}
]
}

get filteredList(person) {
 const cinemas = cinemas;
 return cinemas.filter(cinema => {
   return cinema.tickets.find{ticketSold => {
     return person.tickets.some(ticketBought => {
       return ticketSold.id === ticketBought.id;
     });
   });
  }
 }
}).map(cinema => {
cinema.tickets = cinema.tickets.filter(ticketSold => 
  return person.tickets.some(ticketBought => {
       return ticketSold.id === ticketBought.id;
     });
   });
  return cinema;
});
  }
 }

 

Ukryta wiadomość w strukturze.

$
0
0

Mam do wykonania zadanie:

Przygotuj program do ukrywania wiadomości w nieużywanych częściach struktur języka C, przy założeniu, że struktury nie są upakowane.

W tym celu przygotuj strukturę do przechowywania trzech wartości typu char, double i int w podanej kolejności. Struktura powinna wyglądać następująco:

struct message_t
{
    char a;
    double b;
    int c;
};

Domyślnie kompilator języka C optymalizuje kod programu pod kątem szybkości dostępu do pól struktury, a nie pod kątem miejsca przez nią zajmowanego.

Oznacza to, że rozmiar poniższej struktury wynosi 24 bajty, przy czym dane zajmują tylko 13 bajtów. Różnica - 11 bajtów - jest niewykorzystana i można tam ukryć wiadomość.

Przygotuj funkcję do odczytywania wiadomości ukrytej na niewykorzystanych bajtach sekwencji struktur message_t oraz funkcję do wczytywania tablicy struktur message_t z pliku. Przygotowane funkcje powinny mieć następujące prototypy:

int load_data(struct message_t *cp, int size, const char *filename);

Funkcja ma za zadanie wczytać dane z pliku filename to tablicy struktur cp o pojemności size struktur message_t.

Parametry:

  • filename - nazwa pliku, z którego mają zostać odczytane dane.
  • cp - wskaźnik na tablicę struktur,
  • size - rozmiar tablicy struktur.

Struktura pliku:

Struktura wczytywanego pliku wygląda następująco:

  • liczba n bajtów danych od odczytania (pole unsigned int), następnie
  • n bajtów, które mają tworzyć zawartość struktur message_t.

Wartość n=24 to jedna struktura message_t, 48 to dwie, itd. Wartość niebędąca wielokrotnością długości struktury jest niedopuszczalna.

Wartość zwracana:

  • >0 - w przypadku powodzenia - liczba wczytanych struktur,
  • -1 - w przypadku przekazania do funkcji błędnych danych,
  • -2 - w przypadku niepowodzenia otworzenia pliku lub
  • -3 - w przypadku, kiedy w pliku są uszkodzone dane.

W przypadku, kiedy w pliku znajdzie się więcej danych, niż można zmieścić w tablicy struktur, funkcja powinna wczytać tyle danych ile jest możliwe.


int decode_message(const struct message_t *cp, int size, char *msg, int text_size);

Parametry:

  • cp - wskaźnik na tablicę struktur, w których ukryta jest wiadomość,
  • size - rozmiar tablicy struktur,
  • msg - wskaźnik na tablicę znaków, do której ma zostać zapisana wiadomość wydobyta z sekwencji struktur message_t,
  • text_size - rozmiar tablicy znaków (pojemność w bajtach).

Wartość zwracana:

  • 1 - w przypadku podanie błędnych danych wejściowych lub
  • 0 - w przypadku poprawnego odczytania wiadomości.

Napisz program, który pobierze od użytkownika nazwę pliku (nie więcej niż 30 znaków), a następnie odczyta z niego struktury oraz odczyta ukrytą w nich wiadomość.

W przypadku, kiedy nie można otworzyć pliku program powinien wyświetlić komunikat Couldn't open file i zakończyć działanie z kodem błędu 4. W przypadku kiedy dane w pliku są zapisane niepoprawnie, program powinien wyświetlić komunikat File corrupted i zakończyć działanie z kodem błędu 6.

W przypadku poprawnego odczytania pliku, program powinien wyświetlić na konsoli treść odczytanej wiadomości bez żadnych dodatkowych znaków w wierszu.

Przykładowa interakcja z programem -- sukces:

Pliki: 2420test1.bin

Enter file name: 2420test2.bin⏎
I'm fascinated by the idea that genetics is digital. A gene is a long sequence of coded letters, like computer information. Modern biology is becoming very much a branch of information technology. - Richard Dawkins

Oto moje rozwiązanie:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
struct message_t
{
    char a;
    double b;
    int c;
};

int load_data(struct message_t* cp, int size, const char* filename) {
    if (filename==NULL||cp==NULL) {
        return -1;
    }
    if (size<1) {
        return -1;
    }
    unsigned char* ptr = (unsigned char*)cp + 0;
    FILE* fp;
    fp = fopen(filename, "rb");
    if (fp == NULL) {
        return -2;
    }
    fseek(fp, 0, SEEK_END);
    int x=ftell(fp);
    if (x == 0) {
        fclose(fp);
        return -3;
    }
    fseek(fp, 4, SEEK_SET);
    int i = 0;
    
    while (feof(fp) == 0&&i<=size) {
        if (ferror(fp) != 0) {
            return -3;
        }
        x = fread(ptr, 1, 1, fp);
        if (x != 0 && x != 1) {
            break;
        }
        if (x == 0) {
            break;
        }
        ptr++;
        x = fread(ptr, 1, 7, fp);
        if (x != 0 && x != 7) {
            return -3;
        }
        if (x == 0) {
            return -3;
        }
        ptr += 7;
        x = fread(ptr, 1, 8, fp);
        if (x != 0 && x != 8) {
            return -3;
        }
        if (x == 0) {
            return -3;
        }
        ptr += 8;
        x = fread(ptr, 1, 4, fp);
        if (x != 0 && x != 4) {
            return -3;
        }
        if (x == 0) {
            return -3;
        }
        ptr += 4;
        x = fread(ptr, 1, 4, fp);
        if (x != 0 && x != 4) {
            return -3;
        }
        if (x == 0) {
            return -3;
        }
        ptr += 4;
        i++;
        cp++;
        ptr = (unsigned char*)cp;
    }
    if (fclose(fp) == EOF) {
        return -3;
    }
    return i;
}
int decode_message(const struct message_t* cp, int size, char* msg, int text_size) {
    if (size <1||size>100 || msg == NULL || cp == NULL||text_size<1) {
        return 1;
    }

    unsigned char* ptr = (unsigned char*)cp+0;
    int i = 0, x=0;
    while (isalpha(*ptr) == 0 && isdigit(*ptr) == 0) {
        ptr++;
    }
    while (1) {
        if (i == size) {
            *msg = '\x0';
            break;
        }
        i++;
        ptr++;
        if (x + 7 >= text_size-1) {
            memmove(msg, ptr, text_size-1-x);
            msg += text_size-1-x; 
            *msg = '\x0';
            break;
        }
        memmove(msg, ptr, 7);
        x += 7;

        msg += 7;
        ptr += 19;
        if (x + 4 >= text_size) {
            memmove(msg, ptr, text_size-x-1);
            msg += text_size-1-x;
            *msg = '\x0';
            break;
        }
        memmove(msg, ptr, 4);
        x += 4;
        if (x >= text_size) {
            *msg = '\x0';
            break;
        }
        msg += 4;
        ptr += 4;
        if (*(ptr-1) == '\x0' || *ptr == '\x0') {
            *msg = '\x0';
            break;
        }
     
    }
    return 0;
}
int main(){
    struct message_t t[100];
    puts("Enter file name:");
    const char str[3000];
    char tab[31], c;
    int i = 0;
        while (1) {
        if (scanf("%c", &c) == 0) {
            printf("Incorrect input");
            return 1;
        }
        if (i > 29) {

        }
        else {
            if (c == '\n') {
                break;
            }
            *(tab + i) = c;
            i++;
        }
    }
        *(tab + i) = '\x0';
        FILE* fp;
        fp= fopen(tab, "r");
            if (fp == NULL) {
        printf("Couldn't open file");
        return 4;
    }
            fclose(fp);
        i = 0;

        int y = load_data(t, 100, tab);
        if (y == -3) {
            printf("File corrupted");
            return 6;
        }
        decode_message((const struct message_t*)t, 100, (char*)str, sizeof(str));
        printf("%s", str);
  
    return 0;
 }

 

zrobiłem juz całe zadanie natomiast moja funkcja "load_data" powinna zwracać '-3', przy uszkodzonym pliku a tego nie robi domyślam się ze jest to związane z tą częscią polecenia której kompletnie nie rozumiem:

Struktura pliku:

Struktura wczytywanego pliku wygląda następująco:

  • liczba n bajtów danych od odczytania (pole unsigned int), następnie
  • n bajtów, które mają tworzyć zawartość struktur message_t.

Wartość n=24 to jedna struktura message_t, 48 to dwie, itd. Wartość niebędąca wielokrotnością długości struktury jest niedopuszczalna.

 

Szczególnie chodzi mi o 2 pierwsze podpunkty.

Pliki w tablicy struktur

$
0
0

Mam zadanie:

Napisz program, który pobierze od użytkownika listę plików tekstowych a następnie będzie pobierał kolejne teksty i dodawał je do tego pliku, w którym aktualnie znajduje się najmniej danych.

W tym celu przygotuj strukturę do przechowywania wskaźnika do pliku oraz jego informacji o jego rozmiarze. Pomoże ona w procesie wyboru pliku o najmniejszej liczbie danych oraz w śledzeniu informacji o ilości tych danych.
Struktura powinna wyglądać następująco:

struct file_t
{
    FILE *f;
    int size;
};

Pole f przechowuje uchwyt otwartego pliku (przez funkcję open_file opisaną dalej). Z kolei pole size przechowuje aktualną wielkość pliku w bajtach. Wartość tego pola powinna być aktualizowana po każdej operacji dodania danych do pliku f.


Przygotuj następujące funkcje: otwierającą plik, zamykającą plik oraz wyszukującą plik o najmniejszym rozmiarze. Prototypy tych funkcji powinny wyglądać następująco:

int open_file(struct file_t* f, const char *filename);

Funkcja otwiera plik o nazwie filename i przypisuje jego uchwyt do struktury f. Jeśli plik nie istnieje to funkcja powinna spróbować go utworzyć. Pole size struktury powinno zostać uzupełnione rozmiarem pliku.

Wartość zwracana:

  • 0 - w przypadku sukcesu (plik utworzony bądź otworzony, struktura f uzupełniona),
  • 1 - w przypadku przekazania do funkcji nieprawidłowych danych,
  • 2 - gdy nie udało się uzyskać dostępu do pliku filename.
struct file_t* find_min(const struct file_t* files, int size);

Funkcja ma odnaleźć pierwszy plik w tablicy files o size elementach który posiada najmniejszą ilość zapisanych danych.

Wartość zwracana:

  • Jeśli znaleziony, to funkcja powinna zwrócić wskaźnik do struktury file_t opisującej taki plik.
  • W przypadku podania błędnych danych funkcja powinna zwrócić wartość NULL.

Zwróć uwagę na modyfikator const.

void close_file(struct file_t* f);

Funkcja zamyka plik. W przypadku braku możliwości wykonania operacji zamknięcia funkcja nie podejmuje żadnych działań.


Napisz program, który będzie pobierał od użytkownika nazwy plików aż do wprowadzenie pustej linii. Pierwsze 5 istniejących plików powinno zostać otworzone i wykorzystane do dalszej pracy.

Po zakończeniu fazy pobierania nazw plików i ich otwierania program przechodzi o pobierania kolejnych tekstów od użytkownika. Pobierane teksty nie mogą być dłuższe niż 999 znaków a pętla pobierania tekstów kończy się z chwilą podania pustego ciągu znaków.

Każdy pobrany tekst jest dopisywany do pierwszego pliku z wczytanej listy, w którym na chwilę obecną znajduje się najmniejsza ilość danych.

  • W przypadku kiedy nie uda się otworzyć żadnego pliku program powinien wyświetlić komunikat Couldn't open file i zakończyć się z kodem błedu4.

Po zakończeniu wprowadzania danych program powinien wyświetlić komunikat Files saved i zwrócić kod błędu 0.

Przykładowa interakcja z programem -- sukces:

Podaj nazwy plikow: ⏎
lost.txt⏎
since.txt⏎
//../city.txt⏎
⏎
Podaj teksty: ⏎
Dolor non labore tempora sed eius quaerat. Quisquam non dolor labore ut ipsum ipsum labore. Magnam etincidunt eius quisquam adipisci eius velit. Velit voluptatem porro magnam adipisci. Ut dolore voluptatem est ipsum non sed quaerat.⏎
Modi quisquam ut labore. Amet dolorem ipsum tempora quisquam velit magnam. Quisquam adipisci eius labore dolore non voluptatem etincidunt. Amet voluptatem sit neque aliquam adipisci velit amet. Sed quaerat adipisci modi eius non. Consectetur modi dolore porro aliquam. Dolore sit amet dolor. Eius consectetur consectetur quiquia tempora. Magnam non voluptatem aliquam dolore sed etincidunt. Sit ut dolorem modi consectetur magnam.⏎
Etincidunt labore consectetur sed. Amet adipisci magnam labore. Modi quaerat velit dolor. Dolorem tempora dolore ut porro velit non est. Dolore ipsum neque eius tempora tempora quisquam.⏎
Aliquam quisquam quisquam eius consectetur quiquia. Ut est neque non. Neque dolore tempora modi velit. Adipisci etincidunt dolor ipsum dolore dolor. Consectetur dolore consectetur dolorem non consectetur dolorem ut. Ut quiquia ut dolorem ipsum aliquam labore neque.⏎
Est velit neque dolor aliquam numquam est labore. Ut quisquam ipsum quisquam neque dolore velit. Magnam dolorem aliquam est ipsum non. Tempora ipsum sed consectetur. Eius tempora aliquam consectetur dolore quiquia eius consectetur. Sit ut sit est magnam est numquam. Dolorem dolore eius porro.⏎
Dolor quiquia magnam magnam amet. Dolore quisquam labore adipisci voluptatem sit. Labore quaerat sit voluptatem dolor magnam etincidunt. Sed sit labore magnam porro modi amet amet. Tempora quaerat ut tempora.⏎
Ut est voluptatem velit sit modi neque. Magnam sit magnam sed quaerat. Dolore labore amet consectetur. Voluptatem dolorem adipisci ipsum porro modi quaerat dolore. Modi dolore quaerat quiquia amet non aliquam. Sed sit dolor quisquam dolor velit. Voluptatem ut ut voluptatem amet etincidunt non. Dolorem etincidunt quisquam labore dolore ipsum dolorem quaerat. Neque quisquam etincidunt quisquam numquam non. Neque etincidunt voluptatem ut.⏎
⏎
Files saved

Oto mój program:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
struct file_t
{
    FILE* f;
    int size;
}t[5];
void close_file(struct file_t* f) {
    if (f == NULL||f->f==NULL) {

    }
    else {
        fclose(f->f);
    }
}
int open_file(struct file_t* f, const char* filename) {
    if (f == NULL || filename == NULL) {
        return 1;
    }
    f->f = fopen(filename, "ab");
    if (f->f == NULL) {
        return 2;
    }
     f->size=ftell(f->f);
    return 0;
}
struct file_t* find_min(const struct file_t* files, int size) {
    if (files == NULL || size <=0) {
        return NULL;
    }
    int x = (files+0)->size, i=0, index=0;
    for ( i = 0; i < size; i++) {
        if ((files+i)->size <= x) {
            x=(files+i)->size;
            index = i;
        }
    }
    return (struct file_t*)(files+index);
}
int main(){
    puts("Input files' names:");
    char tab[100], c;
    int count = 0, i = 0, num = 0;
    while (1) {
        if (scanf("%c", &c) == 0) {
            printf("Incorrect input");
            return 1;
        }
        if (i == 0 && c == '\n') {
            break;
        }
        if (c == '\n') {
            *(tab+i) = '\0';
            if (open_file((t+num), tab) > 0) {
            }
            else {
                num++;
                if (num == 4) {
                    break;
                }
            }
            *(tab+0) = '\x0';
            count++;
            i = 0;
            continue;
        }
        else {
            count = 0;
        }

        if (count == 2) {
            break;
        }
            *(tab+i) = c;
            i++;
    }
    if (num == 0) {
        printf("Couldn't open file");
        return 4;
    }
    fseek(stdin, 0, SEEK_END);
    char str[1000];
    count = 0, i = 0;
    printf("Input text:");
    while (1) {
        if (scanf("%c", &c) == 0) {
            printf("Incorrect input");
            return 1;
        }
        if (i == 0 && c == '\n') {
            break;
        }
        if (c == '\n') {
            count++;
            struct file_t* p = find_min(t, num);
            *(str+i) = '\0';
            fwrite(str, sizeof(char), sizeof(str), p->f);
            *(str+0) = '\x0';
            i = 0;
            continue;
        }
        else {
            count = 0;
        }
        if (count == 2) {
            break;
        }
            *(str+i) = c;
            i++;
        if (i > 999) {
            break;
        }
    }
    for (int i = 0; i < num; i++) {
        close_file(t+i);
        }
    printf("File saved");
    return 0;
 }

W testach na platformie akademickiej program po uruchomieniu wyświetla "Files saved" od razu po komendzie "Podaj teksty", a dopiero pozniej pobiera dane co nie pozwala mi przejsc testów.

Program zliczający znaki użyte do napisania programu

$
0
0

Cześć, pisałem razem z książką taki oto program, niestety w ogóle nie działa tak jak powinien, a ja nie umiem zlokalizować błędu, proszę o pomoc w znalezieniu w czym problem. Program w zamyśle miał zliczyć ilość spacji, cyfr i liter w kodzie źródłowym

#include <stdio.h>

main()
{

	int c, i, nwhite, nother;
	int ndigit[10];
	
	nwhite = nother = 0;
	for (i=0; i < 10; ++i)
		ndigit[i] = 0;
	
	while((c=getchar()) != EOF)
		if(c >= '0' && c <= '9')
			++ndigit[c - '0'];
		else if(c ==' '||c =='\n'||c =='\t')
			++nwhite;
		else
			++nother;
		printf("cyfry=");
		for (i=0; i < 10; ++i)
			printf("%d", ndigit[i]);
		printf(", białe znaki = %d, inne=%d\n", nwhite, nother);
		

}

 

Viewing all 21942 articles
Browse latest View live