Wpis z mikrobloga

Mireczki mam problem z zadaniem z #programowanie. Nie mam pomysłu jak przestawić dowolny układ elektroniczny zawierający same bramki logiczne, jako listę. W następnym pliku pokazane są jakie są stany wejść i w pliku wyjściowym mamy napisać jaki będzie stan na wyjściu tej bramki.
Na poniższym przykładzie wydaje mi się, że trzeba rekurencyjnie zadziałać od wyjścia i przejść przez każdą bramkę, aż dojdziemy do wejść, które są nam znane.
Utknąłem w punkcie, jak program ma znaleźć linie gdzie jest "OUT:" a później jako korzen->id była zapisana wartość, która stoi po słowie "OUT:". (korzen->id to jest początkowa wartość jaką będzie miała lista i później będzie szukać z pliku powiązań)
Macie jakieś inne pomysły jak w prosty sposób można to zrobić?
Muszę to zrobić w jak najprostszy sposób, tzn. bez klas i bez wektorów ( ͡° ʖ̯ ͡°)
W komentarzu mam przykładowe pliki wejściowe i plik wyjściowy.
#cplusplus #pytanie #cpp
Pobierz
źródło: comment_XQ0XxNfH8JmiHVbzLRUfAF1RCiU3wsd1.jpg
  • 13
@Vip3Out jak nie klasy, to może struktury? :) I wtedy na wskaźnikach, rekurencyjnie, bez bólu. Jak bez tego, to jeżeli możesz założyć, że numery bramek/wejść są ciągiem od 1 do n bez przerw (nie masz np. tylko bramek 1, 2 i 2137), to wtedy możesz trzymać wyliczone wartości w tablicy, gdzie wartość bramki i to tablica[i], a jeżeli nie jest policzone, to wtedy korzystasz z przeczytanej z pliku konfiguracji i rekurencyjnie. Jak
@MatXXX: Czyli jeśli chciałbym zrobić to wskaźnikami, to wystarczy mi jedna struktura np: struct bramka{ int id; bramka *we1; bramka *we2}; Brakuje mi tutaj jeszcze czegoś na wyjście czy nie jest potrzebne?
Inna sprawa jest taka, że mam tych bramek powiedzmy 6 rodzajów, to jak mam to zrobić, żeby odczytywało mi sygnały na wejściach, rozpoznawało mi bramkę i przemieniało sygnał na wyjściu na taki jaki tworzy go dana bramka. Ludzie mówili
@Vip3Out: Zauważ, że jeżeli będziesz liczyć rekurencyjnie naiwnie, będziesz niektóre bramki liczył więcej niż raz, w twoim przykładzie 5 zostałoby policzone dla 2 i dla 4, więc pole w strukturze, w którym zapiszesz output może się przydać. Robisz sobie enum { AND, NAND, itd. }, który reprezentuje rodzaj bramki. W strukturze robisz dodatkowe pole na tego enuma. W funkcji, która ma policzyć output dla danej bramki, robisz switcha po tej wartości.