科目B 単方向 スタック キューなど
らいさん
(No.1)
スレッドタイトルにて、”基本情報技術者試験に受かる為に”
Java、”アルゴリズム”を学ぶ上で意識することなどありますか。
質問した、経緯を書かせて頂きます。
試験本番まで2ヶ月ほどですが
科目Bにおいて「出るとこだけ!基本情報科目B」を使っているのですが、本書の内容を何回も見ても全く理解ができないです。
本書を批判しているわけでは全くありません。
これらの理解を深めるために合格報告スレッドや、その他スレッドでよくお見かけする、”Paiza”でJavaの講座や記述もしているのですが、なんというか応用が効かないというか、講座の内容をそのまま移して記述しているようで、いざ上記参考書の問題を解いてみると真っ白になります。
特にスレッドタイトル以外にもif while for 配列なども仕組みは理解しているのですが
想像力がないのか、
初見の問題を見るとかなり時間を食われて全然分からないです。
センスがないのではと正直かなり萎えています。。
掲示板を見て、皆様やはりアルゴリズム問題に慣れるには試しに書く事が大事だと仰っているのですが、科目BはJavaだけを理解することで
得点に結びつくのでしょうか。。
今、Pythonなど他の言語にあっちこっち手を出すことは、知識が分散されて宜しくないと考えております。
プログラミング自体にはかなり興味があるので
今後も勉強は続けていきたいのですが
”基本情報に受かる為”の勉強がなにより辛くて。。
長々とすみません。よろしくお願いします。
Java、”アルゴリズム”を学ぶ上で意識することなどありますか。
質問した、経緯を書かせて頂きます。
試験本番まで2ヶ月ほどですが
科目Bにおいて「出るとこだけ!基本情報科目B」を使っているのですが、本書の内容を何回も見ても全く理解ができないです。
本書を批判しているわけでは全くありません。
これらの理解を深めるために合格報告スレッドや、その他スレッドでよくお見かけする、”Paiza”でJavaの講座や記述もしているのですが、なんというか応用が効かないというか、講座の内容をそのまま移して記述しているようで、いざ上記参考書の問題を解いてみると真っ白になります。
特にスレッドタイトル以外にもif while for 配列なども仕組みは理解しているのですが
想像力がないのか、
初見の問題を見るとかなり時間を食われて全然分からないです。
センスがないのではと正直かなり萎えています。。
掲示板を見て、皆様やはりアルゴリズム問題に慣れるには試しに書く事が大事だと仰っているのですが、科目BはJavaだけを理解することで
得点に結びつくのでしょうか。。
今、Pythonなど他の言語にあっちこっち手を出すことは、知識が分散されて宜しくないと考えております。
プログラミング自体にはかなり興味があるので
今後も勉強は続けていきたいのですが
”基本情報に受かる為”の勉強がなにより辛くて。。
長々とすみません。よろしくお願いします。
2023.10.12 19:01
まーぼさん
★FE ブロンズマイスター
(No.2)
>科目BはJavaだけを理解することで得点に結びつくのでしょうか。。
科目Bは擬似言語で書かれたアルゴリズムの問題に解答するのでJavaの知識は必要ないと言えば必要ないです。実際、仕事でJavaメインで書いてる人でもアルゴリズムの勉強をしなければ不合格になる可能性はそこそこあるでしょう。ただJavaが理解できる人がアルゴリズムの勉強に苦労することはあまりないと思います。(Javaの勉強の方が難しいと思うので)
> 今、Pythonなど他の言語にあっちこっち手を出すことは、知識が分散されて宜しくないと考えております。
これはあると思います。特にスレ主様は基本的なアルゴリズムの理解も十分でないと思いますので、まずは何か一つのプログラミング言語に絞った方がいいでしょう。Javaは文法が結構厳しめなので、最初のうちはPython等のスクリプト言語の方がとっつきやすいと思います。
2023.10.12 19:55
まきさん
(No.3)
>これらの理解を深めるために合格報告スレッドや、その他スレッドでよくお見かけする、”Paiza”でJavaの講座や記述もしているのですが、なんというか応用が効かないというか、講座の内容をそのまま移して記述しているようで、いざ上記参考書の問題を解いてみると真っ白になります。
私見で申し訳ないですがちゃんと基礎身についていますか。応用が利かない前にパイザの基礎問題1からすべて再現できますか。写経をするにあたっても考えながら写していますか。(私もpaizaをやってますので・・)
1回目はいいですが2回目するときは何が間違えているか気づいて演習してますかなど・・・と感じました。
for文使うにしても何でループしないとプログラムが動かないのか考えたことはありますか。答えを丸写しではなく良く分解して、自分は何が理解できないのかを分析してください。紙に書いてみてみると良く分かりますよ。
かくゆう私もアルゴリズムに関しては苦労している身です。
偉そうにすみません
2023.10.12 20:48
らいさん
(No.4)
まーぼ様
やはりJavaは難易度が高いのですね。。
分かりました、改めてPythonを1から学びなおし、
体に染み込ませて慣れていきたいと思います!
まき様
おっしゃる通りでございます!!
本日蓋を開けてみれば知識がスカスカの状態ということが分かりました。
出来ないままでは悔しいし、基本情報に受からないままでは前に進めないので、
合格に向けて勉強します!
お二人様、ご丁寧にお伝え頂きありがとうございました!
やはりJavaは難易度が高いのですね。。
分かりました、改めてPythonを1から学びなおし、
体に染み込ませて慣れていきたいと思います!
まき様
おっしゃる通りでございます!!
本日蓋を開けてみれば知識がスカスカの状態ということが分かりました。
出来ないままでは悔しいし、基本情報に受からないままでは前に進めないので、
合格に向けて勉強します!
お二人様、ご丁寧にお伝え頂きありがとうございました!
2023.10.13 02:20
jjon-comさん
★FE シルバーマイスター
(No.5)
> 改めてPythonを1から学びなおし、体に染み込ませて慣れていきたいと思います!
情報処理技術者試験のアルゴリズム対策なら,
PythonよりもJavaScriptの方が適しているのではないですか。
Pythonの基本のループ構文がこうであるのに対して,
for i in range(1, 21):
print(i)
print(i)
JavaScriptの基本のループ構文はこうなります。
for (let i = 1; i <= 20; i++) {
console.log(i);
}
console.log(i);
}
情報処理技術者試験の擬似言語の文法に近いのはJavaScriptの方でしょう。
2023.10.13 15:04
jjon-comさん
★FE シルバーマイスター
(No.6)
情報処理技術者試験の擬似言語プログラムは,
生成AIの ChatGPT に適切な指示を与えることで
他のプログラミング言語のコードに変換することができます。
例えば,次の指示を ChatGPT に与えると,
出典: https://www.fe-siken.com/kakomon/sample20220425/b2.html
ChatGPT は次のように回答しました。
生成AIの ChatGPT に適切な指示を与えることで
他のプログラミング言語のコードに変換することができます。
例えば,次の指示を ChatGPT に与えると,
出典: https://www.fe-siken.com/kakomon/sample20220425/b2.html
次の擬似言語をJavaScriptのプログラムに変換してください。
この擬似言語の仕様では,配列の添字は 1 から始まるので,
変換後のJavaScriptのプログラムでは配列要素の0番目を使用しないでください。
整数型の配列: array ← {1, 2, 3, 4, 5}
整数型: right, left
整数型: tmp
for (left を 1 から (array の要素数 ÷ 2 の商) まで 1 ずつ増やす)
right ← arrayの要素数 - left + 1
tmp ← array[right]
array[right] ← array[left]
array[left] ← tmp
endfor
この擬似言語の仕様では,配列の添字は 1 から始まるので,
変換後のJavaScriptのプログラムでは配列要素の0番目を使用しないでください。
整数型の配列: array ← {1, 2, 3, 4, 5}
整数型: right, left
整数型: tmp
for (left を 1 から (array の要素数 ÷ 2 の商) まで 1 ずつ増やす)
right ← arrayの要素数 - left + 1
tmp ← array[right]
array[right] ← array[left]
array[left] ← tmp
endfor
ChatGPT は次のように回答しました。
提供された擬似言語のコードを、JavaScriptに変換し、添字が1から始まるように調整します。以下がJavaScriptプログラムです:
// 整数型の配列
const array = [null, 1, 2, 3, 4, 5]; // 0番目の要素は無視
let right, left, tmp;
for (left = 1; left <= Math.floor(array.length / 2); left++) {
right = array.length - left;
tmp = array[right];
array[right] = array[left];
array[left] = tmp;
}
// 結果の配列を表示
for (let i = 1; i < array.length; i++) {
console.log(array[i]);
}
このJavaScriptコードは、提供された擬似言語コードを変換し、配列要素を中央で反転します。擬似言語の指示に従って、JavaScriptの配列で0番目の要素を無視して1から始めます。そして、最終的な結果を1から表示します。
// 整数型の配列
const array = [null, 1, 2, 3, 4, 5]; // 0番目の要素は無視
let right, left, tmp;
for (left = 1; left <= Math.floor(array.length / 2); left++) {
right = array.length - left;
tmp = array[right];
array[right] = array[left];
array[left] = tmp;
}
// 結果の配列を表示
for (let i = 1; i < array.length; i++) {
console.log(array[i]);
}
このJavaScriptコードは、提供された擬似言語コードを変換し、配列要素を中央で反転します。擬似言語の指示に従って、JavaScriptの配列で0番目の要素を無視して1から始めます。そして、最終的な結果を1から表示します。
2023.10.13 15:15
jjon-comさん
★FE シルバーマイスター
(No.7)
さらに,ChatGPTが生成した JavaScript のコードに次のように少しだけ手を加えて,
[ null, 10, 2, 3, 4, 5, 6, 7, 8, 9, 1 ]
[ null, 10, 9, 3, 4, 5, 6, 7, 8, 2, 1 ]
[ null, 10, 9, 8, 4, 5, 6, 7, 3, 2, 1 ]
[ null, 10, 9, 8, 7, 5, 6, 4, 3, 2, 1 ]
[ null, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]
配列の中身が整列されていく過程を順に出力してみたわけです。
// 整数型の配列
const array = [null, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // 0番目の要素は無視
let right, left, tmp;
for (left = 1; left <= Math.floor(array.length / 2); left++) {
right = array.length - left;
tmp = array[right];
array[right] = array[left];
array[left] = tmp;
console.log(array);
}
これを実行すると次の結果が得られます。const array = [null, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // 0番目の要素は無視
let right, left, tmp;
for (left = 1; left <= Math.floor(array.length / 2); left++) {
right = array.length - left;
tmp = array[right];
array[right] = array[left];
array[left] = tmp;
console.log(array);
}
[ null, 10, 2, 3, 4, 5, 6, 7, 8, 9, 1 ]
[ null, 10, 9, 3, 4, 5, 6, 7, 8, 2, 1 ]
[ null, 10, 9, 8, 4, 5, 6, 7, 3, 2, 1 ]
[ null, 10, 9, 8, 7, 5, 6, 4, 3, 2, 1 ]
[ null, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]
配列の中身が整列されていく過程を順に出力してみたわけです。
2023.10.13 15:33
まきさん
(No.8)
カウントダウン java例
// whileによるループ処理
public class Main { //メインメソッド
public static void main(String[] args) {
int i =20; //初期化
while(i >=10){ //繰り返し処理
System.out.println(i); //出力結果
i = i-1; //カウントダウン
}
}
}
こんな風に1行1行コメントをするプログラムが分かりやすいかもしれません
// whileによるループ処理
public class Main { //メインメソッド
public static void main(String[] args) {
int i =20; //初期化
while(i >=10){ //繰り返し処理
System.out.println(i); //出力結果
i = i-1; //カウントダウン
}
}
}
こんな風に1行1行コメントをするプログラムが分かりやすいかもしれません
2023.10.14 12:03