Compare commits
No commits in common. "e4617f480bfecd3eb1d84b9ede44ca7644c91cc3" and "fd31a58e2638be63245473c3ad2513f62c165d50" have entirely different histories.
e4617f480b
...
fd31a58e26
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# Ignore binaries
|
||||
bin/
|
||||
*.o
|
25
Makefile
Normal file
25
Makefile
Normal file
@ -0,0 +1,25 @@
|
||||
CXX=gcc
|
||||
CXXFLAGS= -O3 -Wall -std=gnu99
|
||||
|
||||
INCLUDES=
|
||||
LIBS=
|
||||
|
||||
MV=mv
|
||||
MKDIR=mkdir -p
|
||||
RM=rm -rf
|
||||
|
||||
SRC_FILES := $(wildcard src/*.c)
|
||||
OBJ_FILES := $(addprefix obj/, $(notdir $(SRC_FILES:.c=.o)))
|
||||
|
||||
all: $(OBJ_FILES)
|
||||
$(MKDIR) bin
|
||||
$(CXX) $(CXXFLAGS) $(LIBS) -o bin/cointoss obj/*.o
|
||||
|
||||
obj/%.o: src/%.c
|
||||
$(CXX) $(CXXFLAGS) $(INCLUDES) -c -o $@ $<
|
||||
|
||||
clean:
|
||||
$(RM) obj/*.o
|
||||
|
||||
cleanall: clean
|
||||
$(RM) bin
|
10
README.md
10
README.md
@ -1,9 +1,13 @@
|
||||
CoinToss
|
||||
========
|
||||
The creation of this program has a little story. I was in math class and a classmate was playing around with the probability simulator on his TI Calculator. He was trying to do as many coin tosses as he could, until finally he reached 9999, which was the limit of tosses for the simulator. So I decided that I would create this, which allows you to do more than that.
|
||||
|
||||
### Running
|
||||
To run make sure you have Python installed and go into the [src/](/src/) folder and run `python CoinToss.py [args]`.
|
||||
The creation of this program has a little story. I was in math class and a classmate was playing around with the probability simulator on his TI Calculator. He was trying to do as many coin tosses as he could, until finally he reached 9999, which was the limit of tosses for the simulator. So I decided that I would create this, which allows you to do more than that, specifically 2,147,473,649 more times than that.
|
||||
|
||||
### Compiling
|
||||
To compile make sure you have the GNU C Compiler installed (GCC) and just go to the root directory of this project and run:
|
||||
```bash
|
||||
$ make
|
||||
```
|
||||
|
||||
### Contributing
|
||||
Do you have something you want to add? Just send a pull request.
|
||||
|
1
obj/readme.txt
Normal file
1
obj/readme.txt
Normal file
@ -0,0 +1 @@
|
||||
This is where the object output files go. This readme file is a simple hack so that git registers it (git doesn't register empty directories).
|
126
src/CoinToss.py
126
src/CoinToss.py
@ -1,126 +0,0 @@
|
||||
###
|
||||
# CoinToss, a probability simulator.
|
||||
# Copyright (C) 2014 Nicolas A. Ortega
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License or
|
||||
# (at your option) any later.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
import sys
|
||||
from random import randint
|
||||
|
||||
version = "v0.3"
|
||||
|
||||
### DEFINE FUNCTIONS ###
|
||||
def printUsage():
|
||||
print "Usage:", sys.argv[0], "[[num_trials] | [args]]\nUse -h or --help for more information."
|
||||
|
||||
def printCopyright():
|
||||
print """CoinToss""", version, """Copyright (C) 2014 Nicolas A. Ortega\n
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details use `-w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; use `-c' for details\n"""
|
||||
|
||||
def printAllCopyright():
|
||||
print """CoinToss, a probability simulator.
|
||||
Copyright (C) 2014 Nicolas A. Ortega\n
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.\n
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.\n
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.\n"""
|
||||
|
||||
def printWarranty():
|
||||
print """ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n"""
|
||||
|
||||
def printHelp():
|
||||
printUsage()
|
||||
print """ -c -- Print copyright information
|
||||
-h | --help -- Print this help information
|
||||
-w -- Print warranty information
|
||||
-v -- Print version"""
|
||||
|
||||
|
||||
### MAIN ###
|
||||
|
||||
# If no arguments specified
|
||||
if len(sys.argv) == 1:
|
||||
printCopyright()
|
||||
printUsage()
|
||||
sys.exit(0)
|
||||
# Check if appropriate number of arguments
|
||||
elif len(sys.argv) != 2:
|
||||
print "Inappropriate number of arguments."
|
||||
printUsage()
|
||||
sys.exit(0)
|
||||
# Check if copyright argument is passed
|
||||
elif sys.argv[1] == "-c":
|
||||
printAllCopyright()
|
||||
sys.exit(0)
|
||||
# Check if warranty argument is passed
|
||||
elif sys.argv[1] == "-w":
|
||||
printWarranty()
|
||||
sys.exit(0)
|
||||
# Check if help argument is passed
|
||||
elif sys.argv[1] == "-h" or sys.argv[1] == "--help":
|
||||
printHelp()
|
||||
sys.exit(0)
|
||||
# Check if version argument is passed
|
||||
elif sys.argv[1] == "-v":
|
||||
print "CoinToss", version
|
||||
sys.exit(0)
|
||||
|
||||
printCopyright()
|
||||
|
||||
# Create necessary variables
|
||||
try:
|
||||
trials = int(sys.argv[1])
|
||||
except ValueError:
|
||||
print "Please give an integer."
|
||||
sys.exit(2)
|
||||
heads = 0
|
||||
tails = 0
|
||||
|
||||
oldProgress = 0
|
||||
|
||||
print "Calculating random numbers..."
|
||||
print "Progress: 0 %"
|
||||
for i in range(0, trials):
|
||||
progress = (i * 100) / trials
|
||||
if progress is not oldProgress and progress % 10 is 0:
|
||||
print "Progress:", progress, "%"
|
||||
oldProgress = progress
|
||||
|
||||
if randint(1, 10) <= 5:
|
||||
heads += 1
|
||||
else:
|
||||
tails += 1
|
||||
|
||||
print "Progress: 100 %"
|
||||
print "Done.\n"
|
||||
print "Heads:", heads
|
||||
print "Tails:", tails
|
||||
|
||||
sys.exit(0)
|
122
src/main.c
Normal file
122
src/main.c
Normal file
@ -0,0 +1,122 @@
|
||||
/**
|
||||
* CoinToss, a probability simulator.
|
||||
* Copyright (C) 2014 Nicolás A. Ortega
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
// Global version string
|
||||
char version[7] = "v0.2";
|
||||
|
||||
/* Function prototypes start */
|
||||
void printCopyright();
|
||||
void printAllCopyright();
|
||||
void printWarranty();
|
||||
/* Function prototypes end */
|
||||
|
||||
// Main function:
|
||||
int main(int argc, char **argv) {
|
||||
// If inappropriate number of arguments
|
||||
if(argc < 2 || argc > 3) { // If inappropriate number of arguments (number required = 2)
|
||||
printf("Inappropriate amount of arguments.");
|
||||
printf("Usage: %s [num_trials]\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if(!strcmp(argv[1], "-c")) { // If argv[1] (the second argument) is equal to "-c" ...
|
||||
printAllCopyright();
|
||||
return 0;
|
||||
} else if(!strcmp(argv[1], "-w")) { // If argv[1] is equal to "-w"
|
||||
printWarranty();
|
||||
return 0;
|
||||
} else if(!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) { // If argv[1] is equal to "-h" or "--help"
|
||||
printf("Usage: %s [num_trials]\n\
|
||||
-c -- Print copyright info\n\
|
||||
-h | --help -- Print this help information\n\
|
||||
-w -- Print warranty information\n", argv[0]);
|
||||
return 0;
|
||||
} else {
|
||||
int i = 0;
|
||||
while(argv[1][i] != '\0') { // While argv[1][i] is not equal to NULL (can't use NULL for pointers)
|
||||
if(isdigit(argv[1][i] - '0') != 0) { // if argv[1][i] is not a number between 0 and 9
|
||||
printf("You did not specify a number.\n");
|
||||
printf("Usage: %s [num_trials]\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
printCopyright();
|
||||
|
||||
int trials = atoi(argv[1]);
|
||||
int heads = 0;
|
||||
int tails = 0;
|
||||
|
||||
// Setup the random number generator with the seed being the time
|
||||
srand(time(NULL));
|
||||
|
||||
printf("Calculating random numbers...\n");
|
||||
for(int i = 0; i < trials; i++) {
|
||||
if(i % 100000000 == 0) printf("Working...\n");
|
||||
int r = rand() % 100 + 1; // Calculate random number between 1 and 100
|
||||
if(r <= 50) heads++;
|
||||
else tails++;
|
||||
}
|
||||
|
||||
printf("Done.\n");
|
||||
printf("Heads: %i\n", heads);
|
||||
printf("Tails: %i\n", tails);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Defined functions start */
|
||||
void printCopyright() {
|
||||
printf("CoinToss %s Copyright (C) 2014 Nicolás A. Ortega\n\
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details use `-w'.\n\
|
||||
This is free software, and you are welcome to redistribute it\n\
|
||||
under certain conditions; use `-c' for details.\n\n", version);
|
||||
}
|
||||
|
||||
void printAllCopyright() {
|
||||
printf("CoinToss, a probability simulator.\n\
|
||||
Copyright (C) 2014 Nicolás A. Ortega\n\n\
|
||||
This program is free software: you can redistribute it and/or modify\n\
|
||||
it under the terms of the GNU General Public License as published by\n\
|
||||
the Free Software Foundation, either version 3 of the License, or\n\
|
||||
(at your option) any later version.\n\n\
|
||||
This program is distributed in the hope that it will be useful,\n\
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\
|
||||
GNU General Public License for more details.\n\n\
|
||||
You should have received a copy of the GNU General Public License\n\
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.\n");
|
||||
}
|
||||
|
||||
void printWarranty() {
|
||||
printf(" THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\n\
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\n\
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\n\
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\n\
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\n\
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\n\
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n");
|
||||
}
|
||||
/* Defined functions end */
|
Loading…
Reference in New Issue
Block a user