Compare commits
41 Commits
v0.1
...
3675ee066f
Author | SHA1 | Date | |
---|---|---|---|
3675ee066f | |||
f7a0384ff3 | |||
19f9c3c333 | |||
eebc90e392 | |||
5acd4908ab | |||
f022fda0d6 | |||
6d6ef03710 | |||
b5d0d55290 | |||
81548b20e6 | |||
ede6827cb6 | |||
015da8fd34 | |||
326038107c | |||
a1b8f22383 | |||
fb4d81fe67 | |||
497c7d0bea | |||
b5db1fbdc2 | |||
1adc60c991 | |||
4980d8b57c | |||
8d048e9a68 | |||
f9a739f556 | |||
3b24d422d2 | |||
e8b1d79f79 | |||
0ce346b714 | |||
cbe1aeb123 | |||
da36eac98a | |||
dec3bdca0a | |||
7d2cf7e91a | |||
0cac8482b6 | |||
62d4d703a8 | |||
14ce9cdc3c | |||
67bf1b9936 | |||
7ab6041de2 | |||
c37263600a | |||
ed3960329d | |||
30d9e1189c | |||
7a2b0f6cf0 | |||
fdc6f484ad | |||
1fae1332bd | |||
b8e76b8e97 | |||
d7b8febf01 | |||
64174d5c8e |
8
.gitignore
vendored
Normal file
8
.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
# Ignore CMake files:
|
||||
CMakeCache.txt
|
||||
CMakeFiles/
|
||||
cmake_install.cmake
|
||||
Makefile
|
||||
|
||||
# Ignore build files:
|
||||
build/
|
13
CMakeLists.txt
Normal file
13
CMakeLists.txt
Normal file
@ -0,0 +1,13 @@
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
project(MMMCalc)
|
||||
|
||||
set(CMAKE_C_FLAGS "-Wall -Wextra -pedantic-errors")
|
||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -g -O0")
|
||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -O3")
|
||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} -g -O3")
|
||||
set(CMAKE_C_FLAGS_MIN_SIZEREL "${CMAKE_C_FLAGS} -Os")
|
||||
|
||||
set(SRCS
|
||||
src/Main.c)
|
||||
|
||||
add_executable(mmmcalc ${SRCS})
|
14
README.md
14
README.md
@ -1,6 +1,16 @@
|
||||
MMMCalc
|
||||
=======
|
||||
|
||||
This is a very simple project, it was made for educational purposes (hence why it is open-source), and I encourage everyone to contribute if they have something to add.
|
||||
### Compiling
|
||||
MMMCalc uses [CMake](http://cmake.org/) to compile. Please install the C development tools and CMake (along with whichever build script you plan on having CMake generate) in order to run this command.
|
||||
```bash
|
||||
$ cd build/
|
||||
$ cmake ..
|
||||
$ make
|
||||
```
|
||||
|
||||
To contact me, send me an e-mail at <nicolas.ortega.froysa@gmail.com>.
|
||||
### Contributing
|
||||
To contribute, simply open a pull request, however, be aware that this code is licensed under a GNU GPLv3 and so will yours.
|
||||
|
||||
### License
|
||||
All code in this repository is under the [GNU GPLv3](/LICENSE).
|
||||
|
0
build/.keep
Normal file
0
build/.keep
Normal file
@ -1,91 +0,0 @@
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Nicolás A. Ortega
|
||||
* @copyright (C) Nicolás A. Ortega
|
||||
* @license GNU General Public License 3.0 (GPLv3)
|
||||
* @year 2014
|
||||
*
|
||||
*/
|
||||
public class MMMCalc {
|
||||
private static float[] numArray;
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println("Welcome to MMMCalc v0.1, a simple tool for basic statistics calculations.\n" +
|
||||
"This software is licensed under the GNU GPLv3 license and comes WITHOUT WARRANTY.\n");
|
||||
if(args.length > 0) {
|
||||
float sNum = 0;
|
||||
numArray = new float[args.length];
|
||||
|
||||
for(int i = 0; i < args.length; i++) {
|
||||
numArray[i] = Float.parseFloat(args[i]) - 0f;
|
||||
}
|
||||
|
||||
int nL = numArray.length;
|
||||
float tmp = 0;
|
||||
for(int i = 0; i < nL; i++) {
|
||||
for(int j = 0; j >= (i+1); j--) {
|
||||
if(numArray[j] < numArray[j-1]) {
|
||||
tmp = numArray[j];
|
||||
numArray[j] = numArray[j-1];
|
||||
numArray[j-1] = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
calcMean();
|
||||
calcMedian();
|
||||
calcMode();
|
||||
} else {
|
||||
System.out.println("You did not mention any variables.");
|
||||
}
|
||||
}
|
||||
|
||||
private static void calcMean() {
|
||||
float mean = 0;
|
||||
float sum = 0;
|
||||
|
||||
for(float i: numArray) {
|
||||
sum += i;
|
||||
}
|
||||
|
||||
mean = sum / (float)numArray.length;
|
||||
|
||||
System.out.println("Mean: " + mean);
|
||||
}
|
||||
|
||||
private static void calcMedian() {
|
||||
int midVar = 0;
|
||||
|
||||
midVar = numArray.length / 2;
|
||||
|
||||
System.out.println("Median: " + numArray[midVar]);
|
||||
}
|
||||
|
||||
private static void calcMode() {
|
||||
HashMap<Float, Float> fx = new HashMap<Float, Float>();
|
||||
|
||||
for(float x: numArray) {
|
||||
Float f = fx.get(x);
|
||||
if(f == null) {
|
||||
fx.put(x, (float)1);
|
||||
} else {
|
||||
fx.put(x, f + 1);
|
||||
}
|
||||
}
|
||||
|
||||
float mode = 0;
|
||||
float modeFreq = 0;
|
||||
|
||||
for(Map.Entry<Float, Float> entry: fx.entrySet()) {
|
||||
float freq = entry.getValue();
|
||||
if(freq > modeFreq) {
|
||||
modeFreq = freq;
|
||||
mode = entry.getKey();
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("Mode: " + mode + " (frequency: " + modeFreq + ")");
|
||||
}
|
||||
}
|
14
src/Main.c
Normal file
14
src/Main.c
Normal file
@ -0,0 +1,14 @@
|
||||
#include <stdio.h>
|
||||
|
||||
// 0 = false;
|
||||
// 1 = true;
|
||||
char version[16] = "v0.5";
|
||||
int verbose = 0;
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
printf("MMMCalc %s, Copyright (c) 2016 Nicolás A. Ortega.\n", version);
|
||||
printf("This program comes with ABSOLUTELY NO WARRANTY.\n");
|
||||
printf("This program is free software and you are welcome to redistribute\n");
|
||||
printf("under the terms and conditions of the GNU GPLv3 or higher.\n\n");
|
||||
return 0;
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
Manifest-Version: 0.1
|
||||
Main-Class: MMMCalc
|
351
src/mmmcalc/MMMCalc.java
Normal file
351
src/mmmcalc/MMMCalc.java
Normal file
@ -0,0 +1,351 @@
|
||||
package mmmcalc;
|
||||
|
||||
import java.lang.Math;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Nicolás A. Ortega
|
||||
* @copyright (C) Nicolás A. Ortega
|
||||
* @license GNU GPLv3
|
||||
* @year 2014
|
||||
*
|
||||
*/
|
||||
public class MMMCalc {
|
||||
private static boolean verbose = false;
|
||||
private static float[] numArray;
|
||||
private static float mean = 0;
|
||||
private static float q1 = 0;
|
||||
private static float median = 0;
|
||||
private static float q3 = 0;
|
||||
private static float mode = 0;
|
||||
private static float range = 0;
|
||||
private static float stdDev = 0;
|
||||
private static float variance = 0;
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println("MMMCalc v0.4, 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");
|
||||
if(args.length > 0) {
|
||||
if(args[0].equals("-h")) {
|
||||
System.out.println("Usage:\n" +
|
||||
" MMMCalc [options] [variables]\n\n" +
|
||||
"Options:\n" +
|
||||
" -v | -V -- Be verbose (show the work).\n" +
|
||||
" -w -- Show warranty information.\n" +
|
||||
" -c -- Show copyright information.\n" +
|
||||
" -h -- Show this help information.\n");
|
||||
} else if(args[0].equals("-w")) {
|
||||
System.out.println("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");
|
||||
} else if(args[0].equals("-c")) {
|
||||
System.out.println("MMMCalc, a very basic statistics calculator.\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 <www.gnu.org/licenses/>.");
|
||||
} else if(args[0].equals("-v") || args[0].equals("-V")) {
|
||||
verbose = true;
|
||||
numArray = new float[args.length - 1];
|
||||
|
||||
for(int i = 0; i < numArray.length; i++) {
|
||||
numArray[i] = Float.parseFloat(args[i+1]);
|
||||
}
|
||||
sortArray();
|
||||
|
||||
calcMean();
|
||||
calcQ1();
|
||||
calcMedian();
|
||||
calcQ3();
|
||||
calcMode();
|
||||
calcRange();
|
||||
calcStdDev();
|
||||
calcVariance();
|
||||
} else {
|
||||
numArray = new float[args.length];
|
||||
|
||||
for(int i = 0; i < args.length; i++) {
|
||||
numArray[i] = Float.parseFloat(args[i]) - 0f;
|
||||
}
|
||||
sortArray();
|
||||
|
||||
calcMean();
|
||||
calcQ1();
|
||||
calcMedian();
|
||||
calcQ3();
|
||||
calcMode();
|
||||
calcRange();
|
||||
calcStdDev();
|
||||
calcVariance();
|
||||
}
|
||||
} else {
|
||||
System.out.println("You did not mention any variables. Use the -h argument for help.");
|
||||
}
|
||||
}
|
||||
|
||||
private static void sortArray() {
|
||||
int nL = numArray.length;
|
||||
float tmp = 0;
|
||||
for(int i = 0; i < nL; i++) {
|
||||
for(int j = (nL-1); j >= (i+1); j--) {
|
||||
if(numArray[j] < numArray[j-1]) {
|
||||
tmp = numArray[j];
|
||||
numArray[j] = numArray[j-1];
|
||||
numArray[j-1] = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void calcMean() {
|
||||
float sum = 0;
|
||||
|
||||
for(float i: numArray) {
|
||||
sum += i;
|
||||
}
|
||||
|
||||
mean = sum / (float)numArray.length;
|
||||
|
||||
System.out.println("Mean: " + mean);
|
||||
|
||||
if(verbose) {
|
||||
System.out.print("(");
|
||||
for(int i = 0; i < numArray.length; i++) {
|
||||
System.out.print(numArray[i]);
|
||||
if(i != numArray.length -1) {
|
||||
System.out.print(" + ");
|
||||
}
|
||||
}
|
||||
System.out.print(") / " + numArray.length + " = " + mean + "\n\n");
|
||||
}
|
||||
}
|
||||
|
||||
private static void calcQ1() {
|
||||
int q1Pos;
|
||||
// c stands for case... Cases correspond to their order in the following if statements (4 different cases).
|
||||
int c;
|
||||
|
||||
if(numArray.length % 2.0 == 0) {
|
||||
q1Pos = (int)(numArray.length / 4);
|
||||
if(numArray.length % 4.0 == 0) {
|
||||
q1 = (numArray[q1Pos] + numArray[q1Pos-1]) / 2;
|
||||
c = 1;
|
||||
} else {
|
||||
q1 = numArray[q1Pos];
|
||||
c = 2;
|
||||
}
|
||||
} else {
|
||||
if(Math.ceil(numArray.length / 2.0) % 2.0 == 0) {
|
||||
q1Pos = (int)(Math.ceil(numArray.length / 2.0) / 2.0);
|
||||
q1 = (numArray[q1Pos] + numArray[q1Pos+1]) / 2;
|
||||
c = 3;
|
||||
} else {
|
||||
q1Pos = (int)Math.ceil(numArray.length / 4.0);
|
||||
q1 = numArray[q1Pos];
|
||||
c = 4;
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("Q1: " + q1);
|
||||
|
||||
if(verbose) {
|
||||
for(int i = 0; i < numArray.length; i++) {
|
||||
if(c == 1) {
|
||||
if(i == q1Pos - 1) {
|
||||
System.out.print(">>" + numArray[i] + " !" + q1 + "! ");
|
||||
} else if(i == q1Pos) {
|
||||
System.out.print(numArray[i] + "<< ");
|
||||
} else {
|
||||
System.out.print(numArray[i] + " ");
|
||||
}
|
||||
} else if(c == 2) {
|
||||
if(i == q1Pos) {
|
||||
System.out.print(">>" + numArray[i] + "<< ");
|
||||
} else {
|
||||
System.out.print(numArray[i] + " ");
|
||||
}
|
||||
} else if(c == 3) {
|
||||
if(i == q1Pos) {
|
||||
System.out.print(">>" + numArray[i] + " !" + q1 + "! ");
|
||||
} else if(i == q1Pos + 1) {
|
||||
System.out.print(numArray[i] + "<< ");
|
||||
} else {
|
||||
System.out.print(numArray[i] + " ");
|
||||
}
|
||||
} else if(c == 4) {
|
||||
if(i == q1Pos) {
|
||||
System.out.print(">>" + numArray[i] + "<< ");
|
||||
} else {
|
||||
System.out.print(numArray[i] + " ");
|
||||
}
|
||||
}
|
||||
}
|
||||
System.out.print("\n\n");
|
||||
}
|
||||
}
|
||||
|
||||
private static void calcMedian() {
|
||||
int midVar = numArray.length / 2;
|
||||
boolean exact;
|
||||
|
||||
if(numArray.length % 2 == 0) {
|
||||
median = (numArray[midVar] + numArray[midVar-1]) / 2;
|
||||
exact = false;
|
||||
} else {
|
||||
median = numArray[midVar];
|
||||
exact = true;
|
||||
}
|
||||
|
||||
System.out.println("Median: " + median);
|
||||
|
||||
if(verbose) {
|
||||
for(int i = 0; i < numArray.length; i++) {
|
||||
if(!exact) {
|
||||
if(i == midVar - 1) {
|
||||
System.out.print(">>" + numArray[i] + " !" + median + "! ");
|
||||
} else if(i == midVar) {
|
||||
System.out.print(numArray[i] + "<< ");
|
||||
} else {
|
||||
System.out.print(numArray[i] + " ");
|
||||
}
|
||||
} else {
|
||||
if(i == midVar) {
|
||||
System.out.print(">>" + numArray[i] + "<< ");
|
||||
} else {
|
||||
System.out.print(numArray[i] + " ");
|
||||
}
|
||||
}
|
||||
}
|
||||
System.out.print("\n\n");
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: Needs to calculate haflway between the median value and the last value.
|
||||
private static void calcQ3() {
|
||||
/*int q3Pos = (numArray.length * 3) / 4;
|
||||
boolean exact;
|
||||
|
||||
if((numArray.length * 3) % 4 != 0) {
|
||||
q3 = (numArray[q3Pos+1] + numArray[q3Pos]) / 2;
|
||||
exact = false;
|
||||
} else {
|
||||
q3 = numArray[q3Pos];
|
||||
exact = true;
|
||||
}
|
||||
|
||||
System.out.println("Q3: " + q3);
|
||||
|
||||
if(verbose) {
|
||||
for(int i = 0; i < numArray.length; i++) {
|
||||
if(!exact) {
|
||||
if(i == q3Pos) {
|
||||
System.out.print(">>" + numArray[i] + " !" + q3 + "! ");
|
||||
} else if(i == q3Pos + 1) {
|
||||
System.out.print(numArray[i] + "<< ");
|
||||
} else {
|
||||
System.out.print(numArray[i] + " ");
|
||||
}
|
||||
} else {
|
||||
if(i == q3Pos) {
|
||||
System.out.print(">>" + numArray[i] + "<< ");
|
||||
} else {
|
||||
System.out.print(numArray[i] + " ");
|
||||
}
|
||||
}
|
||||
}
|
||||
System.out.print("\n\n");
|
||||
}*/
|
||||
System.out.println("Q3 is not currently functional.\n");
|
||||
}
|
||||
|
||||
private static void calcMode() {
|
||||
HashMap<Float, Float> fx = new HashMap<Float, Float>();
|
||||
|
||||
for(float x: numArray) {
|
||||
Float f = fx.get(x);
|
||||
if(f == null) {
|
||||
fx.put(x, (float)1);
|
||||
} else {
|
||||
fx.put(x, f + 1);
|
||||
}
|
||||
}
|
||||
|
||||
float modeFreq = 0;
|
||||
|
||||
for(Map.Entry<Float, Float> entry: fx.entrySet()) {
|
||||
float freq = entry.getValue();
|
||||
if(freq > modeFreq) {
|
||||
modeFreq = freq;
|
||||
mode = entry.getKey();
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("Mode: " + mode + " (frequency: " + modeFreq + ")");
|
||||
|
||||
if(verbose) {
|
||||
for(Map.Entry<Float, Float> entry:fx.entrySet()) {
|
||||
System.out.print(entry.getKey() + "(" + entry.getValue() + ") ");
|
||||
}
|
||||
System.out.print("\n\n");
|
||||
}
|
||||
}
|
||||
|
||||
private static void calcRange() {
|
||||
int l = numArray.length -1;
|
||||
range = numArray[l] - numArray[0];
|
||||
|
||||
System.out.println("Range: " + range);
|
||||
|
||||
if(verbose) {
|
||||
System.out.println(numArray[l] + " - " + numArray[0] + " = " + range + "\n");
|
||||
}
|
||||
}
|
||||
|
||||
private static void calcStdDev() {
|
||||
float difSum = 0;
|
||||
for(int i = 0; i < numArray.length; i++) {
|
||||
difSum += numArray[i] - mean;
|
||||
}
|
||||
|
||||
stdDev = difSum / (float)Math.sqrt((double)numArray.length);
|
||||
|
||||
System.out.println("Standard Deviation: " + stdDev);
|
||||
|
||||
if(verbose) {
|
||||
System.out.print("sqrt((");
|
||||
for(int i = 0; i < numArray.length; i++) {
|
||||
System.out.print(numArray[i] + " - " + mean);
|
||||
if(i != numArray.length - 1) {
|
||||
System.out.print(" + ");
|
||||
}
|
||||
}
|
||||
System.out.print(")^2 / " + numArray.length + ") = " + stdDev + "\n\n");
|
||||
}
|
||||
}
|
||||
|
||||
private static void calcVariance() {
|
||||
variance = stdDev * stdDev;
|
||||
|
||||
System.out.println("Variance: " + variance);
|
||||
|
||||
if(verbose) {
|
||||
System.out.println(stdDev + "^2 = " + variance + "\n");
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user