เพิ่ม Ball bounce calculator

This commit is contained in:
Late Night Defender 2023-04-03 00:53:24 +07:00
parent 50bbb4ec55
commit 2c0ea07d01
11 changed files with 380 additions and 0 deletions

View file

@ -0,0 +1,38 @@
# ball-bounce-calculator-alt
"ถ้าบอลลูกหนึ่งเมื่อตกกระทบพื้นแล้วจะกระดอนขึ้นในแนวดิ่งเป็นระยะทาง 2/5 เท่าของความสูงที่ตก และ ลูกบอลจะไม่กระดอนอีกถ้าตกจาก ความสูงที่น้อยกว่าหรือเท่ากับ 1 เซนติเมตร"
โปรแกรมนี้จะเพื่อรับความสูงจากพื้นเริ่มต้นของลูกบอลลูกนี้จากนั้นคำนวณหาระยะทางรวมที่ลูกบอลเคลื่อนที่ทั้งหมด (ระยะทางที่ตกรวมกับระยะทางที่กระดอนทั้งหมด) พร้อมกับจำนวนครั้งที่ลูกบอลกระทบพื้นทั้งหมด (ทั้งกระดอนและไม่กระดอน)
**เป็นอีกเวอร์ชันหนึ่งของ ball-bounce-calculator ในเวอร์ชันนี้ จะมีการนำสูตรอนุกรมเรขาคณิตมาใช้ในการคำนวณ**
![Formula](info/formula.png)
โปรแกรมนี้เขียนขึ้นด้วย C++ และทดสอบ compile ด้วย GCC 11.2.1 บน Fedora Linux 34
สคริปต์ติดตั้งและถอนการติดตั้ง ทดสอบรันด้วย
**ตัวอย่างการทำงานของโปรแกรม**
![Screenshot](info/screenshot.png)
**วิธีติดตั้ง (สำหรับ Linux เท่านั้น)**
1. โคลน git นี้
`$ git clone https://gitlab.com/sashapgt/ball-bounce-calculator-alt.git`
2. cd เข้าโฟลเดอร์ของ git นี้ แล้วรันสคริปต์ติดตั้ง
`$ cd ball-bounce-calculator-alt && sh install.sh`
3. เรียกใช้จากเทอร์มินัลได้เลย
`$ ball-bounce-calculator-alt`
**วิธีถอนการติดตั้ง (สำหรับ Linux เท่านั้น)**
1. รันสคริปต์ถอนการติดตั้งจากในโฟลเดอร์ git นี้
`$ sh uninstall.sh`
2. ลบโฟลเดอร์ git นี้

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View file

@ -0,0 +1,60 @@
#!/bin/bash
DIR1=$HOME/.local/bin
DIR2=/usr/bin
APPNAME=ball-bounce-calculator-alt
clear
if [[ "${EUID}" -eq 0 ]]; then
echo " "
echo "คุณกำลังใช้สิทธิ์ Root! ต้องการดำเนินการติดตั้งต่อใน $DIR2 หรือไม่"
echo " "
echo "1) ไม่"
echo "2) ใช่"
echo " "
read -p "ใส่คำตอบของคุณ [1] : " INSTALLCHOICE
until [[ -z "$INSTALLCHOICE" || "$INSTALLCHOICE" =~ ^[1-2]$ ]]; do
printf "\n$INSTALLCHOICE: ค่าที่ใส่ไม่ถูกต้อง\n\n"
read -p "ใส่คำตอบของคุณ [1] : " INSTALLCHOICE
done
case "$INSTALLCHOICE" in
1|"")
exit
;;
2)
DIR=$DIR2
printf "\nกำลัง Build และติดตั้ง $APPNAME ใน $DIR\n"
g++ -Wall -o "$DIR/$APPNAME" "main.cpp"
;;
esac
else
echo " "
echo "เลือกผู้ใช้ที่ต้องการติดตั้งให้"
echo " "
echo "1) $USER ($DIR1)"
echo "2) ทุกคน ($DIR2)"
echo " "
read -p "ใส่คำตอบของคุณ [1] : " INSTALLCHOICE
until [[ -z "$INSTALLCHOICE" || "$INSTALLCHOICE" =~ ^[1-2]$ ]]; do
printf "\n$INSTALLCHOICE: ค่าที่ใส่ไม่ถูกต้อง\n\n"
read -p "ใส่คำตอบของคุณ [1] : " INSTALLCHOICE
done
case "$INSTALLCHOICE" in
1|"")
DIR=$DIR1
if [[ ! -d "$DIR" ]]; then
mkdir $DIR
fi
printf "\nกำลัง Build และติดตั้ง $APPNAME ใน $DIR\n"
g++ -Wall -o "$DIR/$APPNAME" "main.cpp"
;;
2)
DIR=$DIR2
printf "\nกำลัง Build และติดตั้ง $APPNAME ใน $DIR\n"
printf "\nกรุณาใส่รหัสผ่าน sudo หากถูกถามในการติดตั้ง\n\n"
sudo g++ -Wall -o "$DIR/$APPNAME" "main.cpp"
;;
esac
fi
printf "\nการติดตั้ง $APPNAME ใน $DIR เสร็จสมบูรณ์\n"

View file

@ -0,0 +1,22 @@
#include<stdio.h>
int main() {
// h คือความสูงเริ่มต้น i คือความสูง ณ จุดจุดหนึ่ง j คือระยะทางสะสม และ k คือจำนวนครั้งที่กระดอน m จะดูว่ายกกำลังไปกี่ครั้ง
float h,i,j=0;
int k=0;
float m = 0.4;
printf("Height (in centimeters) = ");
scanf("%f", &h);
j=h; // การตกครั้งแรก
i=h;
while (i>1) { //ตรวจว่าความสูงมากกว่า 1 เซนติเมตรหรือไม่
k=k+1;
i=(0.4)*i;
}
for(int l=0; l<k; l++){
m = m*0.4;
}
printf("Distance = %.2f",(j*((1.0-m)/(1.0-0.4)))+((j*0.4)*((1.0-m/0.4)/(1.0-0.4))));
printf("\nBounce count = %d",k);
return 0;
}

View file

@ -0,0 +1,74 @@
#!/bin/bash
DIR1=$HOME/.local/bin
DIR2=/usr/bin
APPNAME=ball-bounce-calculator-alt
clear
if [[ "${EUID}" -eq 0 ]]; then
echo " "
echo "คุณกำลังใช้สิทธิ์ Root! ต้องการถอนการติดตั้งจาก $DIR2 หรือไม่"
echo " "
echo "1) ไม่"
echo "2) ใช่"
echo " "
read -p "ใส่คำตอบของคุณ [1] : " UNINSTALLCHOICE
until [[ -z "$UNINSTALLCHOICE" || "$UNINSTALLCHOICE" =~ ^[1-2]$ ]]; do
printf "\n$UNINSTALLCHOICE: ค่าที่ใส่ไม่ถูกต้อง\n\n"
read -p "ใส่คำตอบของคุณ [1] : " UNINSTALLCHOICE
done
case "$UNINSTALLCHOICE" in
1|"")
exit
;;
2)
DIR=$DIR2
if [[ -f "$DIR/$APPNAME" ]]; then
echo "กำลังถอนการติดตั้ง $APPNAME จาก $DIR"
sudo rm $DIR/$APPNAME
else
echo "ไม่สามารถถอนการติดตั้งได้เนื่องจากยังไม่ได้ติดตั้งแอปพลิเคชันใน $DIR"
fi
;;
esac
else
echo " "
echo "เลือกผู้ใช้ที่ต้องการถอนติดตั้งให้"
echo " "
echo "1) $USER ($DIR1)"
echo "2) ทุกคน ($DIR2)"
echo " "
read -p "ใส่คำตอบของคุณ : " UNINSTALLCHOICE
until [[ -z "$UNINSTALLCHOICE" || "$UNINSTALLCHOICE" =~ ^[1-2]$ ]]; do
echo "$UNINSTALLCHOICE: ค่าที่ใส่ไม่ถูกต้อง"
read -p "ใส่คำตอบของคุณ :" UNINSTALLCHOICE
done
case "$UNINSTALLCHOICE" in
1)
DIR=$DIR1
if [[ -f "$DIR/$APPNAME" ]]; then
printf "\nกำลังถอนการติดตั้ง $APPNAME จาก $DIR\n"
rm $DIR/$APPNAME
else
printf "\nไม่สามารถถอนการติดตั้งได้เนื่องจากยังไม่ได้ติดตั้งแอปพลิเคชันใน $DIR"
exit
fi
;;
2)
DIR=$DIR2
if [[ -f "$DIR/$APPNAME" ]]; then
printf "\nกำลังถอนการติดตั้ง $APPNAME จาก $DIR\n"
printf "\nกรุณาใส่รหัสผ่าน sudo หากถูกถามในการติดตั้ง\n\n"
sudo rm $DIR/$APPNAME
else
printf "\nไม่สามารถถอนการติดตั้งได้เนื่องจากยังไม่ได้ติดตั้งแอปพลิเคชันใน $DIR"
exit
fi
;;
"")
exit
;;
esac
fi
printf "\nการถอนการติดตั้ง $APPNAME จาก $DIR เสร็จสมบูรณ์\n"

