結膜 是一層近乎透明之薄膜,覆蓋在鞏膜和眼瞼上。
角膜 是一透明無色且沒有血管的組織,由規則排列細胞所構成。
結膜炎 分為細菌性、病毒性、過敏性結膜炎。
1. 細菌性急性結膜炎
會有紅眼、刺痛、燒灼感、分泌物較黏稠等症狀,
若引起角膜病變會伴有畏光現象。
最常見者為葡萄球菌和鏈球菌引起,一般用簡單的抗生素即可治癒。
2. 病毒性急性結膜炎
主要是流行性角結膜炎,常由腺病毒引起,一般症狀是急性發作之紅眼、流淚、分泌物增加和畏光現象,並有眼皮腫和耳前淋巴腺腫大,嚴重時會有結膜下出血和偽膜出現。
治療方式以抗發炎眼藥水來減輕不舒服症狀,一般病程約一至兩星期。但有些病患會有角膜混濁和異物感或畏光等症狀,這些混濁有時會持續幾個月或一兩年才消失。
3. 過敏性結膜炎
因接觸到過敏原引起,如花粉、毛髮、纖毛和塵土等,或者病人本有過敏體質如氣喘和異位性皮膚炎等。症狀為流淚、癢、結膜紅腫,分泌物較清澈。一般可見到結膜紅腫,甚至眼皮也會水腫,但角膜並不受波及。
治療方法可用巨細胞安定劑 Intal 等,比較厲害時可考慮使用短暫類固醇改善急性不適。
春季性和異位性角結膜炎則有較厲害表現,可能產生角膜糜爛或結痂等,而造成畏光和影響視力。一般需用到類固醇才能控制,但須小心使用,注意是否因此導致青光眼產生。
正常的角膜之上有上皮細胞保護不易感染,但當角膜上皮細胞受到損傷時(如外傷、戴隱形眼鏡等),微生物、病菌等會趁機侵入角膜,造成嚴重的角膜炎。一旦角
膜發炎侵入了上皮層底下的 Bowman 膜,則會留下白色混濁不透明的瘢痕,嚴重的角膜發炎引起潰瘍,甚至會導致失明。
流行性角結膜炎的傳染力極強,預防之道在於平時要維持良好的衛生習慣,常用肥皂洗手,並保持乾燥,避免用手揉眼睛。
要避免角膜炎方法就是要避免角膜有外傷,且在配戴隱形眼鏡有任何不適時,應儘快停止配戴,立即給眼科醫師檢查是否有角膜潰爛。早期診斷早期治療是保護靈魂之窗最好的方法。
https://www.ntuh.gov.tw/OPH/DocLib10/%E7%B0%A1%E4%BB%8B%E7%B5%90%E8%86%9C%E7%82%8E%E5%92%8C%E8%A7%92%E8%86%9C%E7%82%8E.aspx
一、眼睛紅。
二、結膜充血。
三、眼睛分泌物很多。
自己的小練習, 如有侵權, 被我不小心引用沒標名出處或是不想被我標示出來, 趕快跟我講, 有時候一忙會忘記看這個, 有問題或是有更好的辦法更要跟我講, 如果有什麼覺得可以更積極的, 也希望可以小力的酸我, 我玻璃心阿
總網頁瀏覽量
2015年10月29日 星期四
2015年10月27日 星期二
[Java] Dialog 的範例 showInputDialog
參考資料:
https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html
import javax.swing.JOptionPane;
public class Dialog_001{
public static void main(String args[]){
String name = JOptionPane.showInputDialog("Name: ","AVC");
//第二格就變程預設值, 可以字串也可以整數,試了連浮點數都行
String message = String.format("Welcome, %s, to me",name);
JOptionPane.showMessageDialog(null,message);
}
}
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
showMessageDialog方法中, 針對不同的用途用不同參數來顯示User要顯示的東西.
import javax.swing.JOptionPane;
public class Dialog_001{
public static void main(String args[]){
String name = JOptionPane.showInputDialog("Name: ","Ha");
String message = String.format("Input is : %s.",name);
JOptionPane.showMessageDialog(null,message,"Title",JOptionPane.PLAIN_MESSAGE);
}
}
showMessageDialog 的第三個和第四個參數,
要就都要有, 不然就都不要有,不然會編譯錯誤:
Dialog_001.java:9: error: no suitable method found for showMessageDialog(<null>,String,String)
JOptionPane.showMessageDialog(null,message,"Title");
^
method JOptionPane.showMessageDialog(Component,Object) is not applicable
(actual and formal argument lists differ in length)
method JOptionPane.showMessageDialog(Component,Object,String,int) is not applicable
(actual and formal argument lists differ in length)
method JOptionPane.showMessageDialog(Component,Object,String,int,Icon) is not applicable
(actual and formal argument lists differ in length)
1 error
第三個參數代表在按下確定之後,
顯示出來的視窗標題, 不寫的話就只會顯示 Message,
而第四個參數則是表示視窗要用哪種方式顯示.
都沒填就會顯示:
JOptionPane.WARNING_MESSAGE:
在這裡 icon是第五個參數,
要使用時要先 import javax.swing.ImageIcon ;
用 ImageIcon icon = new ImageIcon("C:\\Documents\\b.jpg");
在參數部分試圖片檔案的完整路徑,
用過jpg跟png都可以.
https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html
import javax.swing.JOptionPane;
public class Dialog_001{
public static void main(String args[]){
String name = JOptionPane.showInputDialog("Name: ","AVC");
//第二格就變程預設值, 可以字串也可以整數,試了連浮點數都行
String message = String.format("Welcome, %s, to me",name);
JOptionPane.showMessageDialog(null,message);
}
}
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
Icon description | Java look and feel | Windows look and feel |
---|---|---|
question | ||
information | ||
warning | ||
error |
showMessageDialog方法中, 針對不同的用途用不同參數來顯示User要顯示的東西.
import javax.swing.JOptionPane;
public class Dialog_001{
public static void main(String args[]){
String name = JOptionPane.showInputDialog("Name: ","Ha");
String message = String.format("Input is : %s.",name);
JOptionPane.showMessageDialog(null,message,"Title",JOptionPane.PLAIN_MESSAGE);
}
}
showMessageDialog 的第三個和第四個參數,
要就都要有, 不然就都不要有,不然會編譯錯誤:
Dialog_001.java:9: error: no suitable method found for showMessageDialog(<null>,String,String)
JOptionPane.showMessageDialog(null,message,"Title");
^
method JOptionPane.showMessageDialog(Component,Object) is not applicable
(actual and formal argument lists differ in length)
method JOptionPane.showMessageDialog(Component,Object,String,int) is not applicable
(actual and formal argument lists differ in length)
method JOptionPane.showMessageDialog(Component,Object,String,int,Icon) is not applicable
(actual and formal argument lists differ in length)
1 error
第三個參數代表在按下確定之後,
顯示出來的視窗標題, 不寫的話就只會顯示 Message,
而第四個參數則是表示視窗要用哪種方式顯示.
都沒填就會顯示:
JOptionPane.WARNING_MESSAGE:
JOptionPane.ERROR_MESSAGE:
JOptionPane.PLAIN_MESSAGE:
JOptionPane.INFORMATION_MESSAGE,icon
在這裡 icon是第五個參數,
要使用時要先 import javax.swing.ImageIcon ;
用 ImageIcon icon = new ImageIcon("C:\\Documents\\b.jpg");
在參數部分試圖片檔案的完整路徑,
用過jpg跟png都可以.
2015年10月26日 星期一
[Crypto] diceware 密碼生成器 概念
在 https://share.inside.com.tw/posts/20241 的報導,
說一個小女孩利用diceware 產了密碼來賣人,
一組密碼 每個 2 美元.
理面對於 Diceware 解釋是講
Diceware 是一個有著幾十年曆史的生成密碼的方式。它的操作方法是擲六個面的骰子來隨機生成數字,數字會對應一串字符。這些字合併成一個無意義的字符串(大概像這樣 ample banal bias delta gist latex),因為是隨機的所以非常難破解。不過這個口令對人們來說又很容易記住。
有點不太知道在講啥, 所以另外查了一下資料
https://www.v2ex.com/t/106491
diceware 的想法是这样的, 用字母数字和标点组合的密码实在是很难记,用简短的单词反而好记。diceware.com 提供了一个66666个单词的列表, 每 个单词用数字标上序号, 然后你用骰子连掷5次得到一个数字, 比如 12345, 然后就在表中查到相应的单词apathy。然后再掷骰子5次,得到第 二个单词, 你自己决定要几个单词,一般推荐是6个单词以上。 这样就得到一个长达20个字母的密码。 虽然看上去这跟我们的“常识”相反:不是说不要用 字典里的单词吗,这说的是只用一个单词的情况。 但即使黑客知道你在使用diceware,要算出你的密码也是很困难的, 比如用6个单词,就有 66666^6种可能,比一般的短密码要可靠,而且好记。
上面這個比較清楚一點,
先擲一個均勻的骰子5次得到一個長度為5的整數, 每個整數在對應到一個單字簿上可以得到一個單詞, 如果不夠常, 在多坐幾次.
像這樣吧 我猜 顆
骰子擲五次 -> 12345
f(12345) -> apathy
但是以上面的說法, 應該只有5^5種方法阿...
至於登入網站的密碼長度限制, 反正太少就多做幾次就好,
網站底下在Q&A種也提到
差别是diceware 生成的單詞的目的有兩個:
第一整個password要夠長
第二單詞要比隨機的字母组合好記
但是第二點來看, 比隨機好記就是不夠隨機,
所以還是一樣有優點有缺點的.
說一個小女孩利用diceware 產了密碼來賣人,
一組密碼 每個 2 美元.
理面對於 Diceware 解釋是講
Diceware 是一個有著幾十年曆史的生成密碼的方式。它的操作方法是擲六個面的骰子來隨機生成數字,數字會對應一串字符。這些字合併成一個無意義的字符串(大概像這樣 ample banal bias delta gist latex),因為是隨機的所以非常難破解。不過這個口令對人們來說又很容易記住。
有點不太知道在講啥, 所以另外查了一下資料
https://www.v2ex.com/t/106491
diceware 的想法是这样的, 用字母数字和标点组合的密码实在是很难记,用简短的单词反而好记。diceware.com 提供了一个66666个单词的列表, 每 个单词用数字标上序号, 然后你用骰子连掷5次得到一个数字, 比如 12345, 然后就在表中查到相应的单词apathy。然后再掷骰子5次,得到第 二个单词, 你自己决定要几个单词,一般推荐是6个单词以上。 这样就得到一个长达20个字母的密码。 虽然看上去这跟我们的“常识”相反:不是说不要用 字典里的单词吗,这说的是只用一个单词的情况。 但即使黑客知道你在使用diceware,要算出你的密码也是很困难的, 比如用6个单词,就有 66666^6种可能,比一般的短密码要可靠,而且好记。
上面這個比較清楚一點,
先擲一個均勻的骰子5次得到一個長度為5的整數, 每個整數在對應到一個單字簿上可以得到一個單詞, 如果不夠常, 在多坐幾次.
像這樣吧 我猜 顆
骰子擲五次 -> 12345
f(12345) -> apathy
但是以上面的說法, 應該只有5^5種方法阿...
至於登入網站的密碼長度限制, 反正太少就多做幾次就好,
網站底下在Q&A種也提到
差别是diceware 生成的單詞的目的有兩個:
第一整個password要夠長
第二單詞要比隨機的字母组合好記
但是第二點來看, 比隨機好記就是不夠隨機,
所以還是一樣有優點有缺點的.
[Java] GUI 圖形化界面 Dialog1
GUI Graphical User Interface
用對話框 dialog boxes (dialog) 顯示資料.
通常是用來顯示重要訊息用.
JOptionPane 是一個已經有簡略且完整的 dialog 類別
JOptionPane 是 javax.swing套件中的類別.
javax.swing套件中包含了許多建構 GUI 應用程式的類別.
//Fig. 3.17:Dialog1
import javax.swing.JOptionPane; //import class JOptionPane
public class Dialog1{
public static void main(String args[]){
JOptionPane.showMessageDialog(null,"AS");
} //end main
} // end Dialog1
JOptionPane類別中的showMessageDialog方法是一個(static method),
所以User不用自行呼叫函式,
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
現在分兩部分, 輸入跟輸出分開,
輸入畫面稱為 input dialog 輸入對話框, 讓User輸入資料.
JOptionPane類別的 showInputDialog() 方法會顯示使用者輸入文字的欄位,
而 showInputDialog() 的引數就是要在對話框中顯示的提示詞,
一般用來告知使用者要輸入的資料.
其中在對話框中 User 所輸入的就是一串字元, 所以不是整數歐 !
然後以字串方式傳回, 並儲存在 name 變數中.
其中如果最後按下的鍵為 取消 Cancel button 則會以 null 回傳.
之後用 String 類別的 format() 靜態方法,
回傳經過格式化的字串, 而非顯示在 cmd 中.
//Fig. 3.17:NameDialog
import javax.swing.JOptionPane;
public class NameDialog{
public static void main(String args[]){
String name = JOptionPane.showInputDialog("Name: ");
System.out.println("name: "+name);
String message = String.format("Welcome, %s, to me",name);
System.out.println("message: "+message);
JOptionPane.showMessageDialog(null,message);
}
}
----------------------------------------------------------------------------------------------------
在輸入時打入 HW 顯示畫面
在裡面加了兩行 System.out.,println
name: GGGG
message: Welcome, GGGG, to me
----------------------------------------------------------------------------------------------------
如果把
String message = String.format("Welcome, %s, to me",name);
換成
int message = String.format("Welcome, %s, to me",name);
就會跑出例外出來
NameDialog.java:7: incompatible types
found : java.lang.String
required: int
int num = JOptionPane.showInputDialog("num: ");
^
Because showInputDialog just return type of string.
所以要利用轉型, 把字串轉型成整數型態,
Integer.parseInt(String s)
parseInt() 方法是一個 String 類別的靜態方法,
其中如果給了一個不是整數的字串,
就會發生例外錯誤.
以下是小小修改的範例:
import javax.swing.JOptionPane;
public class NameDialog{
public static void main(String args[]){
String name = JOptionPane.showInputDialog("Name: ");
System.out.println("name: "+name);
String old = JOptionPane.showInputDialog("oldnum : ");
int oldnum = Integer.parseInt(old);
System.out.println("oldnum: "+oldnum);
String message = String.format("Welcome, %s, to me\n You are %d year old",name,oldnum);
System.out.println("message: "+message);
JOptionPane.showMessageDialog(null,message);
}
}
如果 old 不是給整數, parseInt() 會跳出例外訊息.
name: A
Exception in thread "main" java.lang.NumberFormatException: For input string: "A
"
at java.lang.NumberFormatException.forInputString(NumberFormatException.
java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.parseInt(Integer.java:499)
at NameDialog.main(NameDialog.java:8)
參考Java 程式設計藝術
用對話框 dialog boxes (dialog) 顯示資料.
通常是用來顯示重要訊息用.
JOptionPane 是一個已經有簡略且完整的 dialog 類別
JOptionPane 是 javax.swing套件中的類別.
javax.swing套件中包含了許多建構 GUI 應用程式的類別.
//Fig. 3.17:Dialog1
import javax.swing.JOptionPane; //import class JOptionPane
public class Dialog1{
public static void main(String args[]){
JOptionPane.showMessageDialog(null,"AS");
} //end main
} // end Dialog1
JOptionPane類別中的showMessageDialog方法是一個(static method),
所以User不用自行呼叫函式,
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
現在分兩部分, 輸入跟輸出分開,
輸入畫面稱為 input dialog 輸入對話框, 讓User輸入資料.
JOptionPane類別的 showInputDialog() 方法會顯示使用者輸入文字的欄位,
而 showInputDialog() 的引數就是要在對話框中顯示的提示詞,
一般用來告知使用者要輸入的資料.
其中在對話框中 User 所輸入的就是一串字元, 所以不是整數歐 !
然後以字串方式傳回, 並儲存在 name 變數中.
其中如果最後按下的鍵為 取消 Cancel button 則會以 null 回傳.
之後用 String 類別的 format() 靜態方法,
回傳經過格式化的字串, 而非顯示在 cmd 中.
//Fig. 3.17:NameDialog
import javax.swing.JOptionPane;
public class NameDialog{
public static void main(String args[]){
String name = JOptionPane.showInputDialog("Name: ");
System.out.println("name: "+name);
String message = String.format("Welcome, %s, to me",name);
System.out.println("message: "+message);
JOptionPane.showMessageDialog(null,message);
}
}
----------------------------------------------------------------------------------------------------
在輸入時打入 HW 顯示畫面
在裡面加了兩行 System.out.,println
name: GGGG
message: Welcome, GGGG, to me
----------------------------------------------------------------------------------------------------
如果把
String message = String.format("Welcome, %s, to me",name);
換成
int message = String.format("Welcome, %s, to me",name);
就會跑出例外出來
NameDialog.java:7: incompatible types
found : java.lang.String
required: int
int num = JOptionPane.showInputDialog("num: ");
^
Because showInputDialog just return type of string.
所以要利用轉型, 把字串轉型成整數型態,
Integer.parseInt(String s)
parseInt() 方法是一個 String 類別的靜態方法,
其中如果給了一個不是整數的字串,
就會發生例外錯誤.
以下是小小修改的範例:
import javax.swing.JOptionPane;
public class NameDialog{
public static void main(String args[]){
String name = JOptionPane.showInputDialog("Name: ");
System.out.println("name: "+name);
String old = JOptionPane.showInputDialog("oldnum : ");
int oldnum = Integer.parseInt(old);
System.out.println("oldnum: "+oldnum);
String message = String.format("Welcome, %s, to me\n You are %d year old",name,oldnum);
System.out.println("message: "+message);
JOptionPane.showMessageDialog(null,message);
}
}
如果 old 不是給整數, parseInt() 會跳出例外訊息.
name: A
Exception in thread "main" java.lang.NumberFormatException: For input string: "A
"
at java.lang.NumberFormatException.forInputString(NumberFormatException.
java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.parseInt(Integer.java:499)
at NameDialog.main(NameDialog.java:8)
參考Java 程式設計藝術
[Java] Ex.65
Ex.65
import java.util.*;
public class WrappedString {
private String s;
public WrappedString(String s ) {
this.s = s;
}
public static void main(String args[]){
HashSet<Object> hs = new HashSet<Object>();
WrappedString ws1 = new WrappedString("aardvark");
WrappedString ws2 = new WrappedString("aardvark");
String s1 = new String("aardvark");
String s2 = new String("aardvark");
hs.add(ws1);
hs.add(ws2);
hs.add(s1);
hs.add(s2);
System.out.print(hs.size());
}
}
---------------------------------
output is 3
---------------------------------
import java.util.*;
public class WrappedString {
private String s;
public WrappedString(String s ) {
this.s = s;
}
public static void main(String args[]){
HashSet<Object> hs = new HashSet<Object>();
WrappedString ws1 = new WrappedString("aardvark");
WrappedString ws2 = new WrappedString("aardvark");
String s1 = new String("aardvark");
String s2 = new String("aardvark");
hs.add(ws1);
hs.add(ws2);
hs.add(s1);
hs.add(s2);
System.out.print(hs.size());
}
public boolean equals(Object o){
if(this.s.equals(((WrappedString)o).s))
return true;
else
return false;
}
public int hashCode(){
return this.s.hashCode();
}
}
---------------------------------
output is 2
---------------------------------
import java.util.*;
public class WrappedString {
private String s;
public WrappedString(String s ) {
this.s = s;
}
public static void main(String args[]){
HashSet<Object> hs = new HashSet<Object>();
WrappedString ws1 = new WrappedString("aardvark");
WrappedString ws2 = new WrappedString("aardvark");
String s1 = new String("aardvark");
String s2 = new String("aardvark");
hs.add(ws1);
hs.add(ws2);
hs.add(s1);
hs.add(s2);
System.out.print(hs.size());
}
}
---------------------------------
output is 3
---------------------------------
import java.util.*;
public class WrappedString {
private String s;
public WrappedString(String s ) {
this.s = s;
}
public static void main(String args[]){
HashSet<Object> hs = new HashSet<Object>();
WrappedString ws1 = new WrappedString("aardvark");
WrappedString ws2 = new WrappedString("aardvark");
String s1 = new String("aardvark");
String s2 = new String("aardvark");
hs.add(ws1);
hs.add(ws2);
hs.add(s1);
hs.add(s2);
System.out.print(hs.size());
}
public boolean equals(Object o){
if(this.s.equals(((WrappedString)o).s))
return true;
else
return false;
}
public int hashCode(){
return this.s.hashCode();
}
}
---------------------------------
output is 2
---------------------------------
2015年10月22日 星期四
[C] 2-5: 迴圈與測試資料讀取 4 - 檔尾封 File_stern_transom.cpp
2-5: 迴圈與測試資料讀取 4 - 檔尾封
這個題目和前三題的差別在於如何指定輸入資料有幾組案例
請撰寫一個程式運用 stdio 函式庫的 scanf 和 printf 函式讀取測試資料並且計算兩數之和、整數除法的商和餘數、浮點數除法的商, 請練習下列迴圈控制
nitems = scanf(...); // 讀入 a 和 b
while (nitems==2) // 或是 nitems != EOF
{
...
nitems = scanf(...); // 讀入 a 和 b
}
請注意:
輸入測試資料:
----------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int a=1, b=1;
int nitems = scanf("%d %d%*[^\n]",&a,&b);
while (nitems!= EOF) // a 和 b 為前一列 scanf 讀入的資料
{
int add=0, div=0, mid=0;
float div2=0.0;
printf("%5d,%6d,%6d,%11.5f\n",add = a+b, div = a/b, mid = a%b, div2 = (float)a/b);
nitems = scanf("%d %d%*[^\n]",&a,&b);
}
return 0;
}
----------------------------------------------------------------
nitems!= EOF
EOF很像是-1, 而scanf輸出的值則是 一個整數,表示輸入的參數數量,
而如果使用feod可以參考
http://yume-o-tsukamu.blogspot.tw/2013/03/cfeof.html
這個題目和前三題的差別在於如何指定輸入資料有幾組案例
請撰寫一個程式運用 stdio 函式庫的 scanf 和 printf 函式讀取測試資料並且計算兩數之和、整數除法的商和餘數、浮點數除法的商, 請練習下列迴圈控制
nitems = scanf(...); // 讀入 a 和 b
while (nitems==2) // 或是 nitems != EOF
{
...
nitems = scanf(...); // 讀入 a 和 b
}
請注意:
- 下面的測試用範例中, 輸入測試資料由第一列開始, 每一列是一個案例, 包含兩個整數, 請讀入此兩個整數資料並且完成指定的運算
- 請注意觀察輸出測試資料, 程式需要輸出 n 列, 每一列是一個測試案例的測試結果, (假設 a + b = c, a / b = d, a % b = e, a / b = f) 列印的格式是每一列四個數字 c, d, e, f 以逗點和一個空格隔開, 其中 c, d, e 三個整數都列印在 5 格的欄位中, 浮點數 f 列印在 10 格的欄位中, 小數點後印 5 位數字
- 在你自己機器上測試時有兩種方法
- 執行程式 prog.exe, 輸入資料, 按 <ctrl>-Z <enter>
- 編輯一個資料檔案 test.txt, 打開 cmd.exe 視窗, 執行 prog < test.txt 或是 cat test.txt | prog
- 另外你也可以練習運用 stdio 的 feof(stdin) 函式測試輸入是否已經結束, 試試看能不能來取代 while (nitems==2) 的測試, 如果執行前一個輸入指令時發現串流已經結束, 接下來的 feof() 函式會回傳 1 代表串流已經結束, 在你自己的機器應該是可以運作的, 不過因為 e-Tutor 是線上的測試系統, 他不接受檔案操作的相關命令, 例如 fopen, fclose, fflush 所以 feof 有可能也不接受
輸入測試資料:
73 56↵
28 27↵
185 30↵
1412 345↵
210 -75↵
-3123 -4215↵
-4703 1014↵
輸出測試資料:129, 1, 17, 1.30357↵ 55, 1, 1, 1.03704↵ 215, 6, 5, 6.16667↵ 1757, 4, 32, 4.09275↵ 135, -2, 60, -2.80000↵ -7338, 0, -3123, 0.74093↵ -3689, -4, -647, -4.63807↵
----------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int a=1, b=1;
int nitems = scanf("%d %d%*[^\n]",&a,&b);
while (nitems!= EOF) // a 和 b 為前一列 scanf 讀入的資料
{
int add=0, div=0, mid=0;
float div2=0.0;
printf("%5d,%6d,%6d,%11.5f\n",add = a+b, div = a/b, mid = a%b, div2 = (float)a/b);
nitems = scanf("%d %d%*[^\n]",&a,&b);
}
return 0;
}
----------------------------------------------------------------
nitems!= EOF
EOF很像是-1, 而scanf輸出的值則是 一個整數,表示輸入的參數數量,
而如果使用feod可以參考
http://yume-o-tsukamu.blogspot.tw/2013/03/cfeof.html
2015年10月21日 星期三
[C] 2-4: 迴圈與測試資料讀取 3 - 零尾封 Zero_tail_closure.cpp
2-4: 迴圈與測試資料讀取 3 - 零尾封
這個題目和前兩題的差別在於如何指定輸入資料有幾組案例
請撰寫一個程式運用 stdio 函式庫的 scanf 和 printf 函式讀取測試資料並且計算兩數之和、整數除法的商和餘數、浮點數除法的商, 請練習下列迴圈控制
scanf(...); // 讀入 a 和 b
while (!((a==0)&&(b==0))) // a 和 b 為前一列 scanf 讀入的資料
{
...
scanf(...); // 讀入 a 和 b
}
請注意:
輸入測試資料:
---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int a=1, b=1;
scanf("%d %d%*[^\n]",&a,&b);
while (!((a==0)&&(b==0))) // a 和 b 為前一列 scanf 讀入的資料
{
int add=0, div=0, mid=0;
float div2=0.0;
printf("%5d,%6d,%6d,%11.5f\n",
add = a+b, div = a/b, mid = a%b, div2 = (float)a/b);
scanf("%d %d%*[^\n]",&a,&b);
}
return 0;
}
---------------------------------------------------------------------------
要說要注的東西應該是scanf放置位置吧
http://140.116.249.152/e-Tutor/mod/programming/view.php?a=12711
這個題目和前兩題的差別在於如何指定輸入資料有幾組案例
請撰寫一個程式運用 stdio 函式庫的 scanf 和 printf 函式讀取測試資料並且計算兩數之和、整數除法的商和餘數、浮點數除法的商, 請練習下列迴圈控制
scanf(...); // 讀入 a 和 b
while (!((a==0)&&(b==0))) // a 和 b 為前一列 scanf 讀入的資料
{
...
scanf(...); // 讀入 a 和 b
}
請注意:
- 下面的測試用範例中, 輸入測試資料由第一列開始, 每一列是一個案例, 包含兩個整數, 請讀入此兩個整數資料並且完成指定的運算
- 最後一列不是測試案例, 兩個整數 0 0 代表測試案例的結束
- 請注意觀察輸出測試資料, 程式需要輸出 n 列, 每一列是一個測試案例的測試結果, (假設 a + b = c, a / b = d, a % b = e, a / b = f) 列印的格式是每一列四個數字 c, d, e, f 以逗點和一個空格隔開, 其中 c, d, e 三個整數都列印在 5 格的欄位中, 浮點數 f 列印在 10 格的欄位中, 小數點後印 5 位數字
輸入測試資料:
73 56↵
28 27↵
185 30↵
1412 345↵
210 -75↵
-3123 -4215↵
-4703 1014↵
0 0↵
輸出測試資料:129, 1, 17, 1.30357↵ 55, 1, 1, 1.03704↵ 215, 6, 5, 6.16667↵ 1757, 4, 32, 4.09275↵ 135, -2, 60, -2.80000↵ -7338, 0, -3123, 0.74093↵ -3689, -4, -647, -4.63807↵
---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int a=1, b=1;
scanf("%d %d%*[^\n]",&a,&b);
while (!((a==0)&&(b==0))) // a 和 b 為前一列 scanf 讀入的資料
{
int add=0, div=0, mid=0;
float div2=0.0;
printf("%5d,%6d,%6d,%11.5f\n",
add = a+b, div = a/b, mid = a%b, div2 = (float)a/b);
scanf("%d %d%*[^\n]",&a,&b);
}
return 0;
}
---------------------------------------------------------------------------
要說要注的東西應該是scanf放置位置吧
http://140.116.249.152/e-Tutor/mod/programming/view.php?a=12711
[C] 2-3: 迴圈與測試資料讀取 2 - 起手數 Number_of_hands_2.cpp
這個題目基本上和前一題幾乎是一樣的, 唯一不一樣的地方是輸入資料的格式, 每一列的兩個整數資料之後一直到那一列的結尾是一些說明文字 (很多時候輸入資料和撰寫程式是不同的人, 輸入資料可能是用一個編輯器直接編輯檔案, 這個時候如果只有一堆數字, 很容易輸入錯誤, 所以常常在製作資料檔案的時候希望檔案裡有一些額外的說明文字, 可以使得人可以比較輕鬆地檢查資料), 這些說明文字是你的程式需要運用 scanf 的功能 跳過去不要處理的
請撰寫一個程式運用 stdio 函式庫的 scanf 和 printf 函式讀取測試資料並且計算兩數之和、整數除法的商和餘數、浮點數除法的商, 請練習下面的迴圈控制
scanf(...); // 讀取案例個數至整數變數 n
for (i=0; i<n; i++)
{
...
}
請注意:
下面的測試用範例中, 輸入測試資料的第一列為一個整數 n, 代表接下來有 n 個測試案例
每一列是一個案例, 包含兩個整數, 請讀入此兩個整數資料並且完成指定的運算, 這兩個數字之後一直到這一列的結束是程式不需要的註解
請注意觀察輸出測試資料, 程式需要輸出 n 列, 每一列是一個測試案例的測試結果, (假設 a + b = c, a / b = d, a % b = e, a / b = f) 列印的格式是每一列四個數字 c, d, e, f 以逗點和一個空格隔開, 其中 c, d, e 三個整數都列印在 5 格的欄位中, 浮點數 f 列印在 10 格的欄位中, 小數點後印 5 位數字
輸入測試資料:
請撰寫一個程式運用 stdio 函式庫的 scanf 和 printf 函式讀取測試資料並且計算兩數之和、整數除法的商和餘數、浮點數除法的商, 請練習下面的迴圈控制
scanf(...); // 讀取案例個數至整數變數 n
for (i=0; i<n; i++)
{
...
}
請注意:
下面的測試用範例中, 輸入測試資料的第一列為一個整數 n, 代表接下來有 n 個測試案例
每一列是一個案例, 包含兩個整數, 請讀入此兩個整數資料並且完成指定的運算, 這兩個數字之後一直到這一列的結束是程式不需要的註解
請注意觀察輸出測試資料, 程式需要輸出 n 列, 每一列是一個測試案例的測試結果, (假設 a + b = c, a / b = d, a % b = e, a / b = f) 列印的格式是每一列四個數字 c, d, e, f 以逗點和一個空格隔開, 其中 c, d, e 三個整數都列印在 5 格的欄位中, 浮點數 f 列印在 10 格的欄位中, 小數點後印 5 位數字
輸入測試資料:
7↵
73 56 this the first set of data↵
28 27 這是第二組測試案例↵
185 30the third↵
1412 345 )*&^&(^ (*&^↵
210 -75↵
-3123 -4215 both negative↵
-4703 1014↵
輸出測試資料:129, 1, 17, 1.30357↵ 55, 1, 1, 1.03704↵ 215, 6, 5, 6.16667↵ 1757, 4, 32, 4.09275↵ 135, -2, 60, -2.80000↵ -7338, 0, -3123, 0.74093↵ -3689, -4, -647, -4.63807↵
----------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n, i, a, b;
scanf("%d",&n);
for(i = 0 ; i < n ; i++){
scanf("%d %d%*[^\n]",&a,&b);
int add=0, div=0, mid=0;
float div2=0.0;
printf("%5d,%6d,%6d,%11.5f",add = a+b, div = a/b, mid = a%b, div2 = (float)a/b);
printf("\n");
}
return 0;
}
----------------------------------------------------
這裡比較特別的式正規表示法,
scanf("%d %d%*[^\n]",&a,&b);
中的 %*[^\n] 表示從前一個輸入之後到換行符號出線為止都不列入input中.
[C] 2-2: 迴圈與測試資料讀取 1 - 起手數 Number_of_hands
請撰寫一個程式運用 stdio 函式庫的 scanf 和 printf 函式讀取測試資料並且計算兩數之和、整數除法的商和餘數、浮點數除法的商, 請練習下面的迴圈控制
scanf(...); // 讀取案例個數至整數變數 n for (i=0; i<n; i++) { ... }
- 下面的測試用範例中, 輸入測試資料的第一列為一個整數 n, 代表接下來有 n 個測試案例
- 每一列是一個案例, 包含兩個整數, 請讀入此兩個整數資料並且完成指定的運算
- 請注意觀察輸出測試資料, 程式需要輸出 n 列, 每一列是一個測試案例的測試結果, (假設 a + b = c, a / b = d, a % b = e, a / b = f) 列印的格式是每一列四個數字 c, d, e, f 以逗點和一個空格隔開, 其中 c, d, e 三個整數都列印在 5 格的欄位中, 浮點數 f 列印在 10 格的欄位中, 小數點後印 5 位數字
- 請特別注意觀察整數除法 a / b 和餘數 a % b 在 a 或是 b 為負數時的結果
- 因為開始練習迴圈, 提交程式就有限定執行時間, 否則萬一你的迴圈不結束, 就很浪費系統資源了
7↵
73 56↵
28 27↵
185 30↵
1412 345↵
210 -75↵
-3123 -4215↵
-4703 1014↵
輸出測試資料:129, 1, 17, 1.30357↵ 55, 1, 1, 1.03704↵ 215, 6, 5, 6.16667↵ 1757, 4, 32, 4.09275↵ 135, -2, 60, -2.80000↵ -7338, 0, -3123, 0.74093↵ -3689, -4, -647, -4.63807↵
------------------------------------------------------------
Number_of_hands.cpp
#include <stdio.h> #include <stdlib.h> int main(void) { int n, i, a, b; scanf("%d",&n); for(i = 0 ; i < n ; i++){ scanf("%d%d",&a,&b); int add=0, div=0, mid=0; float div2=0.0; printf("%5d,%6d,%6d,%11.5f\n",add = a+b, div = a/b, mid = a%b, div2 = (float)a/b); } return 0; }
------------------------------------------------------------
該注意的就是, 第一筆資料後的小數點位置,
因為會把前一個數字的 "," 算進去, 所以後面顯示的時候要多加一位才可以.
題目來源
http://140.116.249.152/e-Tutor/mod/programming/submit.php?a=12709
[Java] 移動檔案
日常生活中的小小實做,
依照日期把檔案分類到專屬的資料夾中.
程式很簡單但是卻寫了一整天 = = ,
分三部分, 第一部分 main 就是定資料夾, 在用第二部分的 print 印出來,
印的同時利用第三部分 settime 把每個檔案的建立時間顯示出來, 以方便做比較,
在比較建造日期後, 比對成功就呼叫第四部分, 把檔案移至對應的資料夾中.
可以在改進的地方應該是,
1. 把輸入目前路徑, 目標路徑, 單獨列出讓使用者好修改
2. 日期借面 A日到B日的檔案坐轉移
3. 函式寫得很醜, 可以在改進囉~
import java.io.*;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class File_mvoe_2{
public static void main(String args[])throws IOException{
String path = "M:\\FTP";
File f = new File(path);
print(f,1,path);
}
private static void print(File f, int level,String path){
String pl = "";
for(int i = 0 ; i < level ; i++){
pl +="\t";
}
File[] child = f.listFiles();
for(int i = 0; i < child.length ; i++){
String s = child[i].getName();
settime(path,s);
if(child[i].isDirectory()){
path = path +"\\"+ child[i].getName();
print(child[i], level+1, path);
}
}
}
private static void settime(String inputpath, String name){
try{
File file = new File(inputpath+"\\"+name);
Calendar c = Calendar.getInstance();
c.setTimeInMillis(file.lastModified());
Path path = Paths.get(inputpath+"\\"+name);
BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
c.setTimeInMillis(attrs.creationTime().toMillis());
String da = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
//System.out.println("DA: "+da);
int i = 0;
if(da.equals("2015-10-21") ){
move(inputpath, name, i);
}
}catch(IOException e){
e.printStackTrace();
}
}
private static void move(String inputpath, String name, int i ){
File source = null;
File destFile = null;
File directory = null;
boolean rt = false;
try{
source = new File(inputpath+"\\"+name);
String Target = "M:\\ftp TMP\\08.21";
directory = new File(Target);
if(!directory.isDirectory()){
directory.mkdirs();
}
destFile = new File(Target+"\\"+name);
rt = source.renameTo(destFile);
//System.out.println("rt: "+rt+" : "+name);
}catch(Exception e){
}
}
}
參考資料:
顯示基本資料
http://bioankeyang.blogspot.tw/2015/01/java.html
顯示資料夾資料
http://ced425.pixnet.net/blog/post/3368206-java.io.file%E9%A1%9E%E7%B7%B4%E7%BF%92
移動資料
http://blog.csdn.net/lfdfhl/article/details/8302605
這是比較簡單的檔案移動程式
import java.io.*;
public class File_mvoe{
public static void main(String args[]){
File source = null; // 想要移動的檔案
File directory = null; // 想要移動到的目的地資料夾
File destFile = null; // 移動過去的資料夾路徑+檔案名稱(可以自取)
boolean rt = false;
try{
source = new File("M:\\A\\DCS-9202009010502073601.jpg");
directory = new File("M:\\B");
destFile = new File("M:\\B\\DCS-9202009010502073601.jpg");
//判斷目標資料夾是否存在, 不存在就建立新的
if (directory.isDirectory()) {
System.out.println("Directory is exist.");
}else{
directory.mkdirs();
System.out.println("Directory is not exist, so creat .");
}
// 要移動的檔案是不是存在
if(source.exists()){
System.out.println("File is exists");
}else{
System.out.println("File is not exists");
}
// 用rename 方法移動檔案, 會回傳booblean 回去, 才知道是不是有移動成功
rt = source.renameTo(destFile);
System.out.println("File renamed: "+ rt);
}catch(Exception e){
e.printStackTrace();
}
}
}
依照日期把檔案分類到專屬的資料夾中.
程式很簡單但是卻寫了一整天 = = ,
分三部分, 第一部分 main 就是定資料夾, 在用第二部分的 print 印出來,
印的同時利用第三部分 settime 把每個檔案的建立時間顯示出來, 以方便做比較,
在比較建造日期後, 比對成功就呼叫第四部分, 把檔案移至對應的資料夾中.
可以在改進的地方應該是,
1. 把輸入目前路徑, 目標路徑, 單獨列出讓使用者好修改
2. 日期借面 A日到B日的檔案坐轉移
3. 函式寫得很醜, 可以在改進囉~
import java.io.*;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class File_mvoe_2{
public static void main(String args[])throws IOException{
String path = "M:\\FTP";
File f = new File(path);
print(f,1,path);
}
private static void print(File f, int level,String path){
String pl = "";
for(int i = 0 ; i < level ; i++){
pl +="\t";
}
File[] child = f.listFiles();
for(int i = 0; i < child.length ; i++){
String s = child[i].getName();
settime(path,s);
if(child[i].isDirectory()){
path = path +"\\"+ child[i].getName();
print(child[i], level+1, path);
}
}
}
private static void settime(String inputpath, String name){
try{
File file = new File(inputpath+"\\"+name);
Calendar c = Calendar.getInstance();
c.setTimeInMillis(file.lastModified());
Path path = Paths.get(inputpath+"\\"+name);
BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
c.setTimeInMillis(attrs.creationTime().toMillis());
String da = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
//System.out.println("DA: "+da);
int i = 0;
if(da.equals("2015-10-21") ){
move(inputpath, name, i);
}
}catch(IOException e){
e.printStackTrace();
}
}
private static void move(String inputpath, String name, int i ){
File source = null;
File destFile = null;
File directory = null;
boolean rt = false;
try{
source = new File(inputpath+"\\"+name);
String Target = "M:\\ftp TMP\\08.21";
directory = new File(Target);
if(!directory.isDirectory()){
directory.mkdirs();
}
destFile = new File(Target+"\\"+name);
rt = source.renameTo(destFile);
//System.out.println("rt: "+rt+" : "+name);
}catch(Exception e){
}
}
}
參考資料:
顯示基本資料
http://bioankeyang.blogspot.tw/2015/01/java.html
顯示資料夾資料
http://ced425.pixnet.net/blog/post/3368206-java.io.file%E9%A1%9E%E7%B7%B4%E7%BF%92
移動資料
http://blog.csdn.net/lfdfhl/article/details/8302605
這是比較簡單的檔案移動程式
import java.io.*;
public class File_mvoe{
public static void main(String args[]){
File source = null; // 想要移動的檔案
File directory = null; // 想要移動到的目的地資料夾
File destFile = null; // 移動過去的資料夾路徑+檔案名稱(可以自取)
boolean rt = false;
try{
source = new File("M:\\A\\DCS-9202009010502073601.jpg");
directory = new File("M:\\B");
destFile = new File("M:\\B\\DCS-9202009010502073601.jpg");
//判斷目標資料夾是否存在, 不存在就建立新的
if (directory.isDirectory()) {
System.out.println("Directory is exist.");
}else{
directory.mkdirs();
System.out.println("Directory is not exist, so creat .");
}
// 要移動的檔案是不是存在
if(source.exists()){
System.out.println("File is exists");
}else{
System.out.println("File is not exists");
}
// 用rename 方法移動檔案, 會回傳booblean 回去, 才知道是不是有移動成功
rt = source.renameTo(destFile);
System.out.println("File renamed: "+ rt);
}catch(Exception e){
e.printStackTrace();
}
}
}
[Java] 顯示指定資料夾下的檔案和資料夾
參考資料:
http://ced425.pixnet.net/blog/post/3368206-java.io.file%E9%A1%9E%E7%B7%B4%E7%BF%92
import java.io.*;
public class File_Print{
public static void main(String args[]){
File f = new File("c:\\Documents");
System.out.print("Directory Name: "+f.getName()+"\n");
print(f,1);
}
private static void print(File f, int level){
String pl = "";
for(int i = 0 ; i < level ; i++){
pl +="\t";
}
File[] child = f.listFiles();
for(int i = 0; i < child.length ; i++){
String s = child[i].getName();
System.out.println(pl+" ("+s+")");
if(s.equals("a.java")){
File fc = child[i];
File toFile = new File("C:\\Documents\\abcd"+"\\"+"child[i].getName()");
fc.renameTo(toFile);
System.out.println("-------------------------------------------------");
}
if(child[i].isDirectory()){
System.out.print("*");
print(child[i], level+1);
}
}
}
}
http://ced425.pixnet.net/blog/post/3368206-java.io.file%E9%A1%9E%E7%B7%B4%E7%BF%92
import java.io.*;
public class File_Print{
public static void main(String args[]){
File f = new File("c:\\Documents");
System.out.print("Directory Name: "+f.getName()+"\n");
print(f,1);
}
private static void print(File f, int level){
String pl = "";
for(int i = 0 ; i < level ; i++){
pl +="\t";
}
File[] child = f.listFiles();
for(int i = 0; i < child.length ; i++){
String s = child[i].getName();
System.out.println(pl+" ("+s+")");
if(s.equals("a.java")){
File fc = child[i];
File toFile = new File("C:\\Documents\\abcd"+"\\"+"child[i].getName()");
fc.renameTo(toFile);
System.out.println("-------------------------------------------------");
}
if(child[i].isDirectory()){
System.out.print("*");
print(child[i], level+1);
}
}
}
}
[Java] File_move 檔案移動
import java.io.*;
public class File_mvoe{
public static void main(String args[]){
File source = null;
File directory = null;
File destFile = null;
boolean rt = false;
try{
source = new File("c:\\Documents\\abcda\\803_009_5jg.jpg");
directory = new File("c:\\Documents\\abcda\\phone");
destFile = new File("c:\\Documents\\abcda\\phone\\803_009_5jg.jpg");
//判斷資料夾是否存在, 不在則新增一個
if (directory.isDirectory()) {
System.out.println("Directory is exist.");
}else{
directory.mkdirs();
System.out.println("Directory is not exist, so creat .");
}
//判斷要移動的檔案是否存在
if(source.exists()){
System.out.println("File is exists");
}else{
System.out.println("File is not exists");
}
// 用rename移動檔案, 移動結果會回傳一個boolean值
rt = source.renameTo(destFile);
System.out.println("File renamed: "+ rt);
}catch(Exception e){
e.printStackTrace();
}
}
}
source = new File("c:\\Documents\\abcda\\803_009_5jg.jpg");
要移動的檔案, 連同路徑一起寫入
directory = new File("c:\\Documents\\abcda\\phone");
要移至的資料夾 , 以便接下來判斷資料夾是否存在
destFile = new File("c:\\Documents\\abcda\\phone\\803_009_5jg.jpg");
要移入的資料夾, 檔案名稱要相同, 路徑一樣要寫上
public class File_mvoe{
public static void main(String args[]){
File source = null;
File directory = null;
File destFile = null;
boolean rt = false;
try{
source = new File("c:\\Documents\\abcda\\803_009_5jg.jpg");
directory = new File("c:\\Documents\\abcda\\phone");
destFile = new File("c:\\Documents\\abcda\\phone\\803_009_5jg.jpg");
//判斷資料夾是否存在, 不在則新增一個
if (directory.isDirectory()) {
System.out.println("Directory is exist.");
}else{
directory.mkdirs();
System.out.println("Directory is not exist, so creat .");
}
//判斷要移動的檔案是否存在
if(source.exists()){
System.out.println("File is exists");
}else{
System.out.println("File is not exists");
}
// 用rename移動檔案, 移動結果會回傳一個boolean值
rt = source.renameTo(destFile);
System.out.println("File renamed: "+ rt);
}catch(Exception e){
e.printStackTrace();
}
}
}
source = new File("c:\\Documents\\abcda\\803_009_5jg.jpg");
要移動的檔案, 連同路徑一起寫入
directory = new File("c:\\Documents\\abcda\\phone");
要移至的資料夾 , 以便接下來判斷資料夾是否存在
destFile = new File("c:\\Documents\\abcda\\phone\\803_009_5jg.jpg");
要移入的資料夾, 檔案名稱要相同, 路徑一樣要寫上
訂閱:
文章 (Atom)