• Nov 18, 2022 •AustinLeath
0 likes • 1 view
#include <iostream> #include <fstream> #include <string> #include <cstring> using namespace std; //This program makes a new text file that contains all combinations of two letters. // aa, ab, ..., zy, zz int main(){ string filename = "two_letters.txt"; ofstream outFile; outFile.open(filename.c_str()); if(!outFile.is_open()){ cout << "Something's wrong. Closing..." << endl; return 0; } for(char first = 'a'; first <= 'z'; first++){ for(char second = 'a'; second <= 'z'; second++){ outFile << first << second << " "; } outFile << endl; } return 0; }
0 likes • 10 views
#include <iostream> using namespace std; /* Description: uses switch case statements to determine whether it is hot or not outside. Also uses toupper() function which forces user input char to be uppercase in order to work for the switch statement */ int main() { char choice; cout << "S = Summer, F = Fall, W = Winter, P = Spring" << endl; cout << "Enter a character to represent a season: ";asdasdasdasd cin >> choice; enum Season {SUMMER='S', FALL='F', WINTER='W', SPRING='P'}; switch(toupper(choice)) // This switch statement compares a character entered with values stored inside of an enum { case SUMMER: cout << "It's very hot outside." << endl; break; case FALL: cout << "It's great weather outside." << endl; break; case WINTER: cout << "It's fairly cold outside." << endl; break; case SPRING: cout << "It's rather warm outside." << endl; break; default: cout << "Wrong choice" << endl; break; } return 0; }
0 likes • 3 views
#include <string> #include <iostream> #include "PlaylistNode.h" using namespace std; PlaylistNode::PlaylistNode() { uniqueID = "none"; songName = "none"; artistName = "none"; songLength = 0; nextNodePtr = 0; } PlaylistNode::PlaylistNode(string uniqueID_, string songName_, string artistName_, int songLength_) { uniqueID = uniqueID_; songName = songName_; artistName = artistName_; songLength = songLength_; nextNodePtr = 0; } void PlaylistNode::InsertAfter(PlaylistNode* ptr) { this->SetNext(ptr->GetNext()); ptr->SetNext(this); } void PlaylistNode::SetNext(PlaylistNode* ptr) { nextNodePtr = ptr; } string PlaylistNode::GetID() { return uniqueID; } string PlaylistNode::GetSongName() { return songName; } string PlaylistNode::GetArtistName() { return artistName; } int PlaylistNode::GetSongLength() { return songLength; } PlaylistNode* PlaylistNode::GetNext() { return nextNodePtr; } void PlaylistNode::PrintPlaylistNode() { cout << "Unique ID: " << uniqueID << endl; cout << "Song Name: " << songName << endl; cout << "Artist Name: " << artistName << endl; cout << "Song Length (in seconds): " << songLength << endl; } Playlist::Playlist() { head = tail = 0; } void Playlist::AddSong(string id, string songname, string artistname, int length) { PlaylistNode* n = new PlaylistNode(id, songname, artistname, length); if (head == 0) { head = tail = n; } else { n->InsertAfter(tail); tail = n; } } bool Playlist::RemoveSong(string id) { if (head == NULL) { cout << "Playlist is empty" << endl; return false; } PlaylistNode* curr = head; PlaylistNode* prev = NULL; while (curr != NULL) { if (curr->GetID() == id) { break; } prev = curr; curr = curr->GetNext(); } if (curr == NULL) { cout << "\"" << curr->GetSongName() << "\" is not found" << endl; return false; } else { if (prev != NULL) { prev ->SetNext(curr->GetNext()); } else { head = curr->GetNext(); } if (tail == curr) { tail = prev; } cout << "\"" << curr->GetSongName() << "\" removed." << endl; delete curr; return true; } } bool Playlist::ChangePosition(int oldPos, int newPos) { if (head == NULL) { cout << "Playlist is empty" << endl; return false; } PlaylistNode* prev = NULL; PlaylistNode* curr = head; int pos; if (head == NULL || head == tail) { return false; } for (pos = 1; curr != NULL && pos < oldPos; pos++) { prev = curr; curr = curr->GetNext(); } if (curr != NULL) { string currentSong = curr->GetSongName(); if (prev == NULL) { head = curr->GetNext(); } else { prev->SetNext(curr->GetNext()); } if (curr == tail) { tail = prev; } PlaylistNode* curr1 = curr; prev = NULL; curr = head; for (pos = 1; curr != NULL && pos < newPos; pos++) { prev = curr; curr = curr->GetNext(); } if (prev == NULL) { curr1->SetNext(head); head = curr1; } else { curr1->InsertAfter(prev); } if (curr == NULL) { tail = curr1; } cout << "\"" << currentSong << "\" moved to position " << newPos << endl; return true; } else { cout << "Song's current position is invalid" << endl; return false; } } void Playlist::SongsByArtist(string artist) { if (head == NULL) { cout << "Playlist is empty" << endl; } else { PlaylistNode* curr = head; int i = 1; while (curr != NULL) { if (curr->GetArtistName() == artist) { cout << endl << i << "." << endl; curr->PrintPlaylistNode(); } curr = curr->GetNext(); i++; } } } int Playlist::TotalTime() { int total = 0; PlaylistNode* curr = head; while (curr != NULL) { total += curr->GetSongLength(); curr = curr->GetNext(); } return total; } void Playlist::PrintList() { if (head == NULL) { cout << "Playlist is empty" << endl; } else { PlaylistNode* curr = head; int i = 1; while (curr != NULL) { cout << endl << i++ << "." << endl; curr->PrintPlaylistNode(); curr = curr->GetNext(); } } }
• Sep 7, 2022 •LeifMessinger
0 likes • 0 views
#include <iostream> #include <cstring> int main(int argc, char** argv){ //With decimal if(strstr(argv[1], ".") != nullptr){ int i = 0; //Skip i to first non 0 digit while(argv[1][i] < '1' || argv[1][i] > '9') ++i; //If digit comes before decimal if((argv[1] + i) < strstr(argv[1], ".")){ //Good example of pointer arithmetic std::cout << strlen(argv[1] + i) - 1 << std::endl; //Another good example }else{ //If digit is after decimal std::cout << strlen(argv[1] + i) << std::endl; } }else{ //Without decimal int m = 0; int i = 0; while(argv[1][i] < '1' || argv[1][i] > '9') ++i; //In case of some number like 0045 for(; argv[1][i] != '\0'; ++i){ if(argv[1][i] >= '1' && argv[1][i] <= '9') m = i + 1; } std::cout << m << std::endl; } return 0; }
0 likes • 4 views
#include <iostream> using namespace std; int main() { const int ROW_SIZE = 2; const int COLUMN_SIZE = 5; //establish all variables int matrix[ROW_SIZE][COLUMN_SIZE]; int minVal; for (int i = 0; i < ROW_SIZE; ++i) // for loop to ask user to enter data. { for (int h = 0; h < COLUMN_SIZE; ++h) { cout << "Enter data for row #" << i + 1 << " and column #" << h + 1 << ": "; cin >> matrix[i][h]; } } cout << "You entered: " << endl; for (int i = 0; i < ROW_SIZE; ++i) //for statements to output the array neatly { for (int h = 0; h < COLUMN_SIZE; ++h) { cout << matrix[i][h] << "\t"; } cout << endl; } cout << "Minimum for each row is: {"; for (int i = 0; i < ROW_SIZE; i++) //for statements to find the minimum in each row { minVal = matrix[i][0]; for (int h = 0; h < COLUMN_SIZE; h++) { if (matrix[i][h] < minVal) // if matrix[i][h] < minVal -> minVal = matrix[i][h]; { minVal = matrix[i][h]; } } cout << minVal << ", "; } cout << "}" << endl; cout << "Minimum for each column is: {"; for (int i = 0; i < COLUMN_SIZE; i++) //for statements to find the minimum in each column { minVal = matrix[0][i]; for (int h = 0; h < ROW_SIZE; h++) { if (matrix[h][i] < minVal) //replaces minVal with array index for that column that is lowest { minVal = matrix[h][i]; } } cout << minVal << ", "; } cout << "}" << endl; return 0; }
• Oct 23, 2022 •LeifMessinger
//Leif Messinger //Finds all sets of 5 5 letter words that don't have duplicate letters in either themselves or each other. //First it reads the words in and puts them in groups of their bitmasks //After that, we recurse on each group. Before doing that, we remove the group from the set of other groups to check it against. #include <cstdio> //getchar, printf #include <cassert> //assert #include <vector> #include <set> #include <algorithm> //std::copy_if #include <iterator> //std::back_inserter #define CHECK_FOR_CRLF true #define MIN_WORDS 5 #define MAX_WORDS 5 #define WORD_TOO_LONG(len) (len != 5) const unsigned int charToBitmask(const char bruh){ assert(bruh >= 'a' && bruh <= 'z'); return (1 << (bruh - 'a')); } void printBitmask(unsigned int bitmask){ char start = 'a'; while(bitmask != 0){ if(bitmask & 1){ putchar(start); } bitmask >>= 1; ++start; } } //Pointer needs to be deleted const std::set<unsigned int>* getBitmasks(){ std::set<unsigned int>* bitmasksPointer = new std::set<unsigned int>; std::set<unsigned int>& bitmasks = (*bitmasksPointer); unsigned int bitmask = 0; unsigned int wordLength = 0; bool duplicateLetters = false; for(char c = getchar(); c >= 0; c = getchar()){ if(CHECK_FOR_CRLF && c == '\r'){ continue; } if(c == '\n'){ if(!(WORD_TOO_LONG(wordLength) || duplicateLetters)) bitmasks.insert(bitmask); bitmask = 0; wordLength = 0; duplicateLetters = false; continue; } if((bitmask & charToBitmask(c)) != 0) duplicateLetters = true; bitmask |= charToBitmask(c); ++wordLength; } return bitmasksPointer; } void printBitmasks(const std::vector<unsigned int>& bitmasks){ for(unsigned int bruh : bitmasks){ printBitmask(bruh); putchar(','); putchar(' '); } puts(""); } //Just to be clear, when I mean "word", I mean a group of words with the same letters. void recurse(std::vector<unsigned int>& oldBitmasks, std::vector<unsigned int> history, const unsigned int currentBitmask){ //If there's not enough words left if(oldBitmasks.size() + (-(history.size())) + (-MIN_WORDS) <= 0){ //If there's enough words if(history.size() >= MIN_WORDS){ //Print the list printBitmasks(history); } return; //To make it faster, we can stop it after 5 words too }else if(history.size() >= MAX_WORDS){ //Print the list printBitmasks(history); return; } //Thin out the array with only stuff that matches the currentBitmask. std::vector<unsigned int> newBitmasks; std::copy_if(oldBitmasks.begin(), oldBitmasks.end(), std::back_inserter(newBitmasks), [¤tBitmask](unsigned int bruh){ return (bruh & currentBitmask) == 0; }); while(newBitmasks.size() > 0){ //I know this modifies 'oldBitmasks' too. It's intentional. //This makes it so that the word is never involved in any of the child serches or any of the later searches in this while loop. const unsigned int word = newBitmasks.back(); newBitmasks.pop_back(); std::vector<unsigned int> newHistory = history; newHistory.push_back(word); recurse(newBitmasks, newHistory, currentBitmask | word); } } int main(){ const std::set<unsigned int>* bitmasksSet = getBitmasks(); std::vector<unsigned int> bitmasks(bitmasksSet->begin(), bitmasksSet->end()); delete bitmasksSet; recurse(bitmasks, std::vector<unsigned int>(), 0); return 0; }