View file

@ -0,0 +1,33 @@
# ball-bounce-calculator
"ถ้าบอลลูกหนึ่งเมื่อตกกระทบพื้นแล้วจะกระดอนขึ้นในแนวดิ่งเป็นระยะทาง 2/5 เท่าของความสูงที่ตก และ ลูกบอลจะไม่กระดอนอีกถ้าตกจาก ความสูงที่น้อยกว่าหรือเท่ากับ 1 เซนติเมตร"
โปรแกรมนี้จะเพื่อรับความสูงจากพื้นเริ่มต้นของลูกบอลลูกนี้จากนั้นคำนวณหาระยะทางรวมที่ลูกบอลเคลื่อนที่ทั้งหมด (ระยะทางที่ตกรวมกับระยะทางที่กระดอนทั้งหมด) พร้อมกับจำนวนครั้งที่ลูกบอลกระทบพื้นทั้งหมด (ทั้งกระดอนและไม่กระดอน)
โปรแกรมนี้เขียนขึ้นด้วย C++ และทดสอบ compile ด้วย GCC 11.2.1 บน Fedora Linux 34
**ตัวอย่างการทำงานของโปรแกรม**
![Screenshot](info/screenshot.png)
**วิธีติดตั้ง (สำหรับ Linux เท่านั้น)**
1. โคลน git นี้
`$ git clone https://gitlab.com/sashapgt/ball-bounce-calculator.git`
2. cd เข้าโฟลเดอร์ของ git นี้ แล้วรันสคริปต์ติดตั้ง
`$ cd ball-bounce-calculator && sh install.sh`
3. เรียกใช้จากเทอร์มินัลได้เลย
`$ ball-bounce-calculator`
**วิธีถอนการติดตั้ง (สำหรับ Linux เท่านั้น)**
1. รันสคริปต์ถอนการติดตั้งจากในโฟลเดอร์ git นี้
`$ sh uninstall.sh`
2. ลบโฟลเดอร์ git นี้

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View file

@ -0,0 +1,60 @@
#!/bin/sh
DIR1=$HOME/.local/bin
DIR2=/usr/bin
APPNAME=ball-bounce-calculator
clear
if [[ "${EUID}" -eq 0 ]]; then
echo " "
echo "คุณกำลังใช้สิทธิ์ Root! ต้องการดำเนินการติดตั้งต่อใน $DIR2 หรือไม่"
echo " "
echo "1) ไม่"
echo "2) ใช่"
echo " "
read -p "ใส่คำตอบของคุณ [1] : " INSTALLCHOICE
until [[ -z "$INSTALLCHOICE" || "$INSTALLCHOICE" =~ ^[1-2]$ ]]; do
printf "\n$INSTALLCHOICE: ค่าที่ใส่ไม่ถูกต้อง\n\n"
read -p "ใส่คำตอบของคุณ [1] : " INSTALLCHOICE
done
case "$INSTALLCHOICE" in
1|"")
exit
;;
2)
DIR=$DIR2
printf "\nกำลัง Build และติดตั้ง $APPNAME ใน $DIR\n"
g++ -Wall -o "$DIR/$APPNAME" "main.cpp"
;;
esac
else
echo " "
echo "เลือกผู้ใช้ที่ต้องการติดตั้งให้"
echo " "
echo "1) $USER ($DIR1)"
echo "2) ทุกคน ($DIR2)"
echo " "
read -p "ใส่คำตอบของคุณ [1] : " INSTALLCHOICE
until [[ -z "$INSTALLCHOICE" || "$INSTALLCHOICE" =~ ^[1-2]$ ]]; do
printf "\n$INSTALLCHOICE: ค่าที่ใส่ไม่ถูกต้อง\n\n"
read -p "ใส่คำตอบของคุณ [1] : " INSTALLCHOICE
done
case "$INSTALLCHOICE" in
1|"")
DIR=$DIR1
if [[ ! -d "$DIR" ]]; then
mkdir $DIR
fi
printf "\nกำลัง Build และติดตั้ง $APPNAME ใน $DIR\n"
g++ -Wall -o "$DIR/$APPNAME" "main.cpp"
;;
2)
DIR=$DIR2
printf "\nกำลัง Build และติดตั้ง $APPNAME ใน $DIR\n"
printf "\nกรุณาใส่รหัสผ่าน sudo หากถูกถามในการติดตั้ง\n\n"
sudo g++ -Wall -o "$DIR/$APPNAME" "main.cpp"
;;
esac
fi
printf "\nการติดตั้ง $APPNAME ใน $DIR เสร็จสมบูรณ์\n"

