Cプログラミング

 Computer >> コンピューター >  >> プログラミング >> Cプログラミング
  1. 【C言語】レンズの焦点距離を計算するプログラムの作成方法

    レンズからの像距離(image distance)と物体距離(object distance)という2つの浮動小数点数が与えられたとき、レンズの焦点距離を計算して出力するのが本記事の課題です。焦点距離とは?光学系における焦点距離とは、レンズまたは曲面鏡の中心から、その焦点までの距離を指します。レンズの性質を表す最も基本的なパラメータの一つであり、カメラや顕微鏡など、あらゆる光学機器の設計に欠かせない重要な概念です。以下の図をもとに理解を深めましょう。上の図では、i が物体、F がその物体から結ばれた像、f が焦点距離を表しています。焦点距離を求める公式レンズの焦点距離は、いわゆる「薄レンズの公

  2. C言語で実装するFCFSスケジューリング:平均待ち時間とターンアラウンド時間の計算方法

    n個のプロセスP1、P2、P3、…、Pnとそれぞれのバーストタイム(CPU実行時間)が与えられたとき、FCFS(First Come, First Served)CPUスケジューリングアルゴリズムを用いて平均待ち時間と平均ターンアラウンド時間を求めるのが本記事のテーマです。 待ち時間とターンアラウンド時間とは? ターンアラウンド時間:プロセスの投入から完了までの時間間隔です。ターンアラウンド時間 = プロセスの完了時刻 − プロセスの投入時刻 待ち時間:ターンアラウンド時間からバーストタイムを差し引いた時間です。待ち時間 = ターンアラウンド時間 − バーストタイム FCFSスケジューリン

  3. C言語で連結リストを使った優先度付きキューの実装方法

    本記事では、整数値の「データ」と「優先度」が与えられたとき、指定された優先度に従って連結リスト(リンクリスト)を構築し、結果を表示する方法を解説します。 優先度付きキューとは キューはFIFO(First In, First Out:先入れ先出し)方式のデータ構造であり、最初に挿入された要素が最初に取り除かれます。 一方、優先度付きキュー(プライオリティキュー)は、要素の挿入・削除を「優先度」に基づいて行えるキューの一種です。キュー、スタック、連結リストなどのデータ構造を用いて実装でき、以下のルールに従って動作します。 優先度が最も高いデータ(要素)は、優先度が低いものよりも先に処理される。

  4. C/C++で学ぶ優先度付きキュー(プライオリティキュー)の基本と実装

    優先度付きキュー(プライオリティキュー)とは、要素に割り当てられた「優先度」に従って挿入・削除が行われる特殊なキューの一種です。優先度は0〜10の整数値で表現され、0が最も高い優先度、10が最も低い優先度を意味します。病院の救急外来で重症患者が待ち順序に関係なく先に診察されるように、重要度の高いタスクを優先的に処理したい場面で活躍するデータ構造です。 優先度付きキューを守る2つの基本ルール 優先度付きキューを実装する際には、次の2つのルールに従います。 優先度の高い要素ほど先に処理される — 最も優先度の高いデータは、優先度の低いデータよりも先に実行されます。 同じ優先度なら追加順に処理さ

  5. C言語で学ぶラウンドロビンスケジューリングの実装方法と計算手順

    n個のプロセスとそれぞれのバーストタイム(burst time)、およびタイムクォンタム(time quantum)が与えられたとき、平均待ち時間(average waiting time)と平均ターンアラウンドタイム(average turnaround time)を求めて結果を表示することが本記事の課題です。 ラウンドロビンスケジューリングとは? ラウンドロビン(Round Robin)は、タイムシェアリングシステム向けに特別に設計されたCPUスケジューリングアルゴリズムです。基本的な仕組みはFCFS(先着順)スケジューリングに似ていますが、決定的な違いとして、各プロセスの実行が「クォンタ

  6. C言語で自分自身のソースコードを出力するプログラムの書き方

    この記事では、実行すると自分自身のソースコードをそのまま出力するCプログラムの作成方法を解説します。 基本的な考え方 自分自身のソースコードを表示するには、C言語のファイル操作機能を利用します。たとえば「code1.c」というファイルにコードを書いている場合、そのファイルを読み込みモードで開き、内容をすべて読み取って画面に出力すればよいのです。 ただし、ファイルを読み込みモードで開く前に、自分がコードを書いているファイル名を把握しておく必要があります。そこで便利なのがマクロ「__FILE__」です。このマクロはデフォルトで、現在のファイルのパスを文字列として返します。 マクロ「__FILE__

  7. C/C++におけるプロセス同期の徹底解説|クリティカルセクションからセマフォまで

    プロセス同期(Process Synchronization)とは、共有データへの同時アクセスによって発生するデータ不整合の問題を解決するための手法です。協調プロセス(cooperating process)とは、他のプロセスに影響を与えたり、影響を受けたりするプロセスのことであり、このようなプロセス間ではデータの不整合が生じる可能性があります。そのため、データの一貫性を維持するためにはプロセス同期が不可欠となります。クリティカルセクション問題すべてのプロセスには、クリティカルセクション(Critical Section)と呼ばれる特別なコード領域が存在します。この領域では、共通変数の変更、テ

  8. C言語でscanf()の後にfgets()/gets()/scanf()が続く場合の問題と対処法

    C言語では、scanf() の直後に fgets() / gets() / 別の scanf() を呼び出すと、意図どおりに入力を読み取れないことがあります。原因の多くは、前の入力操作で改行文字(\n)が標準入力バッファに残っていることにあります。本記事では、代表的な2つのケースについて、実際のコード例と実行結果をもとに挙動と対策を解説します。fgets() / gets() の前に scanf() がある場合サンプルコード#include <stdio.h>int main(void) {    int x;  &nbs

  9. C言語で解く最小コストパス問題 ― 動的計画法による効率的な実装方法

    はじめに 本記事では、C言語を用いて「最小コストパス問題」を解く方法を解説します。この問題は、各セルに移動コストが設定された2次元行列を対象とし、左上隅から右下隅までの経路の中で、合計コストが最小になるものを見つけるというものです。あるセルから移動できるのは、下または右隣のセルのみです。 この種の問題は、単純な再帰処理よりも動的計画法(Dynamic Programming)を使ったほうがはるかに効率的に解けます。 コスト行列 cost[][] と座標 (m, n) が与えられたとき、(0, 0) から (m, n) に到達するまでの最小コストを返す関数を作成します。経路の総コストとは、出発点

  10. 配列の末尾に到達するための最小ジャンプ回数を求めるCプログラム

    問題の概要非負整数の配列が与えられ、各要素はその位置から前方へ進むことができる最大ステップ数を表しています。ポインタは初期状態で配列の先頭(インデックス0)に配置されています。目標は、最小のジャンプ回数で配列の最後のインデックスに到達することです。もし配列の末尾に到達することが不可能な場合は、整数型の最大値(INT_MAX)を出力します。ナイーブなアプローチ(全探索)最も単純な方法は、最初の要素から出発し、そこから到達可能なすべての要素に対して再帰的に処理を呼び出すことです。先頭から末尾に到達するまでの最小ジャンプ数は、「最初の要素から到達できる各要素から末尾までに必要な最小ジャンプ数」の中で

  11. C言語で学ぶナイーブ文字列パターン検索アルゴリズムの実装方法

    C言語におけるパターンマッチングとは、ある文字列の中に別の文字列が含まれているかどうかを調べる処理のことです。例えば、「naive algorithm」という文字列の中に「algorithm」という文字列が存在するかを確認し、見つかった場合はその位置(インデックス)を表示します。本記事では、2つの文字配列を受け取り、一致が見つかればその位置を返し、見つからなければ -1 を返す関数を作成する方法を解説します。入力例と出力例入力: txt = HERE IS A NICE CAP    pattern = NICE 出力: パターンはインデックス10で見つかりました 入力: txt = XYZ

  12. C言語で学ぶラビン-カープ(Rabin-Karp)アルゴリズムによるパターン検索

    C言語におけるパターンマッチングとは、ある文字列が別の文字列の中に存在するかどうかを調べる処理のことです。例えば、「algorithm」という文字列が「naive algorithm」という文字列の中に含まれているかを検索し、見つかった場合はその位置(インデックス)を表示します。ここでは、2つの文字配列を受け取り、一致が見つかればその位置を返し、見つからなければ -1 を返す関数を作成します。入力例1:txt = HERE IS A NICE CAPpattern = NICE出力:パターンがインデックス10で見つかりました入力例2:txt = XYZXACAADXYZXYZXpattern

  13. C言語で学ぶ基数ソート(Radix Sort)の仕組みと実装方法

    ソート(整列)アルゴリズムとは、リスト内の要素を特定の順序に並べ替えるためのアルゴリズムのことです。最もよく使われる順序としては、数値の昇順・降順や、辞書式(五十音・アルファベット)順などが挙げられます。 基数ソート(Radix Sort)は、要素同士を比較しない「非比較型」のソートアルゴリズムの一つで、ソートされていないリストに対して特に高い効果を発揮する手法として知られています。 基数ソートでは、同じ位の数字ごとに要素をグループ化することで並べ替えを行います。その基本的な考え方は、最下位桁(LSD:Least Significant Digit)から最上位桁(MSD:Most Signif

  14. C言語で実装する行列の乗算と正規化|アルゴリズムとサンプルコード

    C言語では、行列の乗算や正規化といった線形代数の基本操作を手軽に実装できます。本記事では、行列の乗算が成り立つための条件とアルゴリズム、さらに行列の正規化(ノーマライゼーション)の考え方を、実際に動作するC言語のサンプルコードと実行結果をもとにわかりやすく解説します。 行列の乗算とは 行列の乗算は、一定の条件を満たす場合にのみ定義されます。2つの行列 P と Q の次元がそれぞれ P(a × b)、Q(z × y)であるとしましょう。積の行列 R を求められるのは、「P の列数 b と Q の行数 z が一致する場合」だけです。つまり b = z が必要条件であり、そのとき結果の行列 R の大

  15. バックトラッキング法で解く部分和問題(サブセットサム)のC/C++プログラム

    バックトラッキング(Backtracking)は、探索型の問題を段階的に解決するための手法の一つです。解の候補を一歩ずつ構築していく過程で、その経路が解につながらないと判断した時点で、その経路を打ち切り、直前の分岐点へ戻って(バックトラックして)別の選択肢を試します。これにより、無駄な探索を大幅に減らすことができます。 「部分和問題(Subset Sum Problem)」は、この手法の代表的な応用例です。与えられた正の整数の集合の中から、要素の合計が指定された値 K と一致する部分集合をすべて見つけることを目標とします。ここでは、集合内の要素はすべて正の数であり、重複する要素は存在しないも

  16. 活動選択問題をC言語で解く方法|貪欲法による実装をわかりやすく解説

    活動選択問題(Activity Selection Problem)とは、開始時刻と終了時刻が与えられた複数の活動の中から、「同時に実行できる活動は1つだけ」という条件のもとで、実行可能な活動の最大数を見つける問題です。 この問題では、次に実行すべき活動を選択する際に貪欲法(グリーディアルゴリズム)が用いられます。まずは、貪欲法の基本的な仕組みから確認していきましょう。 貪欲法(Greedy Algorithm)とは 貪欲法とは、問題の解を一歩ずつ積み重ねて構築していくアルゴリズムです。各ステップで次の一手を選ぶとき、その時点で最も有望と考えられる選択、すなわち他の選択肢よりも即座に良い結果

  17. C言語で学ぶ二分探索の実装方法:再帰呼び出しと反復処理を徹底解説

    二分探索(Binary Search)とは二分探索(バイナリサーチ)は、ソート済みの配列から特定の要素(ターゲット値)の位置を効率的に見つけ出すための探索アルゴリズムです。二分探索を適用する前に、配列があらかじめソートされている必要がある点に注意しましょう。このアルゴリズムは、「対数探索」「バイナリチョップ」「半区間探索」などの名前でも知られています。二分探索の仕組み二分探索では、探索したい要素と配列の中央にある要素を比較し、その比較結果に応じて次の処理を決定します。ケース1: 探索要素 = 中央要素 → 要素が見つかったので、そのインデックスを返します。ケース2: 探索要素 > 中央要素 →

  18. C言語でさまざまなフォント・サイズのカラーメッセージを出力する方法

    C/C++言語では、graphics.hヘッダーファイルに含まれるグラフィックス関数を使用することで、出力内容を自由にカスタマイズできます。このライブラリを使えば、図形オブジェクトの作成はもちろん、テキストの色の設定、フォントやサイズの変更、出力画面の背景色の変更なども可能です。ここでは、C/C++プログラミングにおいて出力テキストを装飾するための主要な関数の使い方を順番に解説していきます。1. setcolor() ― テキストの色を変更するsetcolor()関数は、出力するテキストや描画オブジェクトの色を変更するために使用します。引数には0〜15までの整数値(カラー定数)を指定できます。

  19. C/C++で日付の配列をソートする方法をわかりやすく解説

    プログラミングでは、複数の日付データを古い順(または新しい順)に並べ替えたい場面がよくあります。この記事では、C言語およびC++で日付の配列をソートする方法を、具体的なコード例とともに解説します。 日付データはクラスとして定義して扱います(C言語の場合は構造体を使用できます)。C++ではSTL(標準テンプレートライブラリ)に用意されている sort 関数を利用するのが便利ですが、日付同士を比較するためには、年・月・日の順に比較を行う独自の比較関数(コンパレータ)を作成する必要があります。 実装のポイント 日付の大小関係は以下の優先順位で判定します。 まず「年」を比較し、小さい方が前(古い日付

  20. C/C++の単項演算子とは?種類と使い方をわかりやすく解説

    C/C++における単項演算子(unary operator)は、1つのオペランドに対して作用し、新しい値を生成する演算子です。本記事では、C/C++で利用できる主な単項演算子の種類と、それぞれの動作について詳しく解説します。 C/C++の主な単項演算子一覧 演算子説明 間接参照演算子(*)ポインタ変数に作用し、ポインタが指すアドレスにある値と等価な左辺値(l-value)を返します。この操作は「ポインタのデリファレンス(dereferencing)」と呼ばれます。 アドレス演算子(&)オペランドのアドレスを取得する単項演算子です。オペランドには、関数指定子、またはビットフィール

Total 1445 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:42/73  20-コンピューター/Page Goto:1 36 37 38 39 40 41 42 43 44 45 46 47 48