View file

@ -0,0 +1,19 @@
#include<stdio.h>
int main() {
// h คือความสูงเริ่มต้น i คือความสูง ณ จุดจุดหนึ่ง j คือระยะทางสะสม และ k คือจำนวนครั้งที่กระดอน
float h,i,j=0;
int k=0;
printf("Height (in centimeters) = ");
scanf("%f", &h);
j=h; // การตกครั้งแรก
i=h;
while (i>1) { //ตรวจว่าความสูงมากกว่า 1 เซนติเมตรหรือไม่
k=k+1;
i=(0.4)*i;
j=j+(2*i);
}
printf("Distance = %.2f",j);
printf("\nBounce count = %d",k);
return 0;
}

View file

@ -0,0 +1,74 @@
#!/bin/sh
DIR1=$HOME/.local/bin
DIR2=/usr/bin
APPNAME=ball-bounce-calculator
clear
if [[ "${EUID}" -eq 0 ]]; then
echo " "
echo "คุณกำลังใช้สิทธิ์ Root! ต้องการถอนการติดตั้งจาก $DIR2 หรือไม่"
echo " "
echo "1) ไม่"
echo "2) ใช่"
echo " "
read -p "ใส่คำตอบของคุณ [1] : " UNINSTALLCHOICE
until [[ -z "$UNINSTALLCHOICE" || "$UNINSTALLCHOICE" =~ ^[1-2]$ ]]; do
printf "\n$UNINSTALLCHOICE: ค่าที่ใส่ไม่ถูกต้อง\n\n"
read -p "ใส่คำตอบของคุณ [1] : " UNINSTALLCHOICE
done
case "$UNINSTALLCHOICE" in
1|"")
exit
;;
2)
DIR=$DIR2
if [[ -f "$DIR/$APPNAME" ]]; then
echo "กำลังถอนการติดตั้ง $APPNAME จาก $DIR"
sudo rm $DIR/$APPNAME
else
echo "ไม่สามารถถอนการติดตั้งได้เนื่องจากยังไม่ได้ติดตั้งแอปพลิเคชันใน $DIR"
fi
;;
esac
else
echo " "
echo "เลือกผู้ใช้ที่ต้องการถอนติดตั้งให้"
echo " "
echo "1) $USER ($DIR1)"
echo "2) ทุกคน ($DIR2)"
echo " "
read -p "ใส่คำตอบของคุณ : " UNINSTALLCHOICE
until [[ -z "$UNINSTALLCHOICE" || "$UNINSTALLCHOICE" =~ ^[1-2]$ ]]; do
echo "$UNINSTALLCHOICE: ค่าที่ใส่ไม่ถูกต้อง"
read -p "ใส่คำตอบของคุณ :" UNINSTALLCHOICE
done
case "$UNINSTALLCHOICE" in
1)
DIR=$DIR1
if [[ -f "$DIR/$APPNAME" ]]; then
printf "\nกำลังถอนการติดตั้ง $APPNAME จาก $DIR\n"
rm $DIR/$APPNAME
else
printf "\nไม่สามารถถอนการติดตั้งได้เนื่องจากยังไม่ได้ติดตั้งแอปพลิเคชันใน $DIR"
exit
fi
;;
2)
DIR=$DIR2
if [[ -f "$DIR/$APPNAME" ]]; then
printf "\nกำลังถอนการติดตั้ง $APPNAME จาก $DIR\n"
printf "\nกรุณาใส่รหัสผ่าน sudo หากถูกถามในการติดตั้ง\n\n"
sudo rm $DIR/$APPNAME
else
printf "\nไม่สามารถถอนการติดตั้งได้เนื่องจากยังไม่ได้ติดตั้งแอปพลิเคชันใน $DIR"
exit
fi
;;
"")
exit
;;
esac
fi
printf "\nการถอนการติดตั้ง $APPNAME จาก $DIR เสร็จสมบูรณ์\n"