C/C++の宿題を片付けます 118代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

前スレ
C/C++の宿題を片付けます 117代目
http://pc11.2ch.net/test/read.cgi/tech/1225320579/
2デフォルトの名無しさん:2008/11/17(月) 00:00:03
[1] 授業単元:論理設計
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8043.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語:C++
[4] 期限:2008年11月18日10:40まで

よろしくお願いします。
3デフォルトの名無しさん:2008/11/17(月) 00:41:02
別に、独自の環境次第だから、ISO準拠のスタイルにこだわらずとも
void mainでも構わんよ。あとはコンパイラがどう解釈するかで違ってくるし。
内面的には、int mainとして解釈して、これは最適化とはいえないが
自動的に処理されているものもあるし。
4デフォルトの名無しさん:2008/11/17(月) 00:46:56
main厨うざい
5デフォルトの名無しさん:2008/11/17(月) 02:35:48
>>2 課題1
#include <iostream>
#define foe if(false); else for
using namespace std;
int main()
{
cout << "何人のテストの点数を入力しますか?" << endl;
int n;
cin >> n;
int *score = new int[n];
cout << "人数分の点数を入力してください。" << endl;
for(int i = 0; i < n; i++)
cin >> score[i];
double sum = 0;
for(int i = 0; i < n; i++)
sum += score[i];
cout << "平均点は" << sum/n << "です。" << endl;
}
6デフォルトの名無しさん:2008/11/17(月) 02:47:03
>>2 課題2
Kadai2.cpp
#include <iostream>
using namespace std;
#include "shell.h"
int main()
{
double r;
cout << "半径を入力してください。: ";
cin >> r;
cout << "半径は" << r << "です。" <<endl;
cout << "体積は" << volume(r) - volume(r - 1)<< "です。" <<endl;
cout << "円周率を" << PI << "で計算しました。" <<endl;
}
7デフォルトの名無しさん:2008/11/17(月) 02:47:57
>>2 課題2 つづき
shell.cpp
double volume(double r)
{
return r*r*r*4.0/3.0*PI;
}
shell.h
8デフォルトの名無しさん:2008/11/17(月) 02:48:39
shell.h
#define PI 3.1416
double volume(double r);
9デフォルトの名無しさん:2008/11/17(月) 13:14:25
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8045.txt
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 11月19日(水)まで
[5] その他の制限:特になし

よろしくお願いします
10デフォルトの名無しさん:2008/11/17(月) 13:35:14
>>9
課題1-1, 1-2 は前スレ>>885
同じ学校かww
11デフォルトの名無しさん:2008/11/17(月) 14:24:09
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
二つの正の整数値width(幅),height(高さ)を読み込む。
長方形を描くときに,ふちだけ*文字を出力するようにする。長方形の中央部は,スペース
文字を使ってあける。もしwidth が5,height が4 であれば,次のように出力される。
*****
*  *
*  *
*****
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ:VC 6.0
[3.3] 言語:C

よろしくお願いします。
12デフォルトの名無しさん:2008/11/17(月) 14:24:58
13デフォルトの名無しさん:2008/11/17(月) 14:40:43
>>11
#include <stdio.h>
int main()
{
int width, height, i, j;
printf("幅?:");
scanf("%d", &width);
printf("高さ?:");
scanf("%d", &height);
for(i = 0; i < height; i++){
for(j = 0; j < width; j++)
if(i == 0 || i == height - 1 || j == 0 || j == width - 1)
printf("*");
else
printf(" ");
printf("\n");
}
return 0;
}
14デフォルトの名無しさん:2008/11/17(月) 15:17:16
[1] 授業単元:C言語-構造体-
[2] 問題文:
 姓,名,年齢,郵便番号,電話番号の各データをメンバとする構造体配列を下記
のように宣言し,その構造体配列にキーボードからデータを逐次入力して,最大100 名
のデータを格納できるようにしなさい。但し,入力の終了は,姓入力の際にnull と入力
することによって判定しなさい。また,入力が終了した時点で,格納された複数名のデ
ータをすべて出力するようにしなさい。
#define MAXREC 100
struct namelist {
char last_name[21], first_name[21];
int age;
char zip[9], tel[13];
} meibo[MAXREC];
▼出力例
Last name(終了はnull 入力)> Tanaka
First name > Tarou
Age > 49
Zip code > 123-4567
Telephone > 0120-1234567
Last name(終了はnull 入力)> null
Name : Tanaka Tarou
Age : 22
Zip code : 123-4567
Telephone: 8899-1234567
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 2008年11月18日 24:00

C言語の、基本的な関数のみでお願いします。
15りょyu:2008/11/17(月) 15:25:48
<input type="button" class="button" value="編集" onClick="editEmployeeInfo"(<bean:write name="searchList" property="employee_id"/>)

研修生です。eclipse,Tomcatを使用しています。
自分は編集ページ担当で、
自分のぺージでは、編集元の情報を表示させてから内容を書き換えて、
データベースに更新する部分をやっています。
上に書いたソースは社員情報ページのボタンで、
社員Id(employeeID)を送ってるらしいんですけど、
これを自分の担当ページでこの社員Idをもとに情報をデータベースから取り出し
担当画面に表示させたいのですが分かりません。
質問が大雑把ですが、大まかにどういう流れで作業を行えばいいか教えてください。

16デフォルトの名無しさん:2008/11/17(月) 16:06:54
>>14
#include <stdio.h>
#include <string.h>
#define MAXREC 100
int main(int argc, char *argv[])
{
struct namelist {
char last_name[21], first_name[21];
int age;
char zip[9], tel[13];
} meibo[MAXREC];
int i, count;

for (i = 0; i < MAXREC; i++) {
printf("Last name > "); scanf("%s", meibo[i].last_name);
if (strcmp(meibo[i].last_name, "null") == 0) {
break;
}
printf("First name > (終了は null 入力)"); scanf("%s", meibo[i].first_name);
printf("Age > "); scanf("%d", &meibo[i].age);
printf("Zip code > "); scanf("%s", meibo[i].zip);
printf("Telephone > "); scanf("%s", meibo[i].tel);
}
count = i;
for (i = 0; i < count; i++) {
printf("Name: %s %s\n", meibo[i].last_name, meibo[i].first_name);
printf("Age: %d\n", meibo[i].age);
printf("Zip code: %s\n", meibo[i].zip);
printf("Telephone: %s\n", meibo[i].tel);
}
return 0;
}
1716:2008/11/17(月) 16:11:26
あ、「終了は null 入力」を入れるところを間違えた

- printf("Last name > "); scanf("%s", meibo[i].last_name);
+ printf("Last name > (終了は null 入力)"); scanf("%s", meibo[i].last_name);

- printf("First name > (終了は null 入力)"); scanf("%s", meibo[i].first_name);
+ printf("First name > "); scanf("%s", meibo[i].first_name);
18デフォルトの名無しさん:2008/11/17(月) 16:20:15
>>15
> 質問が大雑把ですが、大まかにどういう流れで作業を行えばいいか教えてください。

大まかにいうと、まずスレ違いだから正しいスレを探す
19デフォルトの名無しさん:2008/11/17(月) 18:28:39
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8047.c
strcpy(), strcat(), strcmp(), strlen()を使わずに、↑のリンクにあるプログラムと
同じ処理をするプログラムを書け。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年11月18日まで
[5] その他の制限:
習った範囲はCの基礎から制御文、データ型、変数、配列と文字列くらいです。

よろしくお願いします。
20デフォルトの名無しさん:2008/11/17(月) 19:12:09
21デフォルトの名無しさん:2008/11/17(月) 19:14:54
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
二階常微分方程式 y''=xy'+y を初期条件(x0,y0)=(0,1), y'=1のもとでルンゲクッタ法によりx=1.0まで10等分して求めよ。
(上の式を次のように1階連立常微分方程式に変換して求めればよい。y1'=y2, y2'=xy2+y1)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2008年11月19日まで
[5] その他の制限: double function (double , double*, int)
double rungekutta(double , double)

double function (double x , double *yp , int j )
double rungekutta(double x , double *yp ,double h)

を利用するとよい。 と言っていました。
          よろしくお願いします^^  
22デフォルトの名無しさん:2008/11/17(月) 19:34:14
前スレの693です。提出期限が延びたのでお願いします。

[1] 授業単元:C言語入門
[2] 問題文(含コード&リンク):
0度から360度までのSin(x)の値を文字コード*を使ってグラフを表示するプログラムをC言語で作成せよ。
実行結果の例をアップローダーに貼り付けました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8012.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2005
 [3.3] 言語: C
[4] 期限: 2008年11月21日
[5] その他の制限: ファイルの入出力まで習いました。

よろしくお願いします。
2319:2008/11/17(月) 19:53:19
>>20
早い回答で助かります。ありがとうございました!!
24デフォルトの名無しさん:2008/11/17(月) 19:58:16
>>22
配列は習ったの?
25デフォルトの名無しさん:2008/11/17(月) 20:29:09
>>13
ありがとうございました!!
26デフォルトの名無しさん:2008/11/17(月) 20:46:22
外部コマンド使わずにprintfだけで自分自身のソースを吐き出すプログラム
ってどうする?
27 ◆vfu2FjSsg6 :2008/11/17(月) 20:49:06
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8049.txt
↑のリンクにあるリストのNoの数字を入力すると、その行の各値を出力する
プログラムの作成。

例:
No-->31

a=0
b=48
c=35.42
d=-74
e=55
f=24.37

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語: C
[4] 期限: 2008年11月22日まで

よろしくお願いします。
28デフォルトの名無しさん:2008/11/17(月) 20:49:14
【質問テンプレ】
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
6 個の要素をもつ整数配列data を初期化して(例えばint data[6]={14,9,7,12,8,10};)
宣言する。これはサイコロを何回か振ったとき,「1が出た回数」,「2が出た回数」,…
「6が出た回数」だとする。それぞれの目が出た回数を,for 文を使っ
て,*で表しなさい。上記の配列の初期値であれば,次のように出力されればよい。
1 **************
2 *********
3 *******
4 ************
5 ********
6 **********
[3] 環境
 [3.1] OS:Win
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語C
[4] 期限:11/14

よろしくお願いします。
29デフォルトの名無しさん:2008/11/17(月) 21:10:45
>>27
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8050.txt
データファイルはコマンドライン引数であたえる仕様
30#:2008/11/17(月) 21:39:44
>>29
早い回答ありがとうございます!!
助かりました。
31デフォルトの名無しさん:2008/11/17(月) 21:46:56
#include <stdio.h>

int main(void)
{
int i, j;
int data[6] = {14, 9, 7, 12, 8, 10};
for (j = 0; j < 6; j++) {
printf("%d ", j + 1);
for (i = 0; i < data[j]; i++) {
printf("*");
}
printf("\n");
}
return 0;
}

32デフォルトの名無しさん:2008/11/17(月) 21:47:49
>>31>>28な。
33デフォルトの名無しさん:2008/11/17(月) 21:51:43
>>32
迅速な回答ありがとうございます!
助かりました!
34デフォルトの名無しさん:2008/11/17(月) 22:20:28
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8051.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年11月20日まで
[5] その他の制限:

出来る部分まではやってみたのですがどうしてもうまくいきません。
お願いします。
35デフォルトの名無しさん:2008/11/17(月) 23:50:12
int main()
{
}
36デフォルトの名無しさん:2008/11/18(火) 00:16:05
>>26
quineとかでぐぐれば色々でてくるとおもうが
文字列出力にprintfしかつかえないっつうんならこんなんか
処理系によってはうまくいかんかもしれんが
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8052.txt
色々省いてもっと短いのもあるけど
37デフォルトの名無しさん:2008/11/18(火) 00:43:54
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク): @)円周率πの近似式
                   4(-1)^n/(2n+1){(1/2)^(2n+1)+(1/3)^(2n+1)}
                   (nは0〜100) を用いて小数第8桁まで正しい値(3.14159265)を
                   出力するプログラムを作れ。
        
               A)さらにその出力された数値γに対し次の不当式を満たす最小の自然数Nを
                 求めるプログラムを作れ。
                 #π^2/6-1/k^2#<γ
                 (##は絶対値記号、kは1〜Nまで)
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11月21日17時
[5] その他の制限:for文、break文あたりまでやったのですがいまいち使い方が理解できません・・・
         配列と数学関数は使用禁止です。お手数ですがよろしくお願いします。
38デフォルトの名無しさん:2008/11/18(火) 01:36:35
>>37
#include <stdio.h>

int main (void)
{
int i;
double pi, sum, gam, a, b, c;

a = 1.0; b = 0.5; c = 1.0/3.0;
sum = b + c;
for(i=1; i<=100; i++){
pi = 4.0 * (sum += (a*=-1) / (2*i + 1) * ((b*=0.5*0.5) + (c*=1.0/9.0)));
}
printf("π≒%.8f\n", pi);

printf("γ:");
scanf("%lf", &gam);

i = 1; sum = 0.0;
while(1){
a = pi*pi/6 - (sum += (1.0/(double)i)*(1.0/(double)i));
if(a < 0)
a *= -1.0;
if(a < gam)
break;
i++;
}
printf("N = %d\n", i);

return 0;
}
39 ◆p31Igks42. :2008/11/18(火) 03:14:09
[1] 授業単元:while
[2] 問題文(含コード&リンク):
「2進数⇔10進数」変換プログラムを作りなさい。
また「16進数⇔10進数」変換ができるようにプログラムを拡張しなさい。
さらに「x進数⇔10進数」変換ができるようにプログラムを拡張しなさい。
Ex:10進モード(decimal):54(10)→110110(2)
[3] 環境
OS:WindowsXP
コンパイラ:Visual C
言語:C
[4] 期限: 今月30日まで
[5] その他の制限: whileを習い終わって、今は関数と引数について
40 ◆p31Igks42. :2008/11/18(火) 03:16:00
2進数⇔10進数の変換プログラムは作れました。
16進数⇔10進数以降がわかりません。
よろしくお願いします。
41デフォルトの名無しさん:2008/11/18(火) 06:29:30
⇔ って書かれているけど、双方?
どちらか一方を入力して、例えば2進数を10進数に、16進数を10進数と、n進数を
10進数にするだけでなく、10進数を任意のn進数にもするってこと?
出来れば、もう少し具体的な実行例を書いてもらいたい。
42 ◆p31Igks42. :2008/11/18(火) 06:59:25
⇔は双方向という意味です。
・10進数→n進数,2進数,16進数
・n進数,2進数,16進数→10進数
の両方を実行できるプログラムということです。

「拡張しなさい」と書かれているので、
「10進数⇔2進数」かつ「10進数⇔16進数」を実行できるプログラムのことだと私は考えてます。

なので、はじめに例えば「x進数のnをy進数に変換する」といったテキストを表示させ、
「x= 」「n= 」「y= 」と順に入力させて、変換させたのを表示するといった感じに考えています。

よろしくお願いします。
43デフォルトの名無しさん:2008/11/18(火) 07:42:57
xはどこまで行ければいいんだ
37進数以上可だとだと数字セットをどうするかの問題があるぞ
44デフォルトの名無しさん:2008/11/18(火) 08:20:49
[1] 授業単元:OS論
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8053.txt
[3] 環境
 [3.1] OS: Unix(Soralis)
 [3.2] gcc 3.4.3
 [3.3] 言語:C
[4] 期限: 11月21日12:00
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

よろしくお願いします
4544:2008/11/18(火) 08:27:10
連投すみません上の課題2は結構です
課題1のみでお願いします
46 ◆p31Igks42. :2008/11/18(火) 09:02:08
>>43
なるほど、確かにそうですね。
問題文が不十分なのは恐縮ですが、zまでの36進数でお願いします。
47デフォルトの名無しさん:2008/11/18(火) 10:54:52
【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): 直角三角形の直角をはさむ辺の長さをx とy とすると,斜辺z の長さはx2 + y2
という計算式で求めることができる。(ピタゴラスの定理,三平方の定理,などと呼ばれる)

 Ι\z
yΙ_\
  x

実数x とy をキーボードから読み込み,z を求めるプログラムを作成しなさい。
その際,ファイルmath.h にある,次のライブラリ関数を利用してプログラムを作成すること。
●平方根(ルート)を求める関数 double sqrt( double x)
[3] 環境
 [3.1] OS:Win
 [3.2] コンパイラ:VC 6.0等
 [3.3] 言語 :C

お願いします。
48デフォルトの名無しさん:2008/11/18(火) 11:03:40
#include <stdio.h>
#include <math.h>

int main(void) {
double x,y,z;l
scanf("%lf %lf",x,y);
z=sqrt(x*x+y*y);
printf("%lf",z);
return 0;
}
49デフォルトの名無しさん:2008/11/18(火) 11:05:47
引数にプロセスIDを与えて実行するとそのプロセスを殺すC言語のプログラムってどう書けばいいですか?
50デフォルトの名無しさん:2008/11/18(火) 11:10:21
>>49
kill( pid, SIGKILL);
51デフォルトの名無しさん:2008/11/18(火) 11:16:13
C言語のプログラムでの引数とは、argv[1]になると思いますがその場合は?C言語内でいきなりkillコマンドは実行出来ないですよね。exec系を使う必要あり?
52デフォルトの名無しさん:2008/11/18(火) 11:33:40
>>51
kill はシステムコールだから直接呼べるよ

Linux だと以下をインクルードせよとある
man -s 2 kill で調べてごらん
#include <sys/types.h>
#include <signal.h>
53デフォルトの名無しさん:2008/11/18(火) 11:47:29
ありがとうございました
54デフォルトの名無しさん:2008/11/18(火) 11:48:36
>>16
親切な回答ありがとうございました!
55デフォルトの名無しさん:2008/11/18(火) 11:56:24
>>51
環境を書けよ
56デフォルトの名無しさん:2008/11/18(火) 13:43:40

[1] 授業単元:アルゴリズム(ダミーセル)
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8054.c
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語: C
[4] 期限: 2008年11月25日13:00まで
[5] その他の制限:なし
57デフォルトの名無しさん:2008/11/18(火) 13:44:45

書き忘れてしまいました
宜しくお願いします
58デフォルトの名無しさん:2008/11/18(火) 16:58:42
[1] 授業単元:C
[2] 問題文(含コード&リンク) @http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8056.txt
Ahttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8055.txt
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: V stadio
 [3.3] 言語: C
[4] 期限:2008 11月20日まで
@Aそれぞれ穴埋めに違いですがお願いします
59デフォルトの名無しさん:2008/11/18(火) 17:18:10
線形リストの課題多すぎw
60デフォルトの名無しさん:2008/11/18(火) 17:26:58
俺のところでも研究室の課題で出たばっかりだw
61デフォルトの名無しさん:2008/11/18(火) 18:21:42
[1] 授業単元: c
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8057.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8058.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8059.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] VC 6.0
 [3.3] 言語: C++
[4] 期限: 2008/11/19 17:00
[5] その他の制限: プログラミングTの範囲でなるべく単純なプログラムでおねがいします。

6222:2008/11/18(火) 18:34:27
>>24
習いました。
どうぞよろしくお願いします。
63デフォルトの名無しさん:2008/11/18(火) 18:47:08
>>61
プログラミングIの範囲って、同じ授業受けてないとわかるわけないだろw
6461:2008/11/18(火) 18:55:01
>>63
すいません。配列/ポインタまで習いました。
65デフォルトの名無しさん:2008/11/18(火) 19:15:56
指導方法によって習う順もまちまちなわけだが。
66 ◆p31Igks42. :2008/11/18(火) 19:55:49
>>42ですが、申し訳ありません。
習ったのは次のことですので、これらのみを用いて作っていただきたいです。
・printf ・scanf ・四則演算 ・配列
・if ・while ・for ・関数と引数(習い始めたばかり)
よろしくお願いします。
67デフォルトの名無しさん:2008/11/18(火) 20:05:03
>>66
心配しなくても、バレるよ
68デフォルトの名無しさん:2008/11/18(火) 20:34:41
>>39
n進数を指定して、入力したn進数を10進数に変換するのみ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8060.c
69デフォルトの名無しさん:2008/11/18(火) 20:35:52
7058:2008/11/18(火) 21:23:49
>>58の@は解決したのでAだけお願いします
71デフォルトの名無しさん:2008/11/18(火) 21:31:00
>>39
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8063.c
10進数を基数を指定してn進数に変換、2^31以上、不の値は考慮せず
72デフォルトの名無しさん:2008/11/18(火) 21:49:20
[1] 授業単元:プログラミング
[2] 問題文:半角文字でできた文字列をキーボードから読み込んで、
        逆転させた文字列をつなげて回文を作り、表示させなさい。
例:Personを入力してPersonnosrePを返す。
[3] 環境
 [3.1] WindowsXP
 [3.2] VisualC++
 [3.3] 言語:C++
[4] 期限: 明日まで
[5] 条件は文字の配列を利用することです。(サイズは100)
文字列用のライブラリ関数はstrcpy、strlen、strcat、strcmp、strstrは習いました。
あとは条件分岐とループぐらいしかやってないと思います。
1文字目に3文字目をコピーは m[0] = m[2]のように行うらしいですが…

期限ぎりぎりまで粘りましたが、どうしても分かりません。よろしくお願いします。
73デフォルトの名無しさん:2008/11/18(火) 21:59:23
[1] 授業単元:計算機プログラミングU
[2] 問題文(含コード&リンク):
  “Izumi”,”Kanto”,”Kudo”,”Sato”,”Sugawara”,”Matsuda”,”Wada”の
  7個の文字列の長さ(文字数)をカウントして,文字列とともに表示せよ.ただし,
  ポインタを使用して処理すること.
  Char *name[] = { “Izumi”, ”Kanto”, ”Kudo”, ”Sato”, ”Sugawara”,
           ”Matsuda”, ”Wada”, NULL};
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2008年11月20日10:30まで
[5] その他の制限:
74デフォルトの名無しさん:2008/11/18(火) 22:03:52
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
#include<stdio.h>
int main(void)
{
int a;
int i;
int n;
printf("ニュウリョク 初期値");
scanf("%d",&a);
printf("ニュウリョク 個数");
scanf("%d",&n);

/*a=2;*/
for (i=1; i<=n; i++)
{a=2*a;
printf("%d ",a);
}
}
/*
以上が
漸化式an+1=2anの数列の初期値aの物をn個表示させる式です。
これを
{an+1=2an-bn
{bn+1=2bn-an
の式にした物を表示させるプログラムをお願いします。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:
[5] その他の制限:
75 ◆p31Igks42. :2008/11/18(火) 22:15:46
>>68-71
ありがとうございました。
しかしまだ「#include <stdio.h>」で始まるものしか習っていなく、
#defineや#include <stdlib.h>などは使えません。
これらを使わずに作っていただけませんか?
76デフォルトの名無しさん:2008/11/18(火) 22:46:58
>>74
bnも自分で初項を決める?
77デフォルトの名無しさん:2008/11/18(火) 22:49:40
>>69は8062.cだったが、また間違ってたようだ・・・すまそ。
>>75文字列を入力する際に、scanfを使うことに?
バッファオーバーランのこともあるが、一定の範囲内、条件下で
良ければ、簡単に作り直せるが。
78デフォルトの名無しさん:2008/11/18(火) 22:56:26
>>76さん
bnも初項を決めるものでお願いします。
79デフォルトの名無しさん:2008/11/18(火) 23:08:58
>>67
なるほど。そういう返し方があったか
80デフォルトの名無しさん:2008/11/18(火) 23:15:29
>>39
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8064.c
基数を指定したn進数を10進数に変換
81デフォルトの名無しさん:2008/11/18(火) 23:23:58
82デフォルトの名無しさん:2008/11/18(火) 23:36:22
[1] 授業単元:Cプログラミング T
[2] 問題文(含コード&リンク):
指定した回数(整数)の加算を行い、平均(float)を
  返す関数を作成する。
[3] 環境
 [3.1]OS:WindowsXP
 [3.2]コンパイラ名とバージョン:gcc
 [3.3]言語:C
[4] 期限:2008年11月20日18:00
[5] その他の制限:
よろしくお願いします
83デフォルトの名無しさん:2008/11/19(水) 00:22:41
8437:2008/11/19(水) 00:38:28
>>38
ありがとうございます!
85デフォルトの名無しさん:2008/11/19(水) 00:52:14
>>80 >>39
あり?なんか、またURLが間違ってた・・・すまそ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8065.c
86デフォルトの名無しさん:2008/11/19(水) 00:55:09
>>73
#include <stdio.h>
int main()
{
  char *name[] = {"Izumi","Kanto","Kudo","Sato","Sugawara","Matsuda","Wada",NULL};
  char **p,*q;
  for(p = name; *p; p++){
    for(q = *p; *q; q++);
    printf("%s(%d)\n", *p, (int)(q-*p));
  }
  return 0;
}
87デフォルトの名無しさん:2008/11/19(水) 01:05:24
>>72
#include <stdio.h>
int main()
{
  char s[100] = "Person";
  int i,j;
  for(i=0; s[i]; i++);
  for(j = i - 1; j >= 0; j--, i++) s[i] = s[j];
  puts(s);
  return 0;
}
88デフォルトの名無しさん:2008/11/19(水) 01:08:37
ああ、「返す」ってことは関数にするのか。
ま、いっか。
89デフォルトの名無しさん:2008/11/19(水) 01:17:53
質問したいことがあります。
私は年月日を与えて、何曜日かを求めるプログラムを2通り作りました。
1つはツェラーの公式をつかったもの。
もう1つは1753年1月1日が月曜日だということから、その日からの何日経過したかということから求めるもの。
この2つが正しいことを示すには、適当に年月日を与えて等しくなるということを言うしかないのでしょうか。
それだと完璧には示せないような気がします。
どなたかお願いします。
90デフォルトの名無しさん:2008/11/19(水) 01:22:49
日にち曜日一覧を読み込んでチェックするプログラム作れば?
曜日一覧は Excel使えばすぐ作れる。
91デフォルトの名無しさん:2008/11/19(水) 01:29:12
C言語を習い始めたばかりなので、あまり難しいことは・・・
もっと簡単にできることはないでしょうか。
92デフォルトの名無しさん:2008/11/19(水) 01:40:44
エクセーールではぁー、自分の手元にバージョン2003がありますが
1970年1月1日から、経過した日数をぉ〜、シリアル値として
整数で管理している仕組みがあーりまーす。書式設定で、日数を
年月日表示にしてくれまーす。
よって、それ以前の日付に関しては、管理してくーれませーん
余談ですがー、現在使われているグレゴチャン暦はー、
1582年10月15日を金曜日として、使われ始めますたー
導入した日は、各国で違いまーす
93デフォルトの名無しさん:2008/11/19(水) 01:43:03
おぉー、私としたことが、間違えますたー。1970年を基準にしてたのは
C言語のあるライブラリのことでしたー。エクセルは1900年1月1日でーす。
94デフォルトの名無しさん:2008/11/19(水) 01:45:18
>>5,6,7,8
ありがとうございます。
大変助かりました。
95デフォルトの名無しさん:2008/11/19(水) 01:55:09
>>61
/* 問1 */
#include <stdio.h>
#include <string.h>
int main()
{
  char buf[1024], *p;
  printf("文字列を入力してください。 ");
  fgets(buf, sizeof(buf), stdin);
  printf("反転文字列は\"");
  p = &buf[strlen(buf) - 2];
  while(buf <= p) putchar(*p--);
  puts("\"です。");
  return 0;
}
/* 問2 */
#include <stdio.h>
#include <ctype.h>
int main(){
  char buf[1000], *p;
  int cnt['Z'-'A'+1] = {0}, i;
  printf("文字列を入力してください。 ");
  fgets(buf, sizeof(buf), stdin);
  for(p = buf; *p; p++) if(isalpha(*p)) cnt[toupper(*p) - 'A']++;
  puts("アルファベットの数");
  for(i=0; i<sizeof(cnt)/sizeof(cnt[0]); i++) if(cnt[i] > 0) printf("%c or %c --> %d\n", i + 'A', i + 'a', cnt[i]);
  return 0;
}
96デフォルトの名無しさん:2008/11/19(水) 01:56:03
>>61
/* 問3 */
#include <stdio.h>
#include <string.h>
int main(){
  char buf[10000], c, *p;
  int pos[10000];
  int i = 0;
  printf("文字列を入力してください: ");
  fgets(buf, sizeof(buf), stdin);
  buf[strlen(buf) - 1] = '\0';
  printf("検索文字を入力してください: ");
  c = getchar();
  for(p = buf; *p; p++) if(*p == c) pos[i++] = (int)(p - buf) + 1;
  if(i==0){
    puts("\nそんな文字は入っていない!");
  }else{
    int j;
    printf("文字列\"%s\"に\"%c\"は\n", buf, c);
    for(j = 0; j < i; j++)printf("%d番目\n", pos[j]);
    puts("にあります。");
  }
  return 0;
}
97デフォルトの名無しさん:2008/11/19(水) 01:56:49
あ、問2 と 3 が逆だった。
98デフォルトの名無しさん:2008/11/19(水) 01:58:49
[1] 授業単元:プログラミング演習C言語 
[2] 問題文(含コード&リンク):
フィボナッチ数列 F[n+2] = F[n+1] + F[n] (n≧0 F[0]=0 F[1]=1)
の n = 1 から 20 までの和を計算し、結果を出力するプログラムを作ってください。
[3] 環境:
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc  最新のバージョン
 [3.3] 言語: C
[4] 期限:明日
[5] その他の制限:配列で解く。和の計算はfor文を使う
 #include <stdio.h>

main(){
int i, fibo [20], sum = 0;
フィボナッチ数列を配列に入れる;
和を計算する;
printfで和を出力する;

↑が当てはめるテンプレです。よろしくお願いします
99デフォルトの名無しさん:2008/11/19(水) 02:08:31
>>98
#include <stdio.h>
int main(void) {
int i, fibo [20], sum = 0;
fibo[0]=1; fibo[1]=1;
for(i=2; i<20; i++) fibo[i]=fibo[i-2]+fibo[i-1];
for(i=0; i<20; i++) sum+=fibo[i];
printf("sum : %d\n",sum);
return 0;
}
100デフォルトの名無しさん:2008/11/19(水) 02:09:44
>>99は fibo[0]=0; に書き換えておいて。
101デフォルトの名無しさん:2008/11/19(水) 02:11:02
>>98
main(){
int i, fibo[20], sum = 0;
fibo[0] = 1;fibo[1] = 1;
for(i=2; i<20; i++) fibo[i] = fibo[i-1] + fibo[i-2];
for(i=0; i<20; i++) sum += fibo[i];
printf("%d\n", sum);
}
102デフォルトの名無しさん:2008/11/19(水) 02:23:53
>>101
なるほど・・・
それだとF[0]のからF[20]まで足してるんじゃ?
初心者ながら疑問に思いました
できたら回答をお願いします
103デフォルトの名無しさん:2008/11/19(水) 02:31:19
配列サイズが20だから使える添え字は19まで。
0 〜 19 を使って、 n=1〜20を格納している。
つまり>>101 では、 n=1 の値を fib[0] に、 n=2 の値をfib[1]に入れている。
104デフォルトの名無しさん:2008/11/19(水) 02:35:24
for(i=0; i<20; i++) {
sum+=fibo[i];
printf("fibo[%d] : %d / sum : %d\n",i,fibo[i],sum);
}
内面的な部分を見たいなら、こんな感じで実行結果を見てみては?
105デフォルトの名無しさん:2008/11/19(水) 02:47:20
>>104
てことは>>101のF[1]=1
ってのは自分で数列のF[2]の値だからそれは自分で計算したってことでいいんですよね?

たしかに教授はサイズは20以上でもいいとか言ってたけど・・・そのせいかな
10661:2008/11/19(水) 02:47:56
>>97
動作確認できました。ありがとうございました。
107デフォルトの名無しさん:2008/11/19(水) 02:51:35
>>105
添え字と、先頭から何番目かを求めるのに混乱していない?
f[0]は1番目、f[1]は2番目、f[19]は20番目。0オリジンって言うんだが
そういうのに慣れるべし。
宣言したとき、f[20]ではf[19]まで。要素の数は20個だけど
20番目はf[19]で。くどいがそういうこと。
108デフォルトの名無しさん:2008/11/19(水) 02:55:15
俺の日本語おかしすぎる・・・
main(){
int i, fibo[20], sum = 0;
fibo[0] = 1;fibo[1] = 1; ←ここ
for(i=2; i<20; i++) fibo[i] = fibo[i-1] + fibo[i-2];
for(i=0; i<20; i++) sum += fibo[i];
printf("%d\n", sum);
}

気になったのはこの fibo[1] = 1 は自分で計算したのかなと思ったんです
うっす。教科書読んで勉強します
109デフォルトの名無しさん:2008/11/19(水) 02:56:37
>>105

>てことは>>101のF[1]=1
>ってのは自分で数列のF[2]の値だからそれは自分で計算したってことでいいんですよね?

そゆこと。
110デフォルトの名無しさん:2008/11/19(水) 02:57:53
>>109
了解です
長々と迷惑をかけ申し訳ないです
どうもありがとうございました
111デフォルトの名無しさん:2008/11/19(水) 02:59:20
>>108
> 自分で計算
というか、初期値を代入してあるのだが、まぁそういうことだ。
112デフォルトの名無しさん:2008/11/19(水) 03:03:46
>>98
> (n≧0 F[0]=0 F[1]=1)
> n = 1 から 20 までの和を計算し
この条件があるわけだし
まぁ、そういことか・・・答えている自分も見落としてたが
結局n=0は0だし、かといってそのnが添え字のことを意味していたら
F[20]ではF[19]までだし・・・まぁ、解決したから良いか。
113デフォルトの名無しさん:2008/11/19(水) 03:04:30
main(){
int i,a=0,b=1,s=0;
for(i=0;i++<20;b=a-b,s+=a)a+=b;
printf("%d\n",s);
}

フィボナッチ数列の計算に配列は必要ないんだぜ。
114113:2008/11/19(水) 03:06:18
あ、条件に配列ってありますね。見落としてました。すみません。
115デフォルトの名無しさん:2008/11/19(水) 03:06:33
配列サイズが20以上でいいなら、もっと自然に書ける。
int i, fibo[21], sum = 0;
fibo[0] = 0; fibo[1] = 1;
for(i=2; i<=20; i++) fibo[i] = fibo[i-1] + fibo[i-2];
for(i=1; i<=20; i++) sum += fibo[i];
printf("%d\n", sum);
116デフォルトの名無しさん:2008/11/19(水) 03:08:21
>>115
なるほど・・・・教授め20なんて書きやがって。

21で提出してやります。ありがとうございました
117デフォルトの名無しさん:2008/11/19(水) 03:09:27
ってか、どの道添え字でf[0]の中身が0だし、結果としては、
ってか、最初の0は抜きに、1,1,2から始まる形で20項目までなら、
上にあるコードの結果の合計に加え、もう1項分先の値が加えられるが・・・
118デフォルトの名無しさん:2008/11/19(水) 03:12:22
>F[n+2] = F[n+1] + F[n] (n≧0 F[0]=0 F[1]=1)

この条件から、n=0 は 0 でしょ。
で、F[] と fibo[] を一致させろとは書いてない。

適当に出題しただけかもしれないけど。
119デフォルトの名無しさん:2008/11/19(水) 03:14:04
たしかに一致とは言ってなかったですね
最後あたりに
「やっぱF[30]あたりでもいいよ」
とか適当なこと言ってたなぁ・・・。
120デフォルトの名無しさん:2008/11/19(水) 03:25:54
いい教授だと思う。
20厳守と思わせないフリを入れてるところとか、21と言わず、30くらいでもいいよというところとか。
何も言わずに20としか書いてなかったらそれを変えることが許されないように思うからな。
121デフォルトの名無しさん:2008/11/19(水) 03:31:28
結論。>>115で出しておk。教授が使うように提示した枠組みのコードの宣言が
fibo[20]なら、それに従え、以上w
122デフォルトの名無しさん:2008/11/19(水) 03:34:04
すべては教授の意のままか・・・。
もう三時www寝なきゃww
ありでした
123デフォルトの名無しさん:2008/11/19(水) 03:49:25
散々既出のヘボナッチで随分スレ汚ししちまった、すまそ>ALL
124デフォルトの名無しさん:2008/11/19(水) 04:07:54
[1] 授業単元:文字と文字列の操作
[2] 文字列を読み込み、その長さを表示するプログラムをかけ
  ただしstrlen関数は使わない
[4] 期限: 明日の夜までに
[5] 文字列は習ったばかり、繰り返し、条件などはならっています。
  fgets関数を使うらしいのですが、いまいち意味がわかりません。
125デフォルトの名無しさん:2008/11/19(水) 04:19:04
>>124 MAX-1文字まで対応。fgetsの性質上、改行コードを検出したらカウント終了。

#include <stdio.h>
#define MAX 1024
int main(void)
{
char str[MAX];
int cnt;
printf("Input > ");
fgets(str,MAX,stdin);

for(cnt=0; cnt<MAX; cnt++) if(str[cnt]=='\n') break;
printf("%d文字\n",cnt);

return 0;
}
126デフォルトの名無しさん:2008/11/19(水) 04:25:09
ありがとうごいざます。
ただ#define はわかりません。
あと書き忘れていましたが
100文字以内と仮定していいらしいので
fgets(s,100,stdin);となると思います。
127デフォルトの名無しさん:2008/11/19(水) 04:26:31
>>126
んじゃ、MAXを消して、替わりにMAXを100に置き換えて終了。
128デフォルトの名無しさん:2008/11/19(水) 04:33:01
#include<stdio.h>
main(){
char s[100];
int cnt /*文字数かつ制御変数*/
printf("input>");
fgets(s,100,stdin);

for(cnt=0;cnt<100;cnt++){
if(s[cnt]=='\n') break(このbreak 終わりという意味だと思うのですが
            まだならっていません。)

printf("%d文字",cnt);
}

breakの変わりにwhileを使うのでしょうか?
129デフォルトの名無しさん:2008/11/19(水) 04:35:16
もう許してw

#include <stdio.h>
main(void) {
char str[101];
int cnt;
printf("Input > ");
fgets(str,101,stdin);
for(cnt=0; cnt<101 && str[cnt]!='\n'; cnt++) ;
printf("%d文字\n",cnt);
}
130デフォルトの名無しさん:2008/11/19(水) 04:39:12
ああなるほど…
本当にすいませんでした。
自分の頭の悪さにうんざりします。
ありがとうございました。
131 ◆p31Igks42. :2008/11/19(水) 05:05:47
>>81
ありがとうございました。
しかし「const」「char」というのもまだ習っていません。
もう1度上記の2つを使わずに作っていただけませんか?
お願いします。
132デフォルトの名無しさん:2008/11/19(水) 05:13:27
>>131
constは外しても良いけど、char無しで
どうやって英数字が含まれる数値を表せと・・・
わざわざ、ifはちょっと効率が悪いんで、
スイッチを使って A なら 10、Bなら11とか・・・?
ASCIIコードを使うのもありだが・・・
133デフォルトの名無しさん:2008/11/19(水) 05:23:12
>>131 とりあえず、ASCIIコード表をもとに
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8069.c
134デフォルトの名無しさん:2008/11/19(水) 07:30:13
>>130
後になって気づいたけど、fgetsの性質上、例えばs[10]とした場合
9文字でも最後の1文字に\0(空文字)が入り、改行コードが
s[10]の中に入らないので、カウントは最大の10文字を数えてしまう。
10文字以上入力しても、配列に入るのは9文字+空文字。
10文字以上入力しても、仕様からして正しくカウントしないが。

長くなったが、とりあえず、まだ見てたらfor文の条件を
for(cnt=0; cnt<10 && str[cnt]!='\n' && str[cnt]!='\0'; cnt++) ;
で。
135デフォルトの名無しさん:2008/11/19(水) 07:40:01
>>83さんありがとうございました。
136デフォルトの名無しさん:2008/11/19(水) 08:27:15
1] 授業単元: C
[2] 問題文(含コード&リンク): 2個の多項式を入力してその和を求め次数の大きい順に出力する

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual stadio2008
 [3.3] 言語: C
[4] 期限:2008年11月26日13:00まで
137デフォルトの名無しさん:2008/11/19(水) 08:27:49
1] 授業単元: C
[2] 問題文(含コード&リンク): 2個の多項式を入力してその和を求め次数の大きい順に出力する

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual stadio2008
 [3.3] 言語: C
[4] 期限:2008年11月26日13:00まで
138デフォルトの名無しさん:2008/11/19(水) 08:30:24
1] 授業単元: C
[2] 問題文(含コード&リンク):二個の多項式を入力してその和を求め、次数の大きい順に出力する
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: visual stadio2008
 [3.3] 言語: C
[4] 期限: 2008年 11月27日13:00まで
139デフォルトの名無しさん:2008/11/19(水) 08:36:15
>>137
>>138
ミスです^^;
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8070.txt
↑は前スレで回答してもらったものですがこれを問題文のように変える問です
お願いします
14072:2008/11/19(水) 10:48:45
>>87
忙しい中どうもありがとうございます。
scanfでキーボードから文字列を読み込んで、putsを使わず
途中経過を表示させずに結果だけ表示させられませんかね?
たとえば「Person」と打ち込んで「PersonnosreP」とだけ表示させるプログラムが作りたいのですが。
#include<string.h>は使えます。補助する関数?は使っても使わなくてもいいです。
ご迷惑でなければもう一度お願いできないでしょうか。
141デフォルトの名無しさん:2008/11/19(水) 10:53:28
最近のやつは注文が多いな
142デフォルトの名無しさん:2008/11/19(水) 10:58:54
注文の多い宿題スレ と言うタイトルで著書を出版したいのですが、
よろしかったでしょうか?
143デフォルトの名無しさん:2008/11/19(水) 11:05:11
>>142
後世に残る名作に仕上げてくれ
144デフォルトの名無しさん:2008/11/19(水) 11:09:19
助言を頂きたいです。問題内容と自分なりのプログラムは以下の通りです。

[問題]
"Izumi","Kanto","Kudo","Sato","Sugawara","Matsuda","Wada"という7つの文字列の長さをカウントし、文字列とともに表示せよ。

[プログラム]
#include<stdio.h>

int main(){
char *name[] = {"Izumi", "Kanto", "Kudo", "Sato", "Sugawara", "Matsuda", "Wada", NULL};
int namelen[7] = {0, 0, 0, 0, 0, 0, 0};
int i = 0, j = 0;

while(*(name + i)){
while(*(*(name + i) + j) != '\0'){
*(namelen + i) += 1;
j++;
}
i++;
}

for(i = 0; i < 7; i++){
printf("文字列「%s」は%d文字です。\n", *(name + i), *(namelen + i));
}

return 0;
}


「楽勝♪」と思ったのですが、文字列の長さがどうも誤って表示されます。
この方向でよいと思うのですが…。
145デフォルトの名無しさん:2008/11/19(水) 11:17:34
jがリセットされてない
146デフォルトの名無しさん:2008/11/19(水) 11:47:33
あ…本当でした、お恥ずかしいorz
147help me:2008/11/19(水) 18:06:03
[1] 授業単元:C言語
[2]問題1 キーボードから数値を何回も読み込み、常に過去五回分の数値の平均値と
合計値を表示し続け、負の実数を入力すると停止するプログラムを作成せよ。データの型は実数とする。
(なんかはじめの六回目の入力までは変な値が出力されてもいいらしいです。)
 問題2 main()関数で使用しているローカル変数の値を、ユーザー定義関数内で書き換えるプログラムを、
ポインタを使用して作成せよ。printf等で出力すること。
[3] 環境
 [3.1] OS Linux
 [3.3] 言語:C
[4] 期限: ([11月22日まで]

二つも質問してすみません。よろしくお願いします。
148デフォルトの名無しさん:2008/11/19(水) 18:06:24
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
(1)main関数の中で、要素数5個の配列変数を宣言する。この5個の要素に対して、
次のような計算をして、その結果をもとの要素に戻すような関数calc()をポインタを用いて書きなさい。
1個めの要素に対しては、値を3増やす
2個めの要素に対しては、値を4倍する
3個めの要素に対しては、値を5減らす
4個めの要素に対しては、値を7で割る
5個めの要素に対しては、今までの4つの要素の元の値の総和を入れる

(2)コマンドラインから、N個の数(数値)を入力して、個数とそれらの平均値を
出力するプログラムを作成しなさい。

[3] 環境
 [3.1] OS:Linux
 [3.2] XEmacs
 [3.3] 言語:C++のみ
[4] 期限:早急にお願いします
[5] その他の制限:プログラミングを受業で習い始めて半年のレベルです。
よろしくお願いします。
149デフォルトの名無しさん:2008/11/19(水) 18:09:14
標準ライブラリはつかっておk?stlとか
150デフォルトの名無しさん:2008/11/19(水) 18:12:24
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
任意のフォルダを定期的に(例えば、20秒おきなど)チェックし、
フォルダ内にファイルが増えていたら、そのファイル名とファイル
が作成された日時をログファイル(Log.txt)に書き込むプログラム
を作成せよ

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語: C
[4] 期限: 2008年11月23日まで

よろしくお願い致します。
151デフォルトの名無しさん:2008/11/19(水) 18:12:48
ありがとうございました。何とか提出することができました。

152デフォルトの名無しさん:2008/11/19(水) 18:14:11
>>151
使わないでお願いします
153デフォルトの名無しさん:2008/11/19(水) 18:23:28
>>148
(1)
#include<iostream>

const int DATA_NUM=5;

void calc(double data[DATA_NUM]){
data[4]=data[0]+data[1]+data[2]+data[3];
data[0]+=3;
data[1]*=4;
data[2]-=5;
data[3]/=7;
}

int main(void){
double data[DATA_NUM]={1.0, 2.0, 3.0, 4.0, 5.0};

for(int i=0;i<DATA_NUM;i++) std::cout << data[i] << std::endl;
calc(data);
for(int i=0;i<DATA_NUM;i++) std::cout << data[i] << std::endl;

return 0;
}
154デフォルトの名無しさん:2008/11/19(水) 18:31:51
>>148
(2)
#include<iostream>

int main(void){
int N=0;
double value, average=0.0;

std::cout << "Input N : ";
std::cin >> N;

for(int i=0;i<N;i++){
std::cout << "Input data[" << i << "] : ";
if(!(std::cin >> value)){
std::cerr << "\nERROR : Unknown input.\n";
return 1;
}
average=(average*i+value)/(i+1);
}
std::cout << "N=" << N << " average=" << average << std::endl;

return 0;
}
155デフォルトの名無しさん:2008/11/19(水) 18:32:00
>>147
問題1

#include <stdio.h>
int main(void)
{
double v[5] = {0.0};
int i = 0, j;
double sum;

while (1) {
printf("input: "); scanf("%lf", &v[i%5]);
if (v[i%5] < 0) {
break;
}
sum = 0.0;
for (j = 0; j < 5; j++) {
sum += v[j];
}
printf("sum: %f\n", sum);
printf("average: %f\n", sum / 5);
i++;
}
return 0;
}
156デフォルトの名無しさん:2008/11/19(水) 18:34:34
>>147
問題2 はこんなのでいいのか?

#include <stdio.h>

void inc(int *a)
{
(*a)++;
}

int main(void)
{
int i = 1;

printf("i = %d\n", i);
inc(&i);
printf("i = %d\n", i);

return 0;
}
157148:2008/11/19(水) 18:40:33
>>153
>>154
大量のエラーが出るんですが・・・

あと、できれば>>155みたいな書き方でお願いします
158デフォルトの名無しさん:2008/11/19(水) 18:43:05
>>157
最初の方のエラーの内容を張ってみてよ
C++-- っておちだろうけど
159デフォルトの名無しさん:2008/11/19(水) 18:44:40
>>158
いえ、もう>>155, >156で解決したので大丈夫です
>>153さんもどうもありがとうございまsちあ
160help me:2008/11/19(水) 19:50:08
>>155
>>156
ありがとうございました!
161デフォルトの名無しさん:2008/11/19(水) 19:52:48
>>58のA穴埋めに近いですかお願いします
162デフォルトの名無しさん:2008/11/19(水) 20:04:58
>>148の者ですがC++というのは間違いでただのCでした。
もう一度お願いします
163デフォルトの名無しさん:2008/11/19(水) 21:09:27
>>162
あたまわりいな。
地べたに頭こすりつけて>>158にあやまれ、と思わんでもないが。
164デフォルトの名無しさん:2008/11/19(水) 21:36:20
本当にその通りだと思います。
すみませんでした。
でも本当に困ってるのでお願いします。
165デフォルトの名無しさん:2008/11/19(水) 21:50:11
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
 ユークリッドの互除法を用いて最大公約数を求めるプログラムを作成する。
ただし,最大公約数を見つける部位は関数を用いる(例 kouyaku(int x, int y)など)
また,2数はどちらが大きな場合でも対応できるようにする。
例えば 入力を 24,30 とする場合も  30,24とする場合も どちらも 最大公約数 6 と表示できること。
main関数では 2つの数を入力すること および kouyaku()関数に2つの数を渡して
最大公約数を計算させ,最終結果を表示させる内容を行う。

[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2008年11月26日12:00まで
[5] その他の制限:関数は習い始めたばかりです。よろしくお願いします。
166デフォルトの名無しさん:2008/11/19(水) 21:51:05
167デフォルトの名無しさん:2008/11/19(水) 22:11:20
>>165
int kouyaku(int x, int y)
{
int t;

do {
if(x<y){
t=x; x=y;y=t;
}
x -= y;
}while(x);

return y;
}
168デフォルトの名無しさん:2008/11/19(水) 22:15:27
#include <stdio.h>

int kouyaku(int x, int y)
{
int t;
do {
if(x<y){
t=x; x=y;y=t;
}
x -= y;
}while(x);
return y;
}
int main()
{
int x,y,yakusuu;
puts("x入力");scanf("%d",&x);
puts("y入力");scanf("%d",&y);
yakusuu = kouyaku(x, y);
printf("x = %d, y = %dの最大公約数は%d\n",x,y,yakusuu);
return 0;
}
169 ◆yuFSfjnDIM :2008/11/19(水) 23:08:06
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
void main()
{
int i,j,data[5][4];
for (j=0;j<=3;j++){
data[4][j]=0;
}
for (i=0;i<=3;i++){
data[i][3]=0;
for (j=0;j<=2;j++){
printf("data[%d][%d]=",i,j);
scanf("%d",&data[i][j]);
data[i][3]+=data[i][j];
data[4][i]+=data[i][j];
data[4][3]+=data[i][j];
}
}
for(i=0;i<=4;i++){
for(j=0;j<=3;j++){
printf("%4d",data[i][j]);
}
printf("\n");
}
}

170 ◆tZFRns78x. :2008/11/19(水) 23:08:53
これを↓のように表示するように改良する
右下の合計と平均の文字は要りません

 国語 数学 英語  |合計    |平均     

  75  35   40 |       | 
    
  69  75   82  |       |
  
  57  48   36  |       |

  30   60   50  |       |
-------------------------------------
合計 |

平均 |

[3] 環境:ポケコンに打つんでよく分かりません
[4] 期限:12月1日
[5] その他の制限:特になし

お願いします

171デフォルトの名無しさん:2008/11/19(水) 23:36:03
すいません>>21のものですがよろしくお願いします。
172デフォルトの名無しさん:2008/11/20(木) 07:31:10
こんなプログラム作ってもらえませんか?^^;

今日中なんですが


『三つの数値を入力(繰り返し入力)し、小さい順に表示する』
173デフォルトの名無しさん:2008/11/20(木) 08:04:32
174デフォルトの名無しさん:2008/11/20(木) 08:38:21
[1]C言語
[2]三つの数値を入力(繰り返し入力)し、小さい順に表示する
[3]
[3.1]XP
[3.2]C言語
[4]今日まで(^∈^;)



テンプレ見て直してみました
175 ◆Mn9bS1g7Ng :2008/11/20(木) 09:00:10
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
例をもとに指定した生徒の3科目の平均点を表示するプログラムを作成せよ

実行例
生徒IDを入力してください: 2 ↓
平均点は65.3点

例は>>176です。

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月24日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子
            配列の初期化、2次元配列は習いました。
お願いします。
176 ◆Mn9bS1g7Ng :2008/11/20(木) 09:01:20
例:成績データを表示する

#include <stdio.h>
int main(void) {
int data[ ][5] = { { 82, 98,41, 86,70},
{ 42, 99,92, 69,62},
{ 84, 54,63,100,70}};
int subject, student, sum;
double ave;
for (subject=0; subject<=2; subject++) {
switch (subject) {
case 0: printf("国語\n"); break;
case 1: printf("数学\n"); break;
   case 2: printf("英語\n");
}
sum = 0;
for (student=0; student<=4; student++) {
printf("生徒%dの点数は%d点\n",student,data[subject][student]);
sum += data[subject][student];
}
ave = sum / 5.0;
printf("科目平均は%.1f点\n", ave);
}
return 0;
}
177デフォルトの名無しさん:2008/11/20(木) 09:46:06
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):
コマンドライン引数で与えられた数字の列を足し算するプログラムsumを作れ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年11月21日まで
[5] その他の制限:文字列をint型に直すのにはatoi()関数を使う。

よろしくおねがいします。
178デフォルトの名無しさん:2008/11/20(木) 10:16:31
>>177
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
int i, sum;
sum = 0;
for(i = 1; i < argc; i++) sum += atoi(argv[i]);
printf("sum = %d\n", sum);
return 0;
}
179デフォルトの名無しさん:2008/11/20(木) 10:54:28
>>148の者ですが、今日中に提出なのでお願いします。
C++と書いたのですが、ただのCでお願いします。
本当に困ってます。
180デフォルトの名無しさん:2008/11/20(木) 11:03:22
>>148
/*(1)*/
#include <stdio.h>
void calc(int *p){
int a[5];
a[0] = p[0] + 3; a[1] = p[1] * 4;
a[2] = p[2] - 5; a[3] = p[3] / 7;
a[4] = p[0] + p[1] + p[2] + p[3];
}
int main(void){
int i;
int a[5] = {11,12,13,14,15};
calc(a);
for(i = 0; i < 5; i++) printf("a[%d] = %d\n", i, a[i]);
}
/*(2)*/
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]){
int i, sum;
sum = 0;
for(i = 1; i < argc; i++) sum += atoi(argv[i]);
printf("個数: %d, 平均値: %lg\n", argc - 1,
(double)sum / (argc - 1));
}
181デフォルトの名無しさん:2008/11/20(木) 11:04:27
間違えた。訂正:
void calc(int *p){
int a[5];
a[0] = p[0] + 3; a[1] = p[1] * 4;
a[2] = p[2] - 5; a[3] = p[3] / 7;
a[4] = p[0] + p[1] + p[2] + p[3];
p[0] = a[0]; p[1] = a[1];
p[2] = a[2]; p[3] = a[3];
p[4] = a[4];
}
182デフォルトの名無しさん:2008/11/20(木) 11:14:07
>>174
#include <stdlib.h>
#include <stdio.h>
int compare(const void *a, const void *b){
if (*(double*)a < *(double*)b) return -1;
if (*(double*)a > *(double*)b) return 1;
return 0;
}
int main(void){
int i;
double a[3];
i = 0;
printf("%d個目の数値: ", i + 1);
scanf("%lf", &a[i]);
i++;
printf("%d個目の数値: ", i + 1);
scanf("%lf", &a[i]);
i++;
printf("%d個目の数値: ", i + 1);
scanf("%lf", &a[i]);
i++;
qsort(a, 3, sizeof(double), compare);
for(i = 0; i < 3; i++) printf("%lg\n", a[i]);
return 0;
}
183デフォルトの名無しさん:2008/11/20(木) 11:55:07
>>180の人本当にありがとうございます。
184デフォルトの名無しさん:2008/11/20(木) 14:42:39
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8072.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:Cygwin
 [3.3] 言語: C
[4] 22日まで
[5] その他の制限: まだまだ序の口レベルらしいです。

よろしくお願いします。
185デフォルトの名無しさん:2008/11/20(木) 15:19:55

[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8073.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年11月20日23:59
[5] その他の制限:

よろしくお願いします


186177:2008/11/20(木) 16:12:44
>>178
早速ありがとうございます。助かりました。
187デフォルトの名無しさん:2008/11/20(木) 18:22:54
>>184
第1問
#include <stdio.h>

int main(void)
int *p;
printf("%p\n", p);
p = p+1;
printf("%p\n", p);
return 0;
}

第2問
#include <stdio.h>

void func(int sec, int *hh, int *mm, int *ss)
{
*hh = sec / 3600;
*mm = (sec % 3600)/60;
*ss = sec % 60;
}

int main(void)
{
int hh, mm, ss;

int sec = 3800;
func(sec, &h, &m, &s);
printf("%d秒 = %2d時間%2d分%2d秒\n", sec, h, m, s);
return 0;
}
188デフォルトの名無しさん:2008/11/20(木) 18:27:55
[1] C言語
[2] 構造体の配列 構造体のデータを得点で昇順に並び変えてください
[3] 環境
 [3.1] Windows vista
 [3.2] マイクロソフトヴィジュアルスタジオ
 [3.3] 言語: C/
[4] 期限: ([2008年11月21日17;00まで]
[5] プリプロセッサ 、ファイル処理、操作 供用体 データ変換型 記憶クラス
  は習っていません。
よろしくお願いいたします。
189188:2008/11/20(木) 18:28:51
最初の方の宣言文です
# include<stdio.h>
struct tmp{
char name[20];
int bangou;
int ten;
};
void main(void)
{
{
struct tmp data[10]={{"山田",50113,87};
{"浜名",30211,60};
{"飯田",56231,58};
{"岡田",50215,30};
{"今田",60987,89};
{"原田",57892,75};
{"有田",53901,55};
{"清原",53098,72};
{"神山",56221,71};
{"上原",12345,100};
}}
190デフォルトの名無しさん:2008/11/20(木) 18:29:40
>>187 ちょっとミス。
func(sec, &h, &m, &s);
printf("%d秒 = %2d時間%2d分%2d秒\n", sec, h, m, s);
は、正しくは
func(sec, &hh, &mm, &ss);
printf("%d秒 = %2d時間%2d分%2d秒\n", sec, hh, mm, ss);
ね。

>>184
第3問
#include <stdio.h>
#define N 10

int main(void)
{
int a[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *pa = a;
int i;
int sum = 0;

for (i = 0; i < N; i++) {
sum += *pa;
pa++;
}
printf("sum = %d\n", sum);

return 0;
}
191デフォルトの名無しさん:2008/11/20(木) 18:31:23
>>184
第4問
#include <stdio.h>
#include <math.h>
#define YPSILON 1e-5

int eq(double a, double b, double c, double *x, double *y)
{
double d = b*b - 4*a*c;
if (fabs(d) < YPSILON) {
*x = *y = (-b+sqrt(d))/(2*a);
return 1;
}
if (d < 0) {
return 0;
}
else {
*x = (-b+sqrt(d))/(2*a);
*y = (-b-sqrt(d))/(2*a);
return 2;
}
}

int main(void)
{
double x, y;
int r;
r = eq(1.0, -4.0, 3.0, &x, &y);
printf("%g, %g\n", x, y);

return 0;
}
192デフォルトの名無しさん:2008/11/20(木) 18:43:12
>>188
#include <stdio.h>
#include <stdlib.h>
struct tmp{
char name[20];
int bangou;
int ten;
};
int comp(const void *a, const void *b)
{
struct tmp *x = (struct tmp *)a;
struct tmp *y = (struct tmp *)b;
if (x->ten > y->ten) return 1;
else if (x->ten < y->ten) return -1;
else return 0;
}
int main(void)
{
int i;
struct tmp data[10]={{"山田",50113,87}, {"浜名",30211,60}, {"飯田",56231,58}, {"岡田",50215,30},
{"今田",60987,89}, {"原田",57892,75}, {"有田",53901,55}, {"清原",53098,72},
{"神山",56221,71}, {"上原",12345,100}};
qsort(data, 10, sizeof(data[0]), comp);
for (i = 0; i < 10; ++i) printf("%s %8d %3d\n", data[i].name, data[i].bangou, data[i].ten);
return 0;
}
193188:2008/11/20(木) 19:32:01
ありがとうございます!
この恩は忘れません!
194デフォルトの名無しさん:2008/11/20(木) 20:24:09
>>166
そんなに長くなるのですか・・・

できれば>>139を少し改良して短くできるものに変えれませんか?
各々の多項式で前と同じようリスト構造を作って2つのリスト構造を先頭から見ながら、別の構造リストを作っていくみたいな・・・
なんて言えばいいんだろう^^;あとから条件みたいなの出してすいません
195デフォルトの名無しさん:2008/11/20(木) 20:44:34
[1] 授業単元:関数
[2]
(1)
2つの実数値xとyの差の絶対値を計算して結果を返す関数 sabun(x, y) を作成し、
main 関数から呼び出すプログラムを作りなさい。なお、関数sabunでは、実数値x
とyを引数とし、その差の絶対値を戻り値として返す。また、実数値xとyは、main
関数中でキーボードから読み込む
(2)
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8074.txt
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C
[4] 期限:明日

お願いします
196デフォルトの名無しさん:2008/11/20(木) 20:52:24
心配しなくても、バレる。
毎回名前の付け方や解き方が変わったり、
基本的なことが全然わかってなければ答えは一つ。
197デフォルトの名無しさん:2008/11/20(木) 21:39:45
>>195

#include <stdio.h>

int sabun ( int x, int y )
{
return (x>y)?(x-y):(y-x) ;
}

void main(void)
{
int x, y ;

printf ( "xの値を入力してください->" ) ;
scanf ( "%d", &x ) ;

printf ( "yの値を入力してください->" ) ;
scanf ( "%d", &y ) ;

printf ( "%dと%dの差の絶対値は%d\n", x, y, sabun(x,y) ) ;
}
198デフォルトの名無しさん:2008/11/20(木) 21:43:14
>>195
(1)
#include <stdio.h>
double subun(double x, double y)
{
return x > y ? x-y : y-x;
}
int main(void)
{
double x, y;
printf("x = "); scanf("%lf", &x);
printf("y = "); scanf("%lf", &y);
printf("subun(%f, %f) = %f\n", x, y, subun(x, y));
return 0;
}

(2)
#include <stdio.h>
int gokei(int n)
{
return n > 1 ? n+gokei(n-1) : 1;
}
int main(void)
{
int n = 100;
printf("gokei(%d) = %d\n", n, gokei(n));
return 0;
}
199195:2008/11/20(木) 22:08:45
>>197
>>198
ありがとうございます
200デフォルトの名無しさん:2008/11/20(木) 23:50:16
[1] 授業単元: 基本情報処理
[2] 問題文:
forを使って100以下の素数を求めて表示するプログラムを作れ
[3] 環境
 [3.1] WinXP
 [3.2] 不明
 [3.3] C言語

おねがいします
201デフォルトの名無しさん:2008/11/21(金) 00:00:32
>>200
#include <stdio.h>
int main(void)
{
int i, j;
for (i = 2; i <= 100; i++) {
for (j = 2; j < i; j++) {
if (i%j == 0) break;
}
if (i == j) {
printf("%dは素数\n", i);
}
}
return 0;
}
202デフォルトの名無しさん:2008/11/21(金) 00:08:30
>>201
ありがとうございます
203デフォルトの名無しさん:2008/11/21(金) 01:00:12
[1] プログラミング実習:
[2] 年月を与えて,その月のカレンダーを表示するプログラム
mycalを作成せよ。:
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: cc -o
 [3.3] 言語: C言語
[4] 期限:明後日
[5] その他の制限:isleapyearとdayofweekを使用
         この関数は作ってあります

お願いします
204デフォルトの名無しさん:2008/11/21(金) 01:04:11
>>203
できるわけねーだろwwwwwwwwwwwwwww
205デフォルトの名無しさん:2008/11/21(金) 01:24:28
[1] 授業単元:計算機プログラミングU
[2] 問題文(含コード&リンク):
  関数mainにおいて,下記のような文字列を定義する.
   char *name[] = {"Wada", "Kanto", "Matsuda", "Kudo", "Sato", "Iizumi", "Sugawara", NULL};
  上記の文字列をアルファベット順に並べ替える関数を作成し,その結果を表示するプログラムを作成せよ.

  ヒント:文字列の比較のために関数strcmpを使用する.
   #include <string.h>
   int strcmp(const char *str1,const char *str2);
  【戻り値】str1 > str2 ならば正値(1)
       str1 = str2 ならば0
       str1 < str2 ならば負値(-1)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc(できればVisual C++でも動くように)
 [3.3] 言語:C
[4] 期限:2008年11月27日10:30まで
[5] その他の制限:まだ初歩の段階です。やっとポインタの基礎を習い終わったところです。
206デフォルトの名無しさん:2008/11/21(金) 01:36:17
>>205
#include<stdio.h>
#include<string.h>
void sort_name(char **name) {
char **i, **j, *tmp;
for (i = name; *i; i ++) {
for (j = i + 1; *j; j ++) {
if (strcmp(*i, *j) > 0) {
tmp = *i; *i = *j; *j = tmp;
}
}
}
}

int main() {
char *name[] = {"Wada", "Kanto", "Matsuda", "Kudo", "Sato", "Iizumi", "Sugawara", NULL};
char **p;
sort_name(name);
for (p = name; *p; p ++) {
printf("%s\n", *p);
}
return 0;
}
207デフォルトの名無しさん:2008/11/21(金) 01:54:05
お願いします。
[1] 授業単元: プログラミングU
[2] 問題文(含コード&リンク):
以下のデータを配列を初期化した後に入れ、各行各列の最大値をそれぞれ求めよ。
データ
1.1 2.4 0.9 2.3 1.9 1.0
2.2 0.7 0.3 1.8 1.7 0.2
0.8 0.4 2.5 1.5 0.9 2.4
0.9 1.6 1.7 1.6 0.4 1.4

[3] 環境
 [3.1] OS: windows XP
 [3.2] コンパイラ名とバージョン:borland bcc38?
 [3.3] 言語: C言語
[4] 期限: 2008年11月21日12:00
[5] その他の制限:特にありません。ただ、ド素人同然の知識しかありません。
208デフォルトの名無しさん:2008/11/21(金) 02:07:17
[1] 授業単元: C
[2] 問題文: 二つの整数m,nを入力し
a*m+b*n=gcd(m,n)
のa,bを求めるプログラム
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:11月21日08:00まで]
[5] その他の制限:特になし

よろしくお願いします。
209デフォルトの名無しさん:2008/11/21(金) 02:15:37
gcd(m,n)が最大公約数を求める関数だとして
a, b が一意に定まらないんだけど一体どうしろと?
関係式吐けばいいのか?
210デフォルトの名無しさん:2008/11/21(金) 02:35:26
>>209
12と18を入力した際に
12a+18b=gcd(12,18)
a=-1 b=1 といった感じになるのですが…
211デフォルトの名無しさん:2008/11/21(金) 02:42:42
>>210
a=-4, b=3は解ではないと?
212デフォルトの名無しさん:2008/11/21(金) 02:44:42
>>210
一個適当に吐けばいいのかな?
無限個あるから列挙は無理なんでどうしたらいいかな
213デフォルトの名無しさん:2008/11/21(金) 02:48:29
>>211
それも解です。
でも出来るだけ最小値で出してもらえたら嬉しいです。
後付けみたいな頼みごとですみません;
214デフォルトの名無しさん:2008/11/21(金) 03:06:33
>>208
なんか他にも条件があるような気がする
215デフォルトの名無しさん:2008/11/21(金) 03:24:13
>>213
a,bを最小化する評価関数は何? |a|+|b|とかa^2+b^2とか
そして問題ではa,bについて整数であるとは書いていないが実数なのか整数に制約されているのか
216デフォルトの名無しさん:2008/11/21(金) 03:25:08
1より-4のほうが小さい
217デフォルトの名無しさん:2008/11/21(金) 03:51:43
>>215
評価関数…
そういうのががいてないのですが。

r= n mod m とする
r= n - m「n/m」

¬r * r + ¬m * m = gcd(r,n) とする

¬r(n - m「n/m」) + ¬m * m = gcd(m,n)

(¬m -「n/m」¬r) m + ¬r = gcd(m,n)
このとき

(¬m -「n/m」¬r) = a
¬r = b

  「」内の少数は切り捨て


謎のメモが残ってました。役に立つでしょうか?
整数に制約されてます。(0≦m<n)

>>216
あ。ほんとですね;
218デフォルトの名無しさん:2008/11/21(金) 04:08:52
#include <stdio.h>
void swap (int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
int gcd(int x, int y)
{
if (x < y) swap(&x, &y);
x %= y;
if (x == 0) return y;
else return gcd(y, x);
}

int main()
{
int x, y, g, a;
scanf("%d %d", &x, &y);
g = gcd(x, y);
printf("a = ");
scanf("%d", &a);
printf(" b = %f\n", (g - (double)x * a) / y);
return 0;
}

とりあえず適当に作ったよ
スペース区切りで gcd(m, n)の引き数を入力
そのあとa の値を入力する形で
219デフォルトの名無しさん:2008/11/21(金) 04:20:36
あ、修正です;
m,nは(0≦m<n)で整数のみですが、
a,bは実数でした;
220デフォルトの名無しさん:2008/11/21(金) 13:57:51
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8075.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C/C++/どちらでも可
[4] 期限: 明後日まで
[5] その他の制限: 特に無し

  このプログラムをコンパイルしたら、a,b,c,dが定義されていない識別子です。って怒られたんですが
どこにどうやってa,b,c,dを宣言すればいいか教えてください。よろしくお願いします。


221デフォルトの名無しさん:2008/11/21(金) 14:03:08
t=0.0; a=2.0,b=0.0,c=0.0,d=0.5;

double t=0.0; double a=2.0,b=0.0,c=0.0,d=0.5;
したら動くかもね
確認して無いけど
222デフォルトの名無しさん:2008/11/21(金) 14:03:52
ごめん
t=0.0; a=2.0,b=0.0,c=0.0,d=0.5;

t=0.0; double a=2.0,b=0.0,c=0.0,d=0.5;
だった
223220:2008/11/21(金) 14:06:56
>>222
これからやってみます!
224220:2008/11/21(金) 14:11:32
結果は変わらずでした(泣)
225デフォルトの名無しさん:2008/11/21(金) 14:19:15
言語: C/C++/どちらでも可
とかいてあるけどそのソースの拡張子は
.cと.cppのどっちなんだ?

.cなら
output=fopen("planet.data","w");
より上の行に
double a, b, c, d ;
226220:2008/11/21(金) 14:28:49
このソースはたぶん.cです。
やってみます!
227220:2008/11/21(金) 14:33:53
コンパイルしたら、warning C4700: 初期化されていないローカル変数 't0'が使用されます
って13個ぐらい出てきました。あと、
kenkyuu.obj : error LNK2019: 未解決の外部シンボル _runge が関数 _main で参照され
ました。
kenkyuu.obj : error LNK2019: 未解決の外部シンボル _g2 が関数 _main で参照されま
した。
kenkyuu.obj : error LNK2019: 未解決の外部シンボル _f2 が関数 _main で参照されま
した。
kenkyuu.obj : error LNK2019: 未解決の外部シンボル _g1 が関数 _main で参照されま
した。
kenkyuu.obj : error LNK2019: 未解決の外部シンボル _f1 が関数 _main で参照されま
した。
kenkyuu.exe : fatal error LNK1120: 外部参照 5 が未解決です。ってのも出てきました。
228デフォルトの名無しさん:2008/11/21(金) 14:40:07
>>227
f1関数とか呼び出してるんだけど無いから無理と言われてる

実際無いので当然無理
229デフォルトの名無しさん:2008/11/21(金) 14:41:47
>>227
とりあえず問題文を「全部」晒すんだ
話はそれからだ
230220:2008/11/21(金) 14:42:53
それが原因ですか。了解です。ありがとうございます。

231 ◆Mn9bS1g7Ng :2008/11/21(金) 14:48:30
どなたか>>175をやっていただけないでしょうか?
232220:2008/11/21(金) 14:49:09
>>229
問題文ってか出力結果が、
惑星の運動

初期時間:t= 0.000の時,x= 2.000 y=0.000000,v_x= 0.000 v_y= 0.500

計算結果:t= 50.000の時、x= 1.659,y= 0.771,v_x= -0.421v_y= 0.407
ってなるようなプログラムを作れってことです(先ほどうpしたプログラムを少し変えて)。
233220:2008/11/21(金) 14:55:53
>>229さん
できそうですか?
234デフォルトの名無しさん:2008/11/21(金) 15:24:18
>>219
やっぱり条件あった。
小出しにすると解いてもらえないよ。
235デフォルトの名無しさん:2008/11/21(金) 15:37:14
>>231

int main(void)
{
int data[][5] = {
{82,98,41,86,70},
{42,99,92,69,62},
{84,54,63,100,70},
};
int subject,student,sum;
double ave;

int id;

printf("生徒IDを入力してください:");
scanf("%d",&id);
if(id < 0 || id > 4){
printf("IDが不正");
return -1;
}

for(subject=0,sum=0;subject<=2;subject++){
sum += data[subject][id];
}

ave = sum / 3.0;

printf("平均点は%.1f点\n",ave);

return 0;
}
236 ◆Mn9bS1g7Ng :2008/11/21(金) 15:41:49
>>235
大変助かりました。
本当に有難う御座いました。
237220:2008/11/21(金) 15:53:36
どこにどういう関数宣言をすればいいか初心者なので全く分かりません。
誰か教えてください。エラーが出てた初期化の部分はできました。
238デフォルトの名無しさん:2008/11/21(金) 15:57:10
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
・入力された文字の種類を判別して表示するプログラムを作成せよ
  -数字
-アルファベット大文字
-アルファベット小文字
-それ以外

・それぞれの文字コードが連続していることを利用

実行例
文字を入力: 5 ↓
数字です

文字を入力: J ↓
アルファベット大文字です

文字を入力: + ↓
その他の文字です

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月24日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子
            配列の初期化、2次元配列、文字コード、文字データ(char型)
            getchar、putcharは習いました。
お願いします。
239デフォルトの名無しさん:2008/11/21(金) 15:57:42
>>237
関数の中身を書かなければ動きませんが、
情報が少なすぎて書ける人間はいないでしょう
諦めてください
240220:2008/11/21(金) 16:00:48
わかりました。残念です。でももし出来た人がいたならば教えてください。
241デフォルトの名無しさん:2008/11/21(金) 16:13:05
>>238

int main(void)
{
int c;

printf("文字入力:");
c = getchar();

if(c > 0x2f && c < 0x3a){
printf("数値\n");
}
else if(c > 0x40 && c < 0x5b){
printf("アルファベット大文字\n");
}
else if(c > 0x60 && c < 0x7b){
printf("アルファベット小文字\n");
}
else{
printf("その他\n");
}

return 0;
}
242デフォルトの名無しさん:2008/11/21(金) 16:15:10
>>241
大変助かりました。
本当に有難う御座いました。
243デフォルトの名無しさん:2008/11/21(金) 16:24:04
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
・入力された文字がアルファベット大文字ならば小文字に、小文字ならば大文字に変換するプログラムを作成せよ

   -大文字:0x41(A)〜0x5A(Z)
   -小文字:0x61(a)〜0x7A(z)
    ・それぞれの文字コードの差が一定な事を利用

実行例
文字を入力: J ↓
j

文字を入力: t ↓
T

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月24日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子
            配列の初期化、2次元配列、文字コード、文字データ(char型)
            getchar、putcharは習いました。
お願いします。
244デフォルトの名無しさん:2008/11/21(金) 16:31:14
>>243

int main(void)
{
int c;

printf("文字入力:");
c = getchar();

if(c > 0x40 && c < 0x5b){
c += 0x20;
}
else if(c > 0x60 && c < 0x7b){
c -= 0x20;
}
else{
printf("アルファベットではない\n");
}

printf("%c\n",c);

return 0;
}
245デフォルトの名無しさん:2008/11/21(金) 16:32:34
>>244
大変助かりました。
本当に有難う御座いました。
246デフォルトの名無しさん:2008/11/21(金) 16:53:20
>>220とか>>227とかエラー内容読めばなにが悪いか普通分かると思うんだが…
247デフォルトの名無しさん:2008/11/21(金) 17:04:40
>>240
同じ授業を受けてない限り、原理的に不可能というのはわかる?
248デフォルトの名無しさん:2008/11/21(金) 17:36:23

[1] 授業単元:プログラミング演習T
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8076.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語: C
[4] 期限:2008年11月24日まで
[5] その他の制限:学校の授業で習い始めて3ヶ月です。標準ライブラリは無しで。

一応自力で頑張ったところ、この様になったのですが↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8077.txt
このままだとx万を超えないようにしたいのに結果は超えたものとなってしまうのです・・

是非よろしくお願いします
249デフォルトの名無しさん:2008/11/21(金) 17:43:23
>>248
#include<stdio.h>
int main(void)
{
int a,b=10000, c = 10000,d=0,e;
printf("返すべき元利合計(万円);");
scanf("%d",&a);
a *=10000;
for(;;){
b *= 1.1;
if(a < b) break;
c = b;
d++;
}
printf("最大年数;%d\n",d);
printf("返却金額;%d\n",c);
return 0;
}

しかい本当にint でいいのか?これ
250デフォルトの名無しさん:2008/11/21(金) 18:14:41
>>206ちなみに質問ですが,**ってなんですか??
251デフォルトの名無しさん:2008/11/21(金) 18:16:17
ポインタのポインタ
252デフォルトの名無しさん:2008/11/21(金) 18:49:00
単元:というか質問
環境:Windows
コンパイラ:gccかVC++
言語:c++
期限:まあ適当に

"IUnko.h"
class IUnko{
public:
virtual ~IUnko() =0;
virtual operator int() =0;
virtual IUnko& operator++() =0;
virtual IUnko operator++(int) =0;
};
IUnko::~IUnko() {};

"Unko.h"
#inlude "IUnko.h"
class CUnko : public IUnko{
private:
int mVal;
public:
operator int() { return mVal; };
CUnko& operator++(){ mVal++; return *this; };
CUnko operator++(int){ CUnko tmp = *this; mVal++; return tmp; };
};

これがダメな理由を教えてください。
演算子のオーバーロードは抽象クラスには書けないですか?
253デフォルトの名無しさん:2008/11/21(金) 19:38:54
>>252
1.戻り型がIUnkoとなっている operator++(int) は作成不能
2.継承クラスCUnkoで戻り型がCUnkoに化けている
254 ◆tZFRns78x. :2008/11/21(金) 19:49:16
>>169-170をお願いします
名前欄ミスしました
255デフォルトの名無しさん:2008/11/21(金) 20:26:10
>>253
うーん、こう変更すればOKですか?
virtual IUnko& operator++(int) =0;

CUnko& operator++(int){ static CUnko tmp = *this; mVal++; return tmp; };
256デフォルトの名無しさん:2008/11/21(金) 20:43:28
>>249
オレは>>248じゃないが全部doubleでやったほうがいいと思うぞ
int b;

b *= 1.1;
とかは無謀すぎる
257デフォルトの名無しさん:2008/11/21(金) 23:58:03
b *= 1 と同義だな
258デフォルトの名無しさん:2008/11/21(金) 23:59:53
>>257
bが10なら
259デフォルトの名無しさん:2008/11/22(土) 00:00:15
  |
                             |
      ∩___∩             |
      | ノ  _,  ,_ ヽ        ((  | プラプラ
     /  ●   ● |         (=)
     |    ( _●_)  ミ _ (⌒)   J  ))
    彡、   |∪|  ノ        >>257
⊂⌒ヽ /    ヽノ  ヽ /⌒つ
  \ ヽ  /         ヽ /
   \_,,ノ      |、_ノ
260257:2008/11/22(土) 00:56:07
吊ってくる
261248:2008/11/22(土) 01:54:16
>>249
おお こんなに早くに片付けてくれてましたか
ありがとうございます!

小数点切捨てなのでintでいいと思うのです
262デフォルトの名無しさん:2008/11/22(土) 02:37:52
>>261
>>248のに合わせて全部intにしてみたんだけど
 複利計算の途中で一円以下の金額が発生して、それにも利子が付くというのは分かるかな?
問題文見た感じでは最終結果だけ小数点切捨てのように見えるからこっちが正しいんじゃないかな

#include<stdio.h>
int main(void)
{
int a, d=0;
double b=10000, c = 10000;
printf("返すべき元利合計(万円);");
scanf("%d",&a);
a *=10000;
for(;;){
b *= 1.1;
if(a < b) break;
c = b;
d++;
}
printf("最大年数;%d\n",d);
printf("返却金額;%d\n", (int)c);
return 0;
}
263デフォルトの名無しさん:2008/11/22(土) 13:53:26
一桁ずらして11倍にするとかどうだろう?
264デフォルトの名無しさん:2008/11/22(土) 14:28:45
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
入力した文字列(A,B,C,Dからなる文字列)から、それぞれの文字数を出力するプログラム
を作成せよ。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語: C
[5] その他の制限:getcharを使わずscanfを用いる。switch文を用いる。
例)
文字列を入力してください:AABCD
A:2個
B:1個
C:1個
D:1個

よろしくお願い致します。
265デフォルトの名無しさん:2008/11/22(土) 14:49:18
>>264
#include <stdio.h>
int main(void)
{
char str[100];
int a = 0, b = 0, c = 0, d = 0;
int i;
printf("文字を入力してください:");
scanf("%s", str);
for (i = 0; (str[i] != '\n') && (str[i] != '\0'); i++) {
switch (str[i]) {
case 'A':
a++;
break;
case 'B':
b++;
break;
case 'C':
c++;
break;
case 'D':
d++;
break;
default :
break;
}
}
printf("A:%d個\nB:%d個\nC:%d個\nD:%d個\n", a, b, c, d);
return 0;
}
266デフォルトの名無しさん:2008/11/22(土) 15:03:50
[1]授業単元;プログラミング
[2]問題文
  キーボードから任意の数字(a,b)を2つの
  キーボードに入力し,a〜bの総和と
  aのb乗を計算するプログラムを作成しなさい。
  例
  a=2 b=5なら
  2+3+4+5=14
  2^5=32
[3]
 [3.1]OS:XP
[3.2]コンパイラとパーテンション:vc6.0
[4]期限:2008/11/27
[5]その他
double使うのはわかったんですが後がわかりませんお願いします
267デフォルトの名無しさん:2008/11/22(土) 15:07:14
>>265
ありとうございます。
268デフォルトの名無しさん:2008/11/22(土) 15:17:29
>>266
#include<stdio.h>
int main(void)
{
int a, b, i, sum = 0, pow = 1;
printf("a = ");
scanf("%d", &a);
printf("b = ");
scanf("%d", &b);
pow = a;
for (i = a; i < b; ++i) {
printf("%d + ", i);
sum += i;
pow *= a;
}
printf("%d ", i);
sum += i;
pow *= a;
printf("= %d\n", sum);
printf("%d^%d= %d\n",a, b, pow);
return 0;
}
269デフォルトの名無しさん:2008/11/22(土) 15:24:56
>>266
#include <stdio.h>
int main(void)
{
int a, b;
int i;
int sum = 0;
double exp = 1.0;
printf("a = ");
scanf("%d", &a);
printf("b = ");
scanf("%d", &b);
for (i = a; i <= b; i++) {
sum += i;
}
for (i = 0; i < b; i++) {
exp *= a;
}
printf("%dから%dまでの総和は%d\n%dの%d乗は%.0f\n", a, b, sum, a, b, exp);
return 0;
}
270デフォルトの名無しさん:2008/11/22(土) 15:27:40
>>268
間違ってるぞ死ねゴミ野郎
271デフォルトの名無しさん:2008/11/22(土) 17:19:57
>>269
ありがとうございます
272デフォルトの名無しさん:2008/11/22(土) 18:36:16
270 名前:デフォルトの名無しさん 投稿日:2008/11/22(土) 15:27:40
>>268
間違ってるぞ死ねゴミ野郎
273デフォルトの名無しさん:2008/11/22(土) 20:43:32
>>268 == >>270 なんだよ!
間違ってごめんなさいしてたんだよ!
274デフォルトの名無しさん:2008/11/22(土) 21:23:43
2重あるいは、3重、4重・・・のループを抜けるにはどうすればよいでしょうか。
1つのループだったら、breakで抜けられると思うのですが・・・
275デフォルトの名無しさん:2008/11/22(土) 21:28:53
goto
276デフォルトの名無しさん:2008/11/22(土) 21:44:03
break連鎖 しかし4重ループとかのソースは見たくない
277デフォルトの名無しさん:2008/11/22(土) 21:45:45
ラベルとgoto
278274:2008/11/22(土) 21:54:23
>>275,276,277
ありがとうございました。
279デフォルトの名無しさん:2008/11/22(土) 22:23:51
[1] 授業単元:プログラミング2
[2] 問題文(含コード&リンク):
・コマンドライン引数を用いプログラムの実行時に,コピー元とコピー先のファイル名が指定できること.
・strcmpを使いコピー元のファイル名とコピー先のファイル名が同じかどうかを判定し,同じ場合には,strcatを使いコピー先のファイル名をファイル名1と変更する処理を書け.
(例) 「file」を「file1」とかにする.単にファイル名に1を加えるだけ.)
これらの条件を満たしたFile Aの内容をFile Bへコピーするプログラムを作成せよ.

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラとバージョン: gcc
 [3.3] 言語: C
[4] 期限: [11月25日

よろしくおねがいします。
280デフォルトの名無しさん:2008/11/22(土) 22:26:56
ファイル名違ってたらstrcmp() != 0にならね?
281デフォルトの名無しさん:2008/11/22(土) 22:30:04
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
名前,年齢,身長,体重,性別(M:男性,F:女性)のデータファイルより、以下のことを行なうプログラムを作成せよ.
コマンドライン引数を導入し,データファイルと出力ファイル,実行モードを指定せよ.
使い方> ./a.out 入力ファイル名 出力ファイル名 モード
使い方> ./a.out personal_data.txt result.txt   1
実行モードとして,下記三つのモードを用意せよ
1. 男性のデータのみをファイルに書き込む
2. 女性のデータのみをファイルに書き込む
3. 全員のデータをファイルに書き込む
※ 書き込む場合は,名前,身長,体重,年齢の順とする.
データファイルから,全員
分のデータを読み込む.ただし,データの終わりを判定して,読み込みを終了すること.
全員分のデータを標準出力に出力する.

personal_data.txt ↓
名前 年齢 身長 体重 性別
A 18 175.8 62.3 M
B 23 154.2 49.5 F
C 28 180.1 75.2 F
D 32 169.5 59.8 M
E 35 158.4 54.3 F
F 40 175.8 80.9 M


[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラとバージョン: gcc
 [3.3] 言語: C
[5] fprint/fgets/sscanfなどは習いましたがstrtok/atof/fputsなどは習っていません。

282デフォルトの名無しさん:2008/11/22(土) 22:50:42
>>279
#include <stdio.h>
#include <string.h>
char buf[10000];
int main(int argc, char *argv[]){
  char *src, *dst, *p = buf;
  int bufsize = sizeof(buf);
  size_t readbytes;
  FILE *srcfp, *dstfp;
  if(argc < 3) return -1;
  src = argv[1];
  dst = argv[2];
  if(0 == strcmp(src, dst)){
    int len;
    strcpy(buf, dst);
    strcat(buf, "1");
    dst = buf;
    len = strlen(buf) + 1;
    bufsize -= len;
    p += len;
  }
  if(!(srcfp = fopen(src, "rb"))) return -1;
  if(!(dstfp = fopen(dst, "wb"))){fclose(srcfp); return -1;}
  while( 0 < (readbytes = fread(p, 1, bufsize, srcfp)))
    fwrite(p, 1, readbytes, dstfp);
  fclose(srcfp);
  fclose(dstfp);
  return 0;
}
283デフォルトの名無しさん:2008/11/22(土) 23:17:59
>>281
#include <stdio.h>
#include <stdlib.h>
#define file_open(fp, fname, mode, errno) do { \
if ((fp = fopen(fname, mode)) == NULL) { fprintf(stderr, "%sがオープンできません。\n", fname); \
exit(errno); } } while (0)
int main(int argc, char *argv[])
{
FILE *fpw, *fpr;
char ss[500], format[300];
char s[5][1000] = {""};
if (argc != 4) return 1;
switch (argv[3][0]) {
case '1': sprintf(format, "%%s %%s %%s %%s %%[%c]", 'M'); break;
case '2': sprintf(format, "%%s %%s %%s %%s %%[%c]", 'F'); break;
case '3': sprintf(format, "%%s %%s %%s %%s %%[%s]", "MF"); break;
default: exit(4);
}
file_open(fpr, argv[1], "r", 2);
file_open(fpw, argv[2], "w", 3);
while (fgets(ss, 500, fpr)) {
if (sscanf(ss, format,
s[0], s[1], s[2], s[3], s[4]) == 5) {
fprintf(fpw, "%s %s %s %s\n", s[0], s[2], s[3], s[1]);
}
}
fclose(fpr); fclose(fpw);
return 0;
}
284デフォルトの名無しさん:2008/11/22(土) 23:43:23
>>282を書いてくれた方、ありがとうございます。
今さらで申し訳ありませんが
sizeof()・fread()・fwrite・fopenのrb・wbのbを習っていません…
これらを使わずにできますか?
またstrlenも使わないでもできますか?
すいません… おねがいします。
285デフォルトの名無しさん:2008/11/22(土) 23:44:42
>>284
入力ファイルと出力ファイルが変化する危険が生じることになるがいいか?
286デフォルトの名無しさん:2008/11/23(日) 00:17:09
>>284
> fwrite・fopenのrb・wbのbを習っていません…
コピーするファイルが、必ずしもテキストファイルとは限らんし、
テキストファイルでもrb,wbで問題なく処理できるんだが・・・
さすがに、習っていなくても、fopenを習ったのなら、あとは自分で調べて
使っても問題ないのでは?
287デフォルトの名無しさん:2008/11/23(日) 00:27:28
>>284
#include <stdio.h>
#include <string.h>
#define BUFSIZE 10000
char buf[BUFSIZE];
int main(int argc, char *argv[]){
  char *src, *dst, *p = buf;
  int bufsize = BUFSIZE;
  size_t readbytes;
  FILE *srcfp, *dstfp;
  if(argc < 3) return -1;
  src = argv[1]; dst = argv[2];
  if(0 == strcmp(src, dst)){
    int len;
    strcpy(buf, dst); strcat(buf, "1");
    dst = buf;
    for(p=dst; *p; p++);
    bufsize -= (int)(p-buf);
    p++;
  }
  if(!(srcfp = fopen(src, "r"))) return -1;
  if(!(dstfp = fopen(dst, "w"))){fclose(srcfp); return -1;}
  while( 0 < (readbytes = fread(p, 1, bufsize, srcfp)))
    fwrite(p, 1, readbytes, dstfp);
  fclose(srcfp); fclose(dstfp);
  return 0;
}
環境が linux なら、 b は単純に消せばいい。ただしその場合、Windowsでの動作は保障されない。
「習ってないから使うな」とかアホなこと書く前にテキストを読んどけ。せっかくある便利な道具を封じたら、
難易度上がるんだよ? 分かってる? その上で初心者向きじゃないとか文句言わないでね。
それすら判断できないんだろうけどw
288287:2008/11/23(日) 00:30:25
おっとみすった。
bufsize -= (int)(p-buf);

bufsize -= (int)(p-buf) + 1;
としといて。
289デフォルトの名無しさん:2008/11/23(日) 00:31:24
>>287
ごちゃごちゃ言って、
>>285でレスしたのに、fread , fwrite を使ってるじゃん・・・
290デフォルトの名無しさん:2008/11/23(日) 00:34:58
こりゃ失礼、読み落としてた。
291デフォルトの名無しさん:2008/11/23(日) 00:35:38
手元のwindowsで動作したものでいいなら。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *fps, *fpd;
char *src, *dst;
char *cur;
char buf[100] = {""};
if (argc < 3) return -1;
src = argv[1];
dst = argv[2];
if (strcmp(src, dst) == 0) {
cur = dst;
while ( *cur != '.') cur++;
strcat(buf, "1");
strcat(buf, cur);
strcpy(cur, buf);
}
if ((fps = fopen(src, "r")) == NULL) return -1;
if ((fpd = fopen(dst, "w")) == NULL) {
fclose(fps);
return -1;
}
while (fgets(buf, 100, fps) != NULL) {
fputs(buf, fpd);
}
fclose(fps);
fclose(fpd);
return 0;
}
292デフォルトの名無しさん:2008/11/23(日) 00:59:13
>>279 ここぞと言うときですもんね・・・出すしかない、クソースを
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8078.c
293デフォルトの名無しさん:2008/11/23(日) 01:02:45
ファイル名に直接strcapをしたら拡張子名が換わるがいいのかな?
294デフォルトの名無しさん:2008/11/23(日) 01:07:39
295デフォルトの名無しさん:2008/11/23(日) 01:09:40
>>293
それは自分も思った。ファイル名の後ろから . (ドット)を検出して、
それより前の文字に 1 を加えてから拡張子を結合させるようにする
コードを追加すべきかと。
296デフォルトの名無しさん:2008/11/23(日) 01:14:02
C言語でカレンダープログラムを作成しています。
年月を与えて、その年月のカレンダーを表示させるプログラムです。
悩んでいるのは、そのプログラムを拡張して、年だけ与えたとき、
その年の12か月分のカレンダーを表示させるというものです。
月の入力があるかないかを判定すればできると思ったんですが、
どうプログラムすればいいかがわかりません。
助言願います。
297デフォルトの名無しさん:2008/11/23(日) 01:15:51
>>296 >>1を読むべし。

C言語なら俺に聞け(入門篇) Part 39
http://pc11.2ch.net/test/read.cgi/tech/1226693085/
298デフォルトの名無しさん:2008/11/23(日) 01:18:59
>>296
入力がコマンドライン引数なら、引数の数で判断すればいい。
プログラム中なら、月の入力時に
「12か月分を表示するときは0を入力してください」なんかにすれば?
299デフォルトの名無しさん:2008/11/23(日) 01:21:06
>>284
心配しなくてもバレるんだからちゃんと動く方もらっときな
300デフォルトの名無しさん:2008/11/23(日) 01:28:45
>>295 そう思ってさっきのを修正
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
FILE *fps, *fpd;
char *src, *dst, *cur, buf[100] = {""};
int flag = 0;
if (argc < 3) return -1;
src = argv[1];
dst = argv[2];
if (strcmp(src, dst) == 0) {
cur = dst;
while ( *cur != '\0') {
if (*cur =='.') flag = 1;
cur++;
}
if (flag == 1) {
while (*cur != '.') cur--;
strcat(buf, "1");
strcat(buf, cur);
strcpy(cur, buf);
}
else strcat(dst, "1");
}
if ((fps = fopen(src, "r")) == NULL) return -1;
if ((fpd = fopen(dst, "w")) == NULL) {
fclose(fps);return -1;
}
while (fgets(buf, 100, fps) != NULL) fputs(buf, fpd);
fclose(fps);fclose(fpd);
return 0;
}
301デフォルトの名無しさん:2008/11/23(日) 03:20:38
[1] 授業単元:配列と繰り返し
[2] 問題文
それぞれの人の身長と,その身長と平均身長との差(小さければマイナスの数値となる)
を,一人一行ずつ出力しなさい。例えば,次のような形式で出力する (n が3 の場合。
小数点以下の桁数は気にしない) 。
170.0 0.0
165.0 -5.0
175.0 5.0

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語:C++
[4] 期限:2008年11月25日12:00まで

よろしくお願いします。



302デフォルトの名無しさん:2008/11/23(日) 03:56:39
[1] 授業単元:配列、繰り返し、分岐
[2] 問題文
for文を用いて10 個の要素をもつ整数配列data を初期化して宣言する。配列要素の中の最大値と最小値を
出力しなさい。なお,配列要素の値として,すべて負のものがあるデータも試してみるこ
と。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語:C++
[4] 期限:2008年11月25日12:00まで

よろしくお願いします。
303デフォルトの名無しさん:2008/11/23(日) 10:33:11
>>301
#include <stdio.h>

int main(){
int n, i;
double person[20];
double sum = 0, ave = 0;
printf("人数:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("%d人目の身長:",i + 1);
scanf("%lf", &person[i]);
sum += person[i];
}
ave = sum / n;
for (i = 0; i < n; i++) {
printf("%3.1f %3.1f\n", person[i], person[i] - ave);
}
return 0;
}
304デフォルトの名無しさん:2008/11/23(日) 10:41:16
>>302
#include <stdio.h>

int main(){
int data[10];
int i, max, min;
printf("1個目: ");
scanf("%d", &data[0]);
max = data[0];
min = data[0];
for (i = 1; i < 10; i++) {
printf("%d個目", i + 1);
scanf("%d", &data[i]);
if (data[i] > max)
max = data[i];
if (data[i] < min)
min = data[i];
}
printf("最大値%d 最小値%d\n", max, min);
return 0;
}
305デフォルトの名無しさん:2008/11/23(日) 12:40:51
>>303>>304
どうもありがとうございます。
306デフォルトの名無しさん:2008/11/23(日) 13:10:20
[1] 授業単元:情報処理実習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8082.txt
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語: (C++)
[4] 期限: ([2008年11月25日9時まで])
[5] その他の制限: 逆行列だけが表示されるようにすること

長いですがよろしくお願いします
307デフォルトの名無しさん:2008/11/23(日) 17:44:05
[1] 授業単元:工学演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8083.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: (C++)
[4] 期限: 11/25
[5] その他の制限: よろしくお願いします
308デフォルトの名無しさん:2008/11/23(日) 20:25:44
[1] 授業単元: C言語
[2] 問題文:指定したファイルに書かれている整数を逆順に表示するプログラムをつくりなさい。
 例 123 4567 89
と書かれているなら
   89 4567 123
と表示
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11月24日
[5] その他の制限: malloc,fsanf,fopenは習いました。
よろしくお願いします。
309デフォルトの名無しさん:2008/11/23(日) 21:06:19
>>308
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int *v;
size_t c;
FILE *fp;

fp = fopen("308.txt", "r");
if (fp == NULL) {
perror("fopen");
return 1;
}
c = 1;
v = malloc(sizeof(int) * c);
while (fscanf(fp, "%d", &v[c-1]) == 1) {
c++;
v = reallocf(v, sizeof(int) * c);
}
fclose(fp);

c--;
while (c != 0) {
printf("%d ", v[c-1]);
c--;
}
putchar('\n');
free(v);
return 0;
}
310デフォルトの名無しさん:2008/11/23(日) 21:32:23
[1] 授業単元: プログラミング言語 U
[2]
@からCにこたえよ。
文字列msgを次の2つの方法で画面に表示させようとしたら、正しく表示できないところがあった。
なお、文字列msgは以下のように初期化されており、終端方法は問題ないものとする。

char msg[]="........";/*.......はある文字列*/
[A]printf("%s",msg);
[B]printf(msg);

@正しく表示できなかったのは[A][B]のどちらか、あるいは両方か?
Aそれはどのような場合か、例を挙げなさい。
B正しくできない理由を説明しなさい。
Cこのような問題を防ぐにはどうしたらよいか。

[3] 環境
 [3.1] OS:windows xp
 [3.3] 言語: C言語
[4] 期限:11月末

どうかよろしくお願いいたします。
311デフォルトの名無しさん:2008/11/23(日) 21:37:21
>>310
1.
B
2.
%を含む場合
3.
printfのフォーマットとみなされるから
4.
Aの様にする



多分こうだろうと思う。
312デフォルトの名無しさん:2008/11/23(日) 21:38:20
>>310
1. [B]
2. msg[] = "%d"
3. フォーマットに対応する引数を渡してないから
4. printf の第1引数には何が入っているか分からない文字列を渡さない。例えば [A] のようにする
313310:2008/11/23(日) 21:48:12
>>311,312
311様312様
ご回答ありがとうございます。
まさかこんなにはやいとは思いませんでした。
ありがとうございます。
314308:2008/11/23(日) 21:59:48
>>309さん
ありがとうございます。
たすかりました。
315デフォルトの名無しさん:2008/11/23(日) 22:22:16
[1] 授業単元: プログラミング言語 U
[2]
@からCにこたえよ。

@あるデータ型の変数内部で1と0がどのように並んでいるかを調べるにはどうしたらよいか。
A符号付き変数の内部で正と負の整数はどのような方法で表されるか説明しなさい。
B符号付き整数で表せる数値の範囲は負の数が正の数よりも1つ多い理由を説明せよ。
C整数の変数の右シフトにおいて結果が異なることがある理由を説明しなさい。

[3] 環境
 [3.1] OS:windows xp
 [3.3] 言語: C言語
[4] 期限:11月末

どうかよろしくお願いいたします。
316デフォルトの名無しさん:2008/11/23(日) 22:35:31
>>315
1.ビット演算右シフトしたものを 1 と & するという操作を繰りかえす
2. 負数はビット反転して1を足す
3. 全てのビットが1のものは最小の負数、全てのビットが0のものは0を表し、
それ以外のものは左端のビットが1であれば負、0であれば正の数なので負の方が一個多い
4.
右シフトした後の左端ビットはシフト前のビットを使うか0するはC言語の規格で決まっていないから
or
負数の場合は、右にシフトして開いたビットは1になる
正の数だったら0になる


4がどっちの意味の質問なのかわからん。後俺の説明が全般的に糞

317デフォルトの名無しさん:2008/11/23(日) 22:40:32
[2]
以下の仕様を満たす構造体を宣言しなさい。

・構造体名はTEST、構造体変数名はsttest
・1番目のメンバは0〜100000を扱う整数で変数名はnNo
・2番目のメンバは20文字を扱う文字列で、変数名はszName
・3番目のメンバは80文字を扱う文字列で、変数名はszAddr

[3] 環境
 [3.1] OS:windows xp
 [3.3] 言語: C言語
[4] 期限:11月末

どうかよろしくお願いいたします。
318315:2008/11/23(日) 22:41:44
>>316

ありがとうございます。助かりました。
319デフォルトの名無しさん:2008/11/23(日) 22:53:10
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8084.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語: C++
[4] 期限: 2008年11月24日24時まで
[5] その他の制限: 特になし。よろしくお願いいたします。
320デフォルトの名無しさん:2008/11/23(日) 22:57:14
>>317
宣言するだけかよw
struct TEST {
unsigned int nNo;
char szName[21];
char szAddr[81];
} sttest;
321デフォルトの名無しさん:2008/11/23(日) 23:51:10
>>319
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8085.txt

原問と少しプログラムが違っているので(なぜか動かなかったので
手を加えさせてもらいました)、気になる時は修正して下さい。
322デフォルトの名無しさん:2008/11/24(月) 00:24:03
【質問テンプレ】
[1] 授業単元:基礎プログラミング
[2] 問題文(含コード&リンク):適当に問題作って正解、不正解をそれぞれ数え
不正解時は回数ごとに違う言葉が表示されるようにしろ(1回目:違う、2回目氏ねみたいな感じで)
[3] 環境
 [3.1] OS:VISTAUltimate
 [3.2] コンパイラ名とバージョン: gcc(unixサーバー内のものなのでver不明)orVISUALC++2008
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)今週木曜AM10:00まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)if elseは必ず用いるのみ
323デフォルトの名無しさん:2008/11/24(月) 00:25:22
3回目は?「今すぐ樹海に逝け」とか?
324デフォルトの名無しさん:2008/11/24(月) 00:26:15
○×?
325デフォルトの名無しさん:2008/11/24(月) 00:29:04
>>323それでもおkww好きなように改変して下さい

>>324問題自体は何でもいいようなのでお任せします
326デフォルトの名無しさん:2008/11/24(月) 00:31:53
【質問テンプレ】
[1] 授業単元: 情報処理

[2] 問題文
有効桁が10桁の実数kを読み込み、
k^1、k^2、k^3、、、、、k^10 の値を表で出力せよ。

[3] 環境
 [3.1] OS: vista
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:2008/11/24
[5] その他の制限: 数学関数 pow() は使わない

宜しくお願いします
327デフォルトの名無しさん:2008/11/24(月) 01:04:25
>>321
早い回答ありがとうございます。
動きませんでしたか、問題のミスかな?
でもとっても助かりました。ありがとうございましたm(_ _)m
328デフォルトの名無しさん:2008/11/24(月) 01:36:44
>>327
Nが2と#defineされているのは動作確認のためですので
4に戻しておいてください
329デフォルトの名無しさん:2008/11/24(月) 01:42:56
>>322
初心者が、覚えたことの確認がてら作ったクソースでよければどうぞ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8086.txt

#include <algorithm>
は消しといてください
330デフォルトの名無しさん:2008/11/24(月) 05:06:12
クソースは麻呂に特許がある単語でおじゃっ!1回使用する度に
10円の著作権料を請求するでおじゃる。
331デフォルトの名無しさん:2008/11/24(月) 05:09:37
[1] 授業単元: コンピューターサイエンス
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8087.txt
[3] 環境
 [3.1] OS: windows
 [3.2] VC++08
 [3.3] 言語: C++
[4] 期限:2008年11月25日のAM三時まで
[5] その他の制限:
英文ですが時間があったら日本語訳に直します。
何度かトライしてみたのですが、なかなか出来ません・・・よろしくお願いします。
332デフォルトの名無しさん:2008/11/24(月) 07:05:15
333332:2008/11/24(月) 07:19:11
334デフォルトの名無しさん:2008/11/24(月) 07:36:06
[1] 授業単元:データ構造とアルゴリズム 動的なメモリ確保
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8091.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
335デフォルトの名無しさん:2008/11/24(月) 07:36:23
? if the cell is alive and has >= 1 or , <=4 alive neighbors, the cell dies
あるセルが生(真)で、1つ以上4つ以下の生(真)の隣接するセルがあれば、
そのセルは死(偽)になる。

if the cell is dead and has exactly 3 alive neighbors, it becomes alive
あるセルが死(偽)の場合、生(真)のセルが3つ隣接している場合、
そのセルは生(真)になる。

隣接するのは、上下左右の4つが対象?斜めは無視?
336デフォルトの名無しさん:2008/11/24(月) 07:36:38
よろしくお願いします
337デフォルトの名無しさん:2008/11/24(月) 09:55:39
338デフォルトの名無しさん:2008/11/24(月) 09:56:55
>>334
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
FILE *fp;
int *v;
int size, i, sum;

scanf("%d", &size);
v = malloc(sizeof(int) * size);

i = 0;
while (scanf("%d", &v[i]) != EOF) {
i++;
}

fp = fopen("out.txt", "w");
sum = 0;
for (i = size; i > 0; i--) {
fprintf(fp, "%d ", v[i-1]);
sum += v[i-1];
}
fprintf(fp, "%d", sum);

fclose(fp);
free(v);

return 0;
}
339デフォルトの名無しさん:2008/11/24(月) 10:34:35
[1] 授業単元:工学演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8083.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 11/25
   よろしくお願いします
340デフォルトの名無しさん:2008/11/24(月) 12:11:49
>>335
コンウェイのライフゲーム/セルオートマトンですか。
341デフォルトの名無しさん:2008/11/24(月) 13:51:47
[1] 授業単元: 情報
[2] 問題文: キーボードから入力した10個の数を昇順表示
 (例) 4[enter] → 4
    7[enter] → 4 7
    1[enter] → 1 4 7
    -2[enter] → -2 1 4 7
    ………
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual Studio .NET コマンドプロンプト
 [3.3] 言語: C
[4] 期限: 11/27
[5] その他の制限
 [5.1] データ構造は【配列】にする。
 [5.2] 既習範囲【printf,scanf,if,while,配列[]】以外は使用しない。
 [5.3] void main() ではじめる。

宜しくお願い致します。
342デフォルトの名無しさん:2008/11/24(月) 14:12:47
>>341
IF使っちゃだめなのか?
343デフォルトの名無しさん:2008/11/24(月) 14:24:59
>>341
for が使えないと、なんかみょうちくりんなコードに見える。。。
#include <stdio.h>

void main()
{
int i, j;
int v[10];
int t;

i = 0;
while (i < 10) {
scanf("%d", &v[i]);
j = i;
while (j > 0) {
if (v[j] < v[j-1]) {
t = v[j];
v[j] = v[j-1];
v[j-1] = t;
}
j--;
}
/* j == 0 */
while (j <= i) {
printf("%d ", v[j]);
j++;
}
printf("\n");
i++;
}
return 0;
}
344デフォルトの名無しさん:2008/11/24(月) 14:30:11
>>329
ありがとうございます、助かりました
345デフォルトの名無しさん:2008/11/24(月) 15:16:13
346デフォルトの名無しさん:2008/11/24(月) 15:28:19
[1] 授業単元:
プログラミング演習
[2] 問題文(含コード&リンク):
6個の要素を持つ整数配列 int data[6] = {3,7,12,4,16,}を初期化して宣言する。
この配列に順に「1,2,3,・・・6」と番号を振り、以下に示すようにそれぞれ配列の数値の分だけ“*”を出力されるようにしなさい。
1 ***
2 *******
3 ************
4 ****
5 *
6 ******
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョンVC 6.0
 [3.3] 言語:
C++
[4] 期限:
今日中
[5] その他の制限:
特にありません。


どうかお願いします。
347デフォルトの名無しさん:2008/11/24(月) 15:39:52
>>346
#include <iostream>
int main()
{
int data[6] = {3,7,12,4,1,6};
for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
std::cout << i << ' ';
for (int j = 0; j < data[i]; ++j)
std::cout << '*';
std::cout << std::endl;
}
return 0;
}
348デフォルトの名無しさん:2008/11/24(月) 15:46:10
[1] 授業単元 プログラミング
[2] 問題文
(1) int min_intarray(int data[ ], int n)
(2) void print_intarray(int data[ ], int n)
上記(1)(2)の関数を参考にしながら、次のプログラム(main 関数)を利用して,作成した関数が正しく動作しているか
確認しなさい。
int main(void)
{
int a[5] = {3, 5, 1, 2, 4};
int b[10] = {6, 4, 2, 5, 8, -2, 7, 0, 1, 9};
int c[4] = {-2, -3, -4, -1};

printf(%d :, min_intarray(a, 5));
print_intarray(a, 5);
printf(%d :, min_intarray(b, 10));
print_intarray(b, 10);
printf(%d :, min_intarray(c, 4));
print_intarray(c, 4);
return 0;
}

[3] 環境
 [3.1] OS:Windows
[3.2]
 [3.3] 言語:C
[4] 期限:2008年11月25日6:00まで


問題文の意味からしていまいち掴めていないような状況です。
申し訳ないですがどなたかお願いします。
349デフォルトの名無しさん:2008/11/24(月) 15:55:05
>>348
#include <stdio.h>
#include <limits.h>
int min_intarray(int data[ ], int n)
{
int min = INT_MAX, i;
for (i = 0; i < n; ++i) {
if (data[i] < min) min = data[i];
}
return min;
}
void print_intarray(int data[ ], int n)
{
int i;
putchar('[');
for (i = 0; i < n - 1; ++i)
printf("%d ", data[i]);
printf("%d]\n",data[i]);
}
int main(void)
{
int a[5] = {3, 5, 1, 2, 4};
int b[10] = {6, 4, 2, 5, 8, -2, 7, 0, 1, 9};
int c[4] = {-2, -3, -4, -1};
printf("%4d :", min_intarray(a, 5));
print_intarray(a, 5);
printf("%4d :", min_intarray(b, 10));
print_intarray(b, 10);
printf("%4d :", min_intarray(c, 4));
print_intarray(c, 4);
return 0;
}
350デフォルトの名無しさん:2008/11/24(月) 16:05:18
>>337>>338ありがとうございました。
351デフォルトの名無しさん:2008/11/24(月) 16:31:16
[1] 授業単:アルゴリズム
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8095.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
お願いします。
352デフォルトの名無しさん:2008/11/24(月) 17:00:27
[1] 授業単元:関数
[2] 問題文
(1)main関数で4つの数を入力し、heikin 関数に引き渡した。heikin 関数では、4 つの数
の平均値を返す。関数から計算された値はmain 関数側で表示する。この仕様を満たす
プログラムを作りなさい。

(2)main関数で整数値を入力し、kaijyo 関数に引き渡した。kaijyo 関数では、引数の階乗
値を返す。関数で計算された値はmain 関数側で表示する。この仕様を満たすプログラ
ムを作りなさい。
例)3の階乗値は 3×2×1=6 である。5 の階乗値は5×4×3×2×1=120 である。

[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C
[4] 期限:明日

お願いします
353デフォルトの名無しさん:2008/11/24(月) 17:04:47
>>352

#include <stdio.h>
int main(){
int a b, c, d;
scanf("1st number %d", &a);
scanf("2nd number %d", &b);
scanf("3rd number %d", &c);
scanf("4th number %d", &d);
printf("The sum is : %d", heikin(a, b, ,c ,d));
return 5000;
}

int heikin(int a, int b, int c, int d){
return (a + b + c + d)/ 4
}
354デフォルトの名無しさん:2008/11/24(月) 17:08:47
>>353
釣りだといってくれ
355デフォルトの名無しさん:2008/11/24(月) 17:10:36
>>352
<2>

#include <stdio.h>
int main(){
int a;
printf("Which number you want?");
scanf("%d", &a);
printf("The kaijo of %d is : %d", a, kaijo(a));
return 0;
}

int kaijo(int a){
int i, base=1;
while(a>1){
base *= a--;
}
return b
}

あごめんよくわかんね
356デフォルトの名無しさん:2008/11/24(月) 17:13:29
>>355
もう休め・・・・
357デフォルトの名無しさん:2008/11/24(月) 17:15:41
>>356
でも動くだろ?
プログラマにとって多少のコンパイルエラーは避けられない
358デフォルトの名無しさん:2008/11/24(月) 17:24:06
>>343
ありがとうございます。
359デフォルトの名無しさん:2008/11/24(月) 17:29:35
// コンパイル通してないから動くか知らん
#include <stdio.h>
double heikin(double input[]);
int kaijo(int n);
int main(){
double input[4];
int i;
/* for (1) */
for(i=0;i<4;i++)
scanf("%lf", &input[i]);
printf("average: %7.4f\n", heikin(input));
/* for (2) */
scanf("%d", &i);
printf("fact(%d) = %d\n", i, kaijo(i));
}
double heikin(double input[]){
int i;
double sum = 0;
for(i=0;i<4;i++) sum+=input[i];
return sum/4;
}
int kaijo(int n){return (n<2)?1:kaijo(n-1)*n;}
360デフォルトの名無しさん:2008/11/24(月) 17:33:45
>>351
iodata2-1 もうpしる
361デフォルトの名無しさん:2008/11/24(月) 18:11:05
>>351 iodata2-1
name: name a, teln: +aa-aaa-aa-aaaa, mail: [email protected]
name: name b, teln: +bb-bbb-bb-bbbb, mail: [email protected]
name: name c, teln: +cc-ccc-cc-cccc, mail: [email protected]
name: name z, teln: +zz-zzz-zz-zzzz, mail: [email protected]
name: name e, teln: +ee-eee-ee-eeee, mail: [email protected]
name: name f, teln: +ff-fff-ff-ffff, mail: [email protected]
name: name g, teln: +gg-ggg-gg-gggg, mail: [email protected]
name: name h, teln: +hh-hhh-hh-hhhh, mail: [email protected]
name: name i, teln: +ii-iii-ii-iiii, mail: [email protected]
name: name j, teln: +jj-jjj-jj-jjjj, mail: [email protected]
name: name a, teln: +aa-aaa-aa-aaaa, mail: [email protected]
name: name b, teln: +bb-bbb-bb-bbbb, mail: [email protected]
name: name c, teln: +cc-ccc-cc-cccc, mail: [email protected]
name: name d, teln: +dd-ddd-dd-dddd, mail: [email protected]
name: name e, teln: +ee-eee-ee-eeee, mail: [email protected]
name: name f, teln: +ff-fff-ff-ffff, mail: [email protected]
name: name g, teln: +gg-ggg-gg-gggg, mail: [email protected]
name: name h, teln: +hh-hhh-hh-hhhh, mail: [email protected]
name: name i, teln: +ii-iii-ii-iiii, mail: [email protected]
name: name j, teln: +jj-jjj-jj-jjjj, mail: [email protected]
362デフォルトの名無しさん:2008/11/24(月) 18:12:38
まちがえましたこっちがiodata2-1です
name: name a, teln: +aa-aaa-aa-aaaa, mail: [email protected]
name: name b, teln: +bb-bbb-bb-bbbb, mail: [email protected]
name: name c, teln: +cc-ccc-cc-cccc, mail: [email protected]
name: name z, teln: +zz-zzz-zz-zzzz, mail: [email protected]
name: name e, teln: +ee-eee-ee-eeee, mail: [email protected]
name: name f, teln: +ff-fff-ff-ffff, mail: [email protected]
name: name g, teln: +gg-ggg-gg-gggg, mail: [email protected]
name: name h, teln: +hh-hhh-hh-hhhh, mail: [email protected]
name: name i, teln: +ii-iii-ii-iiii, mail: [email protected]
name: name j, teln: +jj-jjj-jj-jjjj, mail: [email protected]
363352:2008/11/24(月) 19:19:20
>>353
うまく動かなかったので構文を直した後少し変更したら動きました、ありがとうございます
>>355
動きました、ありがとうございます
364デフォルトの名無しさん:2008/11/24(月) 19:26:56
a.outを実行したときの引数の数argcと引数argvを代入できる
ような構造体の定義と代入の方法を教えてください
int main(int argc, char *argv[])
{
A a;
A.argc=argc;
for (int i=0;i<V.argc;i++){
strcpy(?,argv[i]);
}
}
struct A{
int argc;
?;
};
365sage:2008/11/24(月) 19:37:22
[1] 授業単元: プログラミング演習
[2] 問題文: 文字列1から文字列2の最長一致系列を求めるプログラムを作成する。
文字列1 "abcdefg"
文字列2 "bcdcccd"
の場合、"abc"を求める。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Visual C++ 2005
 [3.3] 言語: C
[4] 期限: 11月29日
[5] その他の制限: C言語は一通り習いました。よろしくおねがいします。
366デフォルトの名無しさん:2008/11/24(月) 19:39:36
>>365
関数を使っていいの?使っちゃいけないの?
367sage:2008/11/24(月) 19:45:51
>>366
特に指定されていないので、使って大丈夫なはずです。
368デフォルトの名無しさん:2008/11/24(月) 20:10:24
bcdじゃないの?
369デフォルトの名無しさん:2008/11/24(月) 20:16:22
>>362
fread で sizeof(Address) = 300バイト ごとに読み込んでいるようだけど、実際の iodata2-1 は CSV なの?
双方向にする以前にちゃんと動くんか?
370デフォルトの名無しさん:2008/11/24(月) 20:23:04
>>369 一応単方向のほうのプログラムは動きました。
371デフォルトの名無しさん:2008/11/24(月) 20:42:20
>>370
>>362 は実際の iodata2-1 と違うだろ
showAddress の結果を貼り付けただけと思われ
そのままうpれ
372デフォルトの名無しさん:2008/11/24(月) 20:56:35
iodata2-1のデータが今無いのでうpれないんです。
iodata2-1の内容は適当なアドレス帳のデータでいいらしいんですが・・
373デフォルトの名無しさん:2008/11/24(月) 20:57:39
前スレの698です。
[1] 応用プログラミング演習
[2] wavファイル(音楽ファイル)を読み込んでFFTを施し、バンドパスフィルタ(ある周波数領域を0にする方法でもいいしFIRフィルタでもよい)をかけてIFFTし、そのwavファイルを出力せよ。(バンドパスの領域は任意)
[3] 環境
 [3.1] OS: Windows
 [3.2] 開発環境:VC++ 6.0
 [3.3] 言語:C言語
[4]今月中
[5]制限なし

ある程度プログラムしたのですが、うまくいきません。
他スレで助言をいただこうと作成したプログラムをうpしたのですが、返答がなくもう一度このスレにお願いをしに来た次第です。
またフィルタをかける際ですが、
勉強不足でフィルタをかけるタイミングがわかりません↓
配列に格納したデータをFFTした後フィルタをかけIFFTするのか、生のデータにかけるのか…
ちなみにFIRフィルタをかけるつもりですが、係数の計算方法がわからないので、
http://momiji.i.ishikawa-nct.ac.jp/dfdesign/fir/mado.shtml
のサイトで得られる係数を利用したいと思っています。

プログラムをttp://a-draw.com/uploader/upload.cgi?mode=dl&file=6970に挙げました。passはメル欄です。
readmeではメールアドレスにアドバイスをくださいと書いておりますが、こちらのスレに書いてくださってかまいません。
どうぞご鞭撻のほどよろしくお願いします。m(_ _)m
374デフォルトの名無しさん:2008/11/24(月) 21:16:19
375デフォルトの名無しさん:2008/11/24(月) 21:19:34
[1] 授業単元: Cプログラミング
[2] 問題文: n×n行列Aが与えられたとき、逆行列A-1を計算するプログラムを作成しなさい。

[3] 環境
 [3.1] OS: LINUX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 12月1日

n×n行列Aが与えられたとき、逆行列A-1を計算するプログラムを作成しなさい。


よろしくお願いします。
376デフォルトの名無しさん:2008/11/24(月) 21:59:16
>>365
多重ループでやな感じだけどドゾー
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8098.txt
377デフォルトの名無しさん:2008/11/24(月) 22:46:36
>>372
適当なアレス長のデータじゃねーよ
バイナリ固定長300バイトのデータじゃなきゃ動作しない
面倒だが作ったぞ
378デフォルトの名無しさん:2008/11/24(月) 22:54:50
>>372めんどうですみません。よろしくお願いします
379デフォルトの名無しさん:2008/11/24(月) 22:55:02
>>335 >>374
> 維持
> 生きているセルの周囲に2つか3つの生きているセルがあれば次の世代でも生き残る。
この通りなら、1以下、4以上の生(真)のセルが隣接する場合は、死滅?
その場合、>>335 の訳は間違い?それとも、一般的なルールではない独自のもの?
380さそり:2008/11/24(月) 23:12:05
すみません一度質問させていただいて恐縮ですが.....。
制限つきで返されまして......
なにとぞご協力お願いします。。
[1] プログラミング(応用)
[2] ファイルを読み込みダブルクオートくくりの文字列を条件付で取り出してファイルに書き込む
[3] 環境
 [3.1] OS: UNIX
 [3.2] 開発環境:
 [3.3] 言語:C言語
[4]今週中
[5]制限なし
テキストファイルの中身が
下記の内容だとします。
GET_A="GET_B"+"GET_C"
GET_B="GET_A"*"GET_C"
このファイル内容を読み込んで.fファイルに書き込む内容は左辺の値と,右辺のダブルクオートで囲まれた文字列です。
しかも制限がありまして重複した値を2度書き込まないので従って書き込む内容は書式付で
#define GET_A
#define GET_B
#define GET_C
です。上記のファイルの中身は不規則で一定ではありません。左辺の値はダブルクオートでくくられていないこと......。
すごく困っていましてお力お借りしたいと思います。よろしくお願いします。





381デフォルトの名無しさん:2008/11/24(月) 23:13:10
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8099.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:明日

お願いします。
382381:2008/11/24(月) 23:20:12
失礼、既出でした。
383デフォルトの名無しさん:2008/11/24(月) 23:48:27
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
次の二つの関数を作成しなさい。
(1) int min_intarray(int data[ ], int n)
この関数は,要素がn 個の配列data の中の最小の値を返すものである。
(2) void print_intarray(int data[ ], int n)
この関数は,要素がn個の配列data のすべての要素を横に並べて出力するものである。
その上で,次のプログラム(main 関数)を利用して,作成した関数が正しく動作しているか
確認しなさい。
int main(void)
{
int a[5] = {3, 5, 1, 2, 4};
int b[10] = {6, 4, 2, 5, 8, -2, 7, 0, 1, 9};
int c[4] = {-2, -3, -4, -1};
printf("%d :", min_intarray(a, 5));
print_intarray(a, 5);
printf("%d :", min_intarray(b, 10));
print_intarray(b, 10);
x
y
z
printf("%d :", min_intarray(c, 4));
print_intarray(c, 4);
return 0;
}
384デフォルトの名無しさん:2008/11/24(月) 23:49:03
>>383の続きです。

[3] 環境
 [3.1] OS:Win
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C
[4] 期限:11/26


よろしくお願いします。
385デフォルトの名無しさん:2008/11/24(月) 23:52:35
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):
関数double area(double w, double h)を作成しなさい。
この関数は,w を長方形の幅,h を長方形の高さと見なして,
その長方形の面積を計算する。ただし,w 又はh が負の値の場合は,
長方形の面積はゼロとすることにする。
関数を定義した上で,次のようなプログラム(main 関数)を作成しなさい。

(1) 四つの実数値width1, height1, width2, height2 を読み込む
(一つ目の長方形の幅,一つ目の長方形の高さ,二つ目の長方形の幅,二つ目の長方形の高さを意味する)。
二つの長方形の面積を出力し,さらに,一つ目の長方形と,
二つ目の長方形とどちらが大きいのか,又は同じ大きさなのかを出力しなさい。

[3] 環境
 [3.1] OS:Win
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C言語

度々すみません。
よろしくお願いします。
386デフォルトの名無しさん:2008/11/25(火) 00:01:00
#include <stdio.h>
#include <limits.h>
int min_intarray(int data[], int n)
{
 int i;
 int max = INT_MIN;
 for (i = 0; i < n; i++)
 {
  if (max < data[i])
   max = data[i];
 }
 return max;
}
void print_intarray(int data[], int n)
{
 int i;
 for (i = 0; i < n; i++)
 {
  printf("%d ", data[i]);
 }
 printf("\n");
}


>>383
全角空白インデント注意
申し訳ないがVC++は無いので動作未確認超適当
あとxyzって何?
387デフォルトの名無しさん:2008/11/25(火) 00:03:20
388デフォルトの名無しさん:2008/11/25(火) 00:06:47
なんだ既出かよ
しかも最大と最小間違えて解答してる俺バロスwwww
orz
389デフォルトの名無しさん:2008/11/25(火) 00:07:42
>>381
当方の環境は cygwin/WindowsXP, 処理系は 3.4.4 です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8100.txt
390デフォルトの名無しさん:2008/11/25(火) 00:09:46
【質問テンプレ】
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):http://www.jpdo.com/link/1/img/7024.jpg
                  http://www.jpdo.com/link/1/img/7025.jpg
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 11月25日 20時
[5] その他の制限: 画像のとおりです。

問題ファイルが画像ですが、よろしくお願いします。
391デフォルトの名無しさん:2008/11/25(火) 00:13:33
>>390
第八位まで正しいかの確認は真の値との比較でかまわないか?
392デフォルトの名無しさん:2008/11/25(火) 00:19:16
>>391
大丈夫です。
問1と問2は別問題として捕らえてもらってかまいません。
393デフォルトの名無しさん:2008/11/25(火) 00:39:39
[1] 授業単元:C++プログラミング
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8101.txt
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン: Visual Studio 2005
 [3.3] 言語:C++
[4] 期限: 11月25日 AM8時
[5]
英語の問題文なのですがよろしくお願い致します。
和訳は苦手なのですが載せたほうがよろしいでしょうか?
394デフォルトの名無しさん:2008/11/25(火) 00:51:47
>>393
俺は解かないけど、英語わかんないけどC言語は分かるひとがいる可能性にかけるなら
訳してみたら?w
395デフォルトの名無しさん:2008/11/25(火) 00:58:26
和訳したほうがいいと思うぞ
396デフォルトの名無しさん:2008/11/25(火) 01:09:05
>>390
すんでいます。
>>389
397デフォルトの名無しさん:2008/11/25(火) 01:12:37
どなたか>>351を。単方向リストを双方向リストに変えたいんですが・・
398デフォルトの名無しさん:2008/11/25(火) 01:29:31
399デフォルトの名無しさん:2008/11/25(火) 01:32:52
400デフォルトの名無しさん:2008/11/25(火) 01:43:38
>>393
もう出ちゃったけど、一応解いたからうp
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8104.cpp
ちゃんと問題読み取れてるか分かんねー
401デフォルトの名無しさん:2008/11/25(火) 01:46:23
>>386
ありがとうございます
助かりました!

>>387
すみません…次からは確認します
ありがとうございました!
402デフォルトの名無しさん:2008/11/25(火) 02:13:09
>>397
単方向ができるなら、双方向もできるだろ。
↓こんな感じで次prevにアドレス放り込めるから、あとはnextを扱う時と同じ感覚で操作すれば良いよ。

AddressList *AddList=(任意のアドレスリストへのポインタ);
AddList->next->prev=AddList;

ちなみに消す場合は、

AddressList *AddList=(消されるアドレスリストへのポインタ)
AddList->prev->next=AddList->next;
AddList->next->prev=AddList->prev;

として自分をリストから外せばよい。
追加の場合は逆に前後のnextとprevを自分のnextとprevに代入した後、
前後のnextとprevを自分のアドレスで上書きすれば良い。

あとはがんばれ
403デフォルトの名無しさん:2008/11/25(火) 03:00:24
すみません単方向のほうも自信が無いのでうまくできません。
>>351のプログラムを実際に双方向に変更したソースを知りたいのですがわkりませんかね。
404デフォルトの名無しさん:2008/11/25(火) 04:07:59
<<398
返信遅れてすいません。ありがとうございました。
本当に助かりました。
<<400
返信遅れすいません。わざわざありがとうございます。
お手数おかけしました。
405デフォルトの名無しさん:2008/11/25(火) 04:38:26
変な言い訳せずに単方向も自分で作ったものではないので分かりませんって言えばいいのに
406デフォルトの名無しさん:2008/11/25(火) 08:33:17
>>399
ありがとうございます!
助かりました!
407デフォルトの名無しさん:2008/11/25(火) 08:43:55
>>138
>>139
期限が迫ってるのでお願いします
できる限り元のプログラムを基に作成してください
408デフォルトの名無しさん:2008/11/25(火) 10:34:54
>>397
普通のテキストデータならまだしもなんだってバイナリデータのサンプルよこすんだYO!
バイナリデータ用意するのに大半を費やした。はじめからうpしる!
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8105.txt
バイナリデータ(iodata2-1)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8106.zip
409デフォルトの名無しさん:2008/11/25(火) 10:45:23
>>351
問題のtxt読んだら単方向のプログラムのinsertとdeleteがリストの
先頭のアドレス返すようになってる
番兵かポインタのポインタ使わないいけないみたい
410デフォルトの名無しさん:2008/11/25(火) 10:46:08
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): 次のようなプログラムを作りなさい。

二つの文字列を入力する。
入力する文字列は小文字アルファベットのみの,最大長20と仮定してよい。
入力した二つの文字列のうちどちらが長いか、また辞書順でどちらが先なのかを出力しなさい。
[3] 環境
 [3.1] OS:Win
 [3.2] コンパイラ:VisualC++6.0
 [3.3] 言語 :C
[4]期限:特になし

考えているうちにどんどんわからなくなってきました…
良ければよろしくお願いします。
411デフォルトの名無しさん:2008/11/25(火) 10:46:33
>>138
#include <stdio.h>
int main(void) {
int i, a_jisu, b_jisu, c_jisu;
double a[50], b[50], c[50];
for(i = 0; i < 50; i++) a[i] = b[i] = c[i] = 0.0;
printf("多項式Aの次数: ");
scanf("%d", &a_jisu);
for(i = a_jisu; i >= 0; i--) {
printf("多項式Aの%d次の係数: ", i);
scanf("%lf", &a[i]);
}
printf("多項式Bの次数: ");
scanf("%d", &b_jisu);
for(i = b_jisu; i >= 0; i--) {
printf("多項式Bの%d次の係数: ", i);
scanf("%lf", &b[i]);
}
printf("A + B = ");
if (a_jisu > b_jisu) c_jisu = a_jisu;
else c_jisu = b_jisu;
for(i = c_jisu; i >= 0; i--) c[i] = a[i] + b[i];
for(i = c_jisu; i > 0; i--) printf("%lg x^%d + ", c[i], i);
printf("%lg\n", c[0]);
return 0;
}
412デフォルトの名無しさん:2008/11/25(火) 10:55:23
>>410
#include <stdio.h>
#include <string.h>
int main(void) {
char a[21], b[21];
int alen, blen, cmp;
printf("文字列A: ");
scanf("%20s", a);
printf("文字列B: ");
scanf("%20s", b);
alen = strlen(a); blen = strlen(b);
if (alen > blen) printf("Aの方が長い\n");
else if (blen > alen) printf("Bの方が長い\n");
else printf("同じ長さ\n");
cmp = strcmp(a, b);
if (cmp < 0) printf("辞書順ではAの方が先\n");
else if (cmp > 0) printf("辞書順ではBの方が先\n");
else printf("同じ文字列です\n");
return 0;
}
413デフォルトの名無しさん:2008/11/25(火) 11:15:08
>>408ありがとうございます。面倒かけたみたいですみません。
414デフォルトの名無しさん:2008/11/25(火) 11:22:29
>>411
どうもありがとうございました
415 ◆obaRHR1OMI :2008/11/25(火) 13:26:02
[1] 授業単元:アルゴリズム
[2] 問題文:整数を標準入力から次々と入力し,入力が尽きたら,入力と逆順に出力するプログラムを書け。
ただし、以下の方法で実装すること
1. 配列をスタックとして使って実装せよ。
2. 単方向線形リストをスタックとして使って実装せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語:C
[4] 期限: 無期限
[5] その他の制限:なし

答えは長いと思うのでヒントを下さい!
struct cell {
struct cell *next;
int data;
};

struct tlist {
struct cell *head, *tail;
}
を使えばいいんですよね…?
416デフォルトの名無しさん:2008/11/25(火) 13:33:36
>>415
大学?専門?
417 ◆obaRHR1OMI :2008/11/25(火) 13:52:40
>>416
大学です
418デフォルトの名無しさん:2008/11/25(火) 14:22:11
>>415 [2].1 配列をスタックバージョン
#include<stdio.h>
int main(){
int i,n,a[64];
for(i=0;i<64&&scanf("%d",&n)==1;++i)a[i]=n;
for(;i>0;)printf("%d\n",a[--i]);
}
419 ◆obaRHR1OMI :2008/11/25(火) 14:39:51
>>418
有難うございます!
できました
420 ◆obaRHR1OMI :2008/11/25(火) 15:04:38
[1] 授業単元:アルゴリズム
[2] 問題文:整数を標準入力から次々と入力し、入力が尽きたら、まず入力した整数のうち偶数だけを入力の順に出力し、
次に奇数だけを入力と逆順に出力するプログラムを書け。ただし、以下の方法で実装すること
1. 配列をスタックとして使って実装せよ。
2. 単方向線形リストをスタックとして使って実装せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語:C
[4] 期限: 無期限
[5] その他の制限:なし

>>415です
もう訳が分からなくなりました
421 ◆obaRHR1OMI :2008/11/25(火) 15:06:45
>>420
誤投
スタックとキューを使うそうです
422381:2008/11/25(火) 15:17:08
>>389
ありがとうございます。
ただ、関数はまだ習ってないんです…
423デフォルトの名無しさん:2008/11/25(火) 17:37:20
[1] 授業単元: C言語
[2] 問題文 ★(1),(2)のみでも大丈夫です。
 (1) "2進法"⇔"10進法"変換プログラムをつくる
  例【10進法モード】 54(10) → 110110(2)
   【2進法モード】 1011(2) → 11(10)
 (2) "16進法⇔"10進法"変換プログラムをつくる
 (3) "x進法⇔"10進法"変換プログラムをつくる
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual Studio .NET
 [3.3] 言語: C
[4] 期限: 11/27
[5] その他の制限
 ・【printf,scanf,if,while,配列】以外は使用しない(forなども×)
 ・void main() で開始
宜しくお願い致します。
424デフォルトの名無しさん:2008/11/25(火) 19:31:04
[[1] 情報処理
[2] 次に書き込みます
[3] 環境
 [3.1]Windows
 [3.2] Visual Studio
 [3.3] C言語
[4] 11/26〜27
[5] printf,scanf,if,while,for,自作関数、配列は大丈夫です。ほか上級的なことさえなければたぶん 。
たくさんあってお手上げ状態です・・・
425デフォルトの名無しさん:2008/11/25(火) 19:33:20
1.
値を-20 から20 まで1 刻みで変化し、各値の10 進数、16 進数、8 進数、2 進数を表示しなさい。
2 進数の表示は以下のサブ関数を参考にします。プログラムと結果を提出します。
void sori(int a)
{ int i,wc;
for ( i=31; i>=0; i-- ) {
wc=(a>>i ) & 0x01;
if ( i%4==3 ) printf(" ");
printf("%1d",wc);
}
printf("\n");
return;
}
2.
以下の処理はmain 関数、サブ関数で作成します。プログラムと結果を提出します。
@.数値(n)を1 つ入力し、各桁の和を求めなさい。入力、処理は繰り返す。入力した値も表示する
11111→5
123456→21
12121212→12
A.数値(n)を反転した値を表示しなさい。
11111→11111
123456→654321
12121212→21212121
426デフォルトの名無しさん:2008/11/25(火) 19:35:02
3.
2 つの整数値 m、n を入力する。
入力は繰り返し、m=n=0 の時、処理を終了する。
入力した整数を、m≦n になるように処理し、その値を元に
m+(m+1)+ (m+2)+ (m+3)+ (m+4)+ (m+5)+ (m+6)+ (m+7)+・・・・・・n=?を求め表示する。
4.
2次方程式ax2+bx+c=0 の解を求めるプログラムを作成しなさい。a、b、c の値を入力する
計算結果は必ず5 種類表示すること。プログラムと結果を提出します。入力した値も表示します。
a=b=c=0 の場合、処理を終了する。
a=b=0、c≠0 の場合は、「不能」と表示する。
a=0、b≠0 の場合は、「一次方程式」と解を表示する
判別式がD<0 の場合、「虚解」と表示する。
427デフォルトの名無しさん:2008/11/25(火) 19:37:32
5.
2つの実数値xとyの差の絶対値を計算して結果を返す関数 sabun(x, y) を作成し、
main 関数から呼び出すプログラムを作る。なお、関数sabunでは、実数値x
とyを引数とし、その差の絶対値を戻り値として返す。また、実数値xとyは、main
関数中でキーボードから読み込む
6.
入力された文字がアルファベット大文字ならば小文字に、小文字ならば大文字に変換するプログラムを作成する。
-大文字:0x41(A)〜0x5A(Z)
-小文字:0x61(a)〜0x7A(z)
・それぞれの文字コードの差が一定な事を利用する
428デフォルトの名無しさん:2008/11/25(火) 19:39:29
4までです

5、6は知りません
429デフォルトの名無しさん:2008/11/25(火) 19:49:19
3、4も違います
1、2までです
430デフォルトの名無しさん:2008/11/25(火) 19:55:39
1,2,3,4です!
431デフォルトの名無しさん:2008/11/25(火) 19:56:10
1、2も違います
0までです
432デフォルトの名無しさん:2008/11/25(火) 21:08:32
[1] 授業単元:プログラミング演習(文字列とstrtok)
[2] 問題文(含コード&リンク):

int main(void){
char p[] = "ABCD.EF.GHIJ";
char *tp;
tpok = strtok( str, " ." );
puts(tpok);
while (tpok != NULL){
tpok = strtok(NULL," .");
if (tpok != NULL) puts(tpok);
}
return 0;
}
-----------------------------------
このプログラムは与えられた文字列を" . "ごとに
分割して表示するプログラムである。

strtokは第1引数に文字列定数を渡すとエラーが発生する。
char p[]
を char *p
にして" . "で分割するには以下のプログラムをどう書き換えたらいいか。
書き換えられない場合はその理由を述べよ。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年11月26日12:00まで
[5] その他の制限: strtokは必ず使うこと

433デフォルトの名無しさん:2008/11/25(火) 21:14:02
434デフォルトの名無しさん:2008/11/25(火) 21:44:25
>>415
単方向線形リスト
#include<stdio.h>
#include<stdlib.h>
struct cell {
struct cell *next;
int data;
};
int main() {
struct cell *head = NULL, *t;
int n;
while (scanf("%d", &n) == 1) {
t = (struct cell*)malloc(sizeof(struct cell));
t->data = n;
t->next = head;
head = t;
}
while (head) {
t = head;
printf("%d\n", t->data);
head = t->next;
free(t);
}
return 0;
}
435デフォルトの名無しさん:2008/11/25(火) 21:57:59
>>424の1
#include<stdio.h>
void sori(int a)
{
int i,wc;
for ( i=31; i>=0; i-- ) {
wc=(a>>i ) & 0x01;
if ( i%4==3 ) printf(" ");
printf("%1d",wc);
}
return;
}
int main()
{
int i;
for (i = -20; i <= 20; i ++)
{
printf("%3d = %08Xh = %011oo = ", i, i, i);
sori(i);
printf("b\n");
}
return 0;
}
436デフォルトの名無しさん:2008/11/25(火) 22:04:17
>>424の2
#include<stdio.h>
int sum_of_digits(int n) {
int s;
for (s = 0; n; n /= 10) s += n%10;
return s;
}
int reverse_digits(int n) {
int r;
for (r = 0; n; n /= 10) r = r*10 + n%10;
return r;
}
int main() {
int n;
while (scanf("%d", &n) == 1) {
printf("%d sum=%d reverse=%d\n", n, sum_of_digits(n), reverse_digits(n));
}
return 0;
}
437デフォルトの名無しさん:2008/11/25(火) 22:14:15
>>424の3
#include<stdio.h>
void disp(int m, int n) {
printf("m=%d, n=%d, mからnまでの和は%d\n", m, n, (n+m)*(n-m+1)/2);
}
int main() {
int m, n;
while (1) {
printf("m="); scanf("%d", &m);
printf("n="); scanf("%d", &n);
if (m==0 && n==0) break;
if (m <= n) disp(m, n);
else printf("mとnを入れ替えますよ。\n"), disp(n, m);
}
return 0;
}
438デフォルトの名無しさん:2008/11/25(火) 22:22:21
[1] 授業単元: オートマトンと言語理論
[2] 問題文(含コード&リンク): http://www3.uploda.org/uporg1811504.pdf.html
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年12月20日23時59分まで
[5] その他の制限: 大学でやっている程度で、効率よくやる方法があればお願いしたいです。
439デフォルトの名無しさん:2008/11/25(火) 22:30:15
>>424の4
#include<stdio.h>
#include<math.h>
int main() {
double a, b, c, D;
while (1) {
printf("a="); scanf("%lf", &a);
printf("b="); scanf("%lf", &b);
printf("c="); scanf("%lf", &c);
if (a==0 && b==0 && c==0) break;
printf("%gx^2%+gx%+g=0\n", a, b, c);
if (a==0 && b==0) printf("不能\n");
else if (a==0) printf("一次方程式\nx=%g\n", -c/b);
else if ((D = b*b-4*a*c) < 0) printf("虚解\n");
else printf("x=%g, %g\n", (-b+sqrt(D))/(2*a), (-b-sqrt(D))/(2*a));
printf("\n");
}
return 0;
}
440デフォルトの名無しさん:2008/11/25(火) 22:33:40
>>424の5
#include<stdio.h>
#include<math.h>
double sabun(double x, double y) {
return fabs(x-y);
}
int main() {
double x, y;
printf("x="); scanf("%lf", &x);
printf("y="); scanf("%lf", &y);
printf("%g\n", sabun(x, y));
return 0;
}
441デフォルトの名無しさん:2008/11/25(火) 22:36:15
>>424の6
#include<stdio.h>
#include<ctype.h>
char flip_case(char c) {
if (isupper(c)) return tolower(c);
if (islower(c)) return toupper(c);
return c;
}
int main() {
char c;
scanf("%c", &c);
printf("%c\n", flip_case(c));
return 0;
}
442381:2008/11/25(火) 22:51:46
>>38>>389を組み合わせて作ったんですが、
Nの算出の所がうまくいきません。
どこを直せばいいのでしょうか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8108.txt
443デフォルトの名無しさん:2008/11/25(火) 22:53:15
>>426
> 2次方程式ax2+bx+c=0 の解を求めるプログラムを作成しなさい
って問題で、a=0のときを考慮するのは、問題として不適切。
本来なら、条件として a≠0が必要。どんな学校だ?
444デフォルトの名無しさん:2008/11/25(火) 22:56:02
>>443
a に 0が入力されたら・・・・とでも読み替えといてください
445デフォルトの名無しさん:2008/11/25(火) 23:12:18
質問が長かったのでこちらに書きました。よろしくお願いします。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
446デフォルトの名無しさん:2008/11/25(火) 23:15:00
>>442
sum2 += 1/(i*i);

sum2 += 1/((double)i*i);
447デフォルトの名無しさん:2008/11/25(火) 23:32:45
424ですがありがとうございました!

5と6は嵐なんですいません

本当に助かりました!
448デフォルトの名無しさん:2008/11/26(水) 00:00:07
[1] 授業単元: ネットワークシステム
[2] 問題文(含コード&リンク):
CRCを計算して符号に付加する関数crcを作成せよ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8110.txt
[3] 環境
 [3.1] OS: (Windows/Linux/等々)  WindowsXP
 [3.2] コンパイラ名とバージョン:Microsoft Visual C++ 2005
 [3.3] 言語: C
[4] 期限: 11/28
[5] その他の制限: 問題文に記載
よろしくお願いします
449デフォルトの名無しさん:2008/11/26(水) 00:12:03
>>445
こちらってどちら?
もしかしてロダで単発スレたてたやつ?
450デフォルトの名無しさん:2008/11/26(水) 00:16:51
>>449

そうです。不適切でしたら申し訳ございません。
451デフォルトの名無しさん:2008/11/26(水) 00:22:43
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
トランプの束を正確に2等分し、それぞれの束を1枚ずつ完全に交互に噛み合わせて混ぜる
ことを、パーフェクト・シャッフルと呼ぶ。
ジョーカーを除いた52枚のトランプの束を何回かパーフェクト・シャッフルすると、元
の並びに戻ることが知られている。何回で元に戻るかを求めるプログラムを作成せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C/C++どちらでも可
[4] 期限: 無期限
[5] その他の制限: 特にありません。
よろしくお願いします。
452デフォルトの名無しさん:2008/11/26(水) 01:19:24
>>448           _ ,. -‐ 'ニ丶、
       . -‐ ´  ` ´ ヽ \ \
     ./ ,    ,  ,    、 、 、  .ヽ
    ./ /, '/ ./ i | .l l ! .i ヽヽ l.
    i /〃 .i {_|..{ |l | ‐l-l、! i i l. l
    !' .{i ! .! !'N_ヽ ! .ハ'_L.l_|ソ|' ノ l. |
     ! l { .lヽハli; `´` {'f::iヽレ | r、! l
        >ゝヽ,! lt} 、  l,t:ソ/,' .l |ソ.|  !   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        l { l !  ‐    ,' / !ノ  !  l < crc関数の戻り値は11010110111011じゃない?
         !,|ヽL.|.i 、  _. i_.レ !' | |  }  \__________
       `ゝ`| | |.`l ー‐ '.ノ/ .ノl l ノノ
          ! ! .レ'7ー=ー// /ヽ,__l_∠.._
         ,!. ,' .ノ { ``´// /  \< .  〉
         /,' ,' /  l.  // /__...- ニヽ.  `/
          〉/./ /ヽ.、 |/// /=‐ ̄, ' `}>'、
       〈/ /〃   `ソ// ,'  ./     |ヽ\\
       / /〃  o/.i. l {   / i   i |ヽヽ.\\
      { { {{    i .lL|__| .〈  .l   l |.} }ヽr‐〜'

453デフォルトの名無しさん:2008/11/26(水) 01:21:34
>>451
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8111.c
前半と後半に分けて、もう1つの配列に交互に先頭から入れてみた。
52枚のカードを0〜51の数字に置き換えて表現。
454デフォルトの名無しさん:2008/11/26(水) 01:59:42
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8112.txt
実行したら、計算結果:t= 50.000の時、x= 1.659,y= 0.771,v_x= -0.421v_y= 0.407になるように変更して下さい。
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (gcc)
 [3.3] 言語: (C)
[4] 期限: 無期限
455デフォルトの名無しさん:2008/11/26(水) 02:09:24
こいつぁすげぇ・・・
456デフォルトの名無しさん:2008/11/26(水) 02:25:42
大してすげくねーYO!
457デフォルトの名無しさん:2008/11/26(水) 02:30:02
>>454
     ____________
    ヾミ || || || || || || || ,l,,l,,l 川〃彡|
     V~~''-山┴''''""~   ヾニニ彡|       回答する・・・・・・!
     / 二ー―''二      ヾニニ┤       回答するが・・・
    <'-.,   ̄ ̄     _,,,..-‐、 〉ニニ|       今回 まだ その時と場所の
   /"''-ニ,‐l   l`__ニ-‐'''""` /ニ二|       指定まではしていない
   | ===、!  `=====、  l =lべ=|
.   | `ー゚‐'/   `ー‐゚―'   l.=lへ|~|       そのことを
    |`ー‐/    `ー――  H<,〉|=|       どうか諸君らも
    |  /    、          l|__ノー|       思い出していただきたい
.   | /`ー ~ ′   \   .|ヾ.ニ|ヽ
    |l 下王l王l王l王lヲ|   | ヾ_,| \     つまり・・・・
.     |    ≡         |   `l   \__   我々がその気になれば
    !、           _,,..-'′ /l     | ~'''  回答の受け渡しは
‐''" ̄| `iー-..,,,_,,,,,....-‐'''"    /  |      |    10年後 20年後ということも
 -―|  |\          /    |      |   可能だろう・・・・・・・・・・ということ・・・・!
    |   |  \      /      |      |

458454:2008/11/26(水) 02:36:00
>>457
できれば今すぐお願いします。
459デフォルトの名無しさん:2008/11/26(水) 02:36:21
シンプソン積分かこれ?
460454:2008/11/26(水) 02:39:30
>>459
違いますよ
461デフォルトの名無しさん:2008/11/26(水) 02:46:08
せめて変数と物理量の対応だけでも教えれ
462デフォルトの名無しさん:2008/11/26(水) 02:47:56
>>454
お前まだ諦めてなかったんだな
463454:2008/11/26(水) 02:49:01
それが俺もよく分かんないすよ。途中のプログラムを渡されただけなんで。
464454:2008/11/26(水) 02:50:16
>>462
よくわかりましたね。
465デフォルトの名無しさん:2008/11/26(水) 02:51:06
>>463
大本の問題がなにかを聞いてくるのが一番早いと思うよ。
466454:2008/11/26(水) 02:53:31
>>465
分かりました。もう一度聞いてみます。
467デフォルトの名無しさん:2008/11/26(水) 03:22:09
惑星の楕円軌道の計算だと思うんだけどな
468454:2008/11/26(水) 03:38:00
>>467
そんなかんじです
469デフォルトの名無しさん:2008/11/26(水) 06:51:21
>>443
いいえ。a == 0 のときなども含めて「二次方程式を解く」と表現して問題はありません。昔は高校の数Tではそうだったんですが。
これが、ゆ と り 教 育なんですね。驚きました。
470デフォルトの名無しさん:2008/11/26(水) 06:56:30
>>469
バカですか?それを2次方程式として扱うこと事態が間違っているんだが?w
二”次”が読めませんか?a=0のときの条件も考慮したプログラムとして
問題は出ているが、x^2の係数が0の場合2次方程式とは言わないのが一般的。

どこの低レベルの高校でちゅかぁ〜?都道府県名と市町村名を述べよw
471デフォルトの名無しさん:2008/11/26(水) 06:58:34
ttp://ja.wikipedia.org/wiki/%E4%BA%8C%E6%AC%A1%E6%96%B9%E7%A8%8B%E5%BC%8F
なお、例の2次方程式の解の公式は、aの係数が0だった場合、成り立たないことくらい
分母の2aで一目瞭然ですね。0での除算は考えない、さらに、あの解の公式を導く過程でも
x^2が0でない、存在していることが前提で導かれており、平方根も出ていますからねw
469 名前:デフォルトの名無しさん 投稿日:2008/11/26(水) 06:51:21
>>443
いいえ。a == 0 のときなども含めて「二次方程式を解く」と表現して問題はありません。昔は高校の数Tではそうだったんですが。
これが、ゆ と り 教 育なんですね。驚きました。

> 昔は高校の数Tでは
いつの時代なんだろう・・・遡っても、たぶんそれが不適切だったという説明で終わるだろうね・・・
これが  時  代  遅  れ  なんですね。近年の科学技術の発展を考慮したら、
別に何十年も前の教育なんて、そんなもんでも驚きませんが、現代においては
a=0の場合、敢えて説明をつけるでしょうね・・・
473デフォルトの名無しさん:2008/11/26(水) 07:10:18
>>426には
> a=0、b≠0 の場合は、「一次方程式」と解を表示する
と、敢えて一次方程式と述べているしね。それなのに、a=0でも

>>469
> いいえ。a == 0 のときなども含めて「二次方程式を解く」と表現して問題はありません。

なんて敢えて間違えたことを指摘して、相手を罵倒するなんて、
精神レベルも低そうだな、こいつ・・・
さらに追い討ち。判別式の中身はルートで囲まれている。すなわち・・・
これまた、一次では使われるものではないね。条件で判定して
敢えて一次の場合は二次方程式の解の公式などを使わずに導くが、
まぁ、なんだ、x^2の係数が0でも二次方程式を解くなんて、口が裂けても言えませんw

そういえば、かなり前にも、このスレでa=0でも成り立たせるために、
どうとか訳の分からん持論を展開した奴がいたが、解の方程式の分母で
やはり見事に論破されてたな。そう、x^2の係数が0では2次方程式としては
成り立たないんだよw
そういう場合、どうしてx^2も考慮した数式で演算するのだろうか?

プログラミングに於いて、適切に条件を指定するのは重要。
なのに、例外があっても合わないやり方で押し通そうなんて、
エラーやバグを態と導くおつもりですか?
474デフォルトの名無しさん:2008/11/26(水) 07:14:23
おまいら一体何と戦っているんだ・・・
数学的に正しいかどうかとかは、そういうスレでやれ
仕様を満たしたうえでバグがあるなら、そう書けばいいし
475デフォルトの名無しさん:2008/11/26(水) 07:31:30
2次方程式でググってきな。a≠0が条件に入るよ。
x^2の係数が0である場合、xがどの値をとっても
bx+c=0にしかならないだろ。これを2次方程式とは言わないの。
あと、a≠0であれば、b=0 , c=0 でもax^2だけでも2次方程式は成り立つの、分かる?
本来重要とされる係数を無視しないでくれ。
476デフォルトの名無しさん:2008/11/26(水) 07:34:46
これで、もしも課題がa==0の時バグがある。
これを修正せよだったりしたら涙目
477デフォルトの名無しさん:2008/11/26(水) 07:55:15
[1] 授業単元:計算機プログラミングU
[2] 問題文(含コード&リンク):
  関数mainにおいて,下記のような文字列を定義する.
   char *name[] = {"Wada", "Kanto", "Matsuda", "Kudo", "Sato", "Iizumi", "Sugawara", NULL};
  上記の文字列をアルファベット順に並べ替える関数を作成し,その結果を表示するプログラムを作成せよ.

  ヒント:文字列の比較のために関数strcmpを使用する.次の2行をそれぞれ適切な場所に入れること。
   #include <string.h>
   int strcmp(const char *str1,const char *str2);
  【戻り値】str1 > str2 ならば正値(1)
       str1 = str2 ならば0
       str1 < str2 ならば負値(-1)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc(できればVisual C++でも動くように)
 [3.3] 言語:C
[4] 期限:2008年11月27日10:30まで
[5] その他の制限:まだ初歩の段階です。やっとポインタの基礎を習い終わったところです。
478デフォルトの名無しさん:2008/11/26(水) 08:01:27
なんかnameに並んでるのが教授陣の名字に見えてしょうがないんだが。
479デフォルトの名無しさん:2008/11/26(水) 08:13:16
>>443
外部から入力される値をチェックするのは基本だろ
a=0は不正な入力なのでエラーを表示して終了で問題ない
480デフォルトの名無しさん:2008/11/26(水) 08:46:07
>>477
#include <string.h>
#include <stdio.h>
void sortName(char** name){
char** pSrc = name;
while(*(pSrc+1) != NULL){
char** pDst = pSrc + 1;
while(*pDst != NULL){
if(strcmp(*pSrc, *pDst) > 0){
char* tmp = *pSrc;
*pSrc = *pDst;
*pDst = tmp;}
++pDst;}
++pSrc;}}
int main(void){
char* name[] = {"Wada", "Kanto", "Matsuda", "Kudo", "Sato", "Iizumi", "Sugawara", NULL}; char** ptr = name;
sortName(name);
while(*ptr != NULL){
printf("%s\n", *ptr++);}
return 0;}
481デフォルトの名無しさん:2008/11/26(水) 09:34:14
[1] 授業単元: C言語
[2] 問題文 以下のプログラムを配列を用いない形で書く(iと直前のi-1のみを利用して
計算するようにする。)
#include <stdio.h>
#define MAX 100
int main(void)
{
int a,b,i,n;
int an[MAX],bn[MAX];
printf("a の初期値を入力 > ");
scanf("%d",&a);
printf("b の初期値を入力 > ");
scanf("%d",&b);
printf("項数 n を入力 > ");
scanf("%d",&n);
for(i=1,an[0]=a,bn[0]=b; i<n; i++) {
an[i]=2*an[i-1]-bn[i-1];
bn[i]=2*bn[i-1]-an[i-1];
}
for(i=0; i<n; i++) printf("%d ",an[i]);
puts("");
for(i=0; i<n; i++) printf("%d ",bn[i]);
return 0;
}
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:
[5] その他の制限 よろしくおねがいします。
482デフォルトの名無しさん:2008/11/26(水) 09:41:06
計算幾何学的には二次の係数が0の場合も、二次方程式と呼ぶ。
数学的には、二次以上の係数が0の場合、一次以下の方程式と呼ぶ。
ここは計算機科学のスレだと思うが....
483デフォルトの名無しさん:2008/11/26(水) 09:56:38
勝手に2次方程式の定義を変えないで欲しいんだが?>時代遅れ
484デフォルトの名無しさん:2008/11/26(水) 10:01:21
口から糞を垂れる暇があったらさっさと宿題かたづけろや。
485デフォルトの名無しさん:2008/11/26(水) 10:37:50
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
strlen(), strcmp()と同じ動きをする関数mystrlen(), mystrcmp()を、ポインタを使って作成せよ。
作成したら→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8113.c
のmain()関数を使って動作を検証。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 今日の15時まで
[5] その他の制限: ポインタを使って作成した関数で↑のリンクのプログラムを書き直して
もらえると助かります。

よろしくお願いします
486デフォルトの名無しさん:2008/11/26(水) 10:40:14
>>481
#include <stdio.h>
#define MAX 100
int main(void) {
int a, b, a_next, b_next, i, n;
printf("a の初期値を入力 > ");
scanf("%d", &a);
printf("b の初期値を入力 > ");
scanf("%d", &b);
printf("項数 n を入力 > ");
scanf("%d", &n);
printf("%d ", a);
for(i = 1; i < n; i++) {
a_next = 2 * a - b;
b_next = 2 * b - a;
a = a_next;
b = b_next;
printf("%d ", a);
}
puts("");
printf("%d ", b);
for(i = 1; i < n; i++) {
a_next = 2 * a - b;
b_next = 2 * b - a;
a = a_next;
b = b_next;
printf("%d ", b);
}
return 0;
}
487デフォルトの名無しさん:2008/11/26(水) 10:47:08
>>485
size_t mystrlen(const char *s) {
size_t len = 0;
while(*s++) len++;
return len;
}
int mystrcmp(const char *s1, const char *s2) {
while(*s1 && *s1 == *s2) {
s1++; s2++;
}
return *s1 - *s2;
}
488デフォルトの名無しさん:2008/11/26(水) 11:01:27
>>481
表示について元の形を保つのは無意味と思ったので勝手に書き換えてみた

#include <stdio.h>
int main(void)
{
int i, n, an, bn;
printf("a の初期値を入力 > ");
scanf("%d",&an);
printf("b の初期値を入力 > ");
scanf("%d",&bn);
printf("項数 n を入力 > ");
scanf("%d",&n);
printf("n=0, a=%d, b=%d\n", an, bn);
for(i=1; i<n; i++)
{
int an_ = an;
int bn_ = bn;
an = 2 * an_ - bn_;
bn = 2 * bn_ - an_;
printf("n=%d, a=%d, b=%d\n", i, an, bn);
}
return 0;
}
489デフォルトの名無しさん:2008/11/26(水) 11:08:30
>>486さん 488さん
ありがとうございます。
490デフォルトの名無しさん:2008/11/26(水) 11:40:00
そりゃ、まぁ、男も女も人間だって言ったら、キリが無い罠。
さらに広義に、雄、雌をすべての生物を対象にして定義したら
雄なのに子供を産む種もあるみたいな。それを言い出したら
係数が0ということで、3次、4次として1次の係数が0以外の
方程式でも、何とでも言える罠。そういうことではなく、
解の公式はa≠0でなければ、導けないので、矛盾が生じるため
条件や定義をはっきりさせているわけで。
491デフォルトの名無しさん:2008/11/26(水) 11:49:57
条件も定義もはっきりさせないと、解は無限に存在するよ。
さて、導く必要があるんだろうか?思いついたものを言えば、それが答えさ。
実に詰まらん。プログラミングの意味すらなくなる。
492485:2008/11/26(水) 12:20:07
>>487
ありがとうございます。
size-t型はまだ習ってないので、良ろしければもう少し単純なプログラムでお願いできますか?
初めの制限に書いておくべきでしたが、ポインタも基礎、配列や仮引数としての
ポインタ、多重間接参照を習ったあたりでした。申し訳ないです。
493デフォルトの名無しさん:2008/11/26(水) 12:22:49
>>492
size_tは全てintに差し替えとけ
とりあえずそれで動くから
494デフォルトの名無しさん:2008/11/26(水) 12:23:43

[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8114.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年11月27日23:59
[5] その他の制限:

よろしくお願いします
495デフォルトの名無しさん:2008/11/26(水) 13:14:49
【文化】 「"しんにょう"の点は1つだ!」「いや2つだ!」 議論白熱、結論持ち越し…文化審漢字小委
http://mamono.2ch.net/test/read.cgi/newsplus/1227662275/

この様に、あれこれ議論してたらしょんねぇべ。とりわけ、条件を指定して
そういう場合はこうだと導けられれば良いだがや。な?
a=0でも2次方程式っつーなら、b=0の場合、c=0でなきゃ成り立たないどころか
そもそも、何について解を求める式だったか、忘れてんべw
んだがや、c=0っちゅーならbx=0、すわなつbがなんであろうがxは0だぎゃ。
ほんだら、c=0、b=0、a=0の場合、xはどんな値であろうが成り立つんべ。
だから無限さ存在すんだと。おかしいべ?そもそも、=0になるときのxを求めるのが
本題だったんでねが?
496デフォルトの名無しさん:2008/11/26(水) 13:15:07
>>480ヒントを使うと無理なのでしょうか?
497デフォルトの名無しさん:2008/11/26(水) 13:16:35
>>493
わかりました。どうもありがとうございました!
498デフォルトの名無しさん:2008/11/26(水) 13:17:28
>>496
むしろヒントが謎
499デフォルトの名無しさん:2008/11/26(水) 13:19:28
いづのまにかぁ、xがどんな値をとっても、成り立つa,b,cさ求めてどーすんだがや?
そうだっぺ?もちっと頭使えや、な?夕食のお買い物をしに行ったのに、
いつの間にか、手持ちのお金で買えるものは何か?なんて考えてっと、
飯が食えずに時間だけが過ぎ去るぞ?
500デフォルトの名無しさん:2008/11/26(水) 13:24:12
>>498
文字比較をするのに strcmp 使え
string.h インクルード汁 そして strcmp 呼び出せ
と読んだ
501デフォルトの名無しさん:2008/11/26(水) 14:47:14
[1] 授業単元:C言語の基礎
[2] 問題文(含コード&リンク):
 四人の学生のテストにおける得点を読み込み、その平均点を計算して
出力するプログラムを作成してください。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限:今日の六時
[5] その他の制限:
型の変換で小数点まで出るようにせよ
scanfで点数を入力する
基本的なことしか習ってません
よろしくお願いします
502デフォルトの名無しさん:2008/11/26(水) 15:26:35
#include <stdio.h>
#define NINZUU 4
int main(void)
{
int i;
int tensuu[NINZUU];
double heikin = 0;
for (i=0; i<NINZUU; i++)
{
printf("%d人目の点数= ", i+1);
scanf("%d", &tensuu[i]);
}

for (i=0; i<NINZUU; i++)
heikin += tensuu[i];
heikin /= NINZUU;

printf("平均=%f", heikin);
return 0;
}}

>>501
変数名は適当になおして。
503デフォルトの名無しさん:2008/11/26(水) 15:49:58
>>502
うわぁ・・・分からないwww
#define習ってないんです
調べたら文字列に関係するって書いてありました
確かfor文も使わなかった気がします
制限に書いとくべきでしたすいません。
キャスト?でdoubleに変換して小数点出すらしいのですが・・・
問題文そのまま乗せましたけど
点数を合計してそれを四で割って平均点だせって問題です

#include<stdio.h>

main(){
int a, b, c, d;
double sum;
scanf("%d%d%d%d", a, b, c, d);
sum = (a+b+c+d)/(double)4
printf("%d\n", sum):
504デフォルトの名無しさん:2008/11/26(水) 15:50:44
>>503
自分で考えたのがこれなんですが・・・
回答を書いてもらえるか、もしくは手直しお願いします
505デフォルトの名無しさん:2008/11/26(水) 15:53:15
>>503
printf("%d\n", sum):

printf("%f\n", sum):
にしろ
506デフォルトの名無しさん:2008/11/26(水) 15:53:30
>>504
最終行
printf("%d\n", sum):

printf("%f\n", sum):
507デフォルトの名無しさん:2008/11/26(水) 15:55:26
お。
dだと整数でしたっけ?

あとはOKですか?
なんかキャストとかカッコの入れ方で計算があわないとか教授言ってたけど・・・
これでOK?
508デフォルトの名無しさん:2008/11/26(水) 15:55:51
>>503
4をdoubleにキャストするのはなんか変
sum = (double)(a+b+c+d)/4.0;
でいいんじゃないかな
509デフォルトの名無しさん:2008/11/26(水) 15:58:20
なるほど。
>>508
了解です

#include<stdio.h>

main(){
int a, b, c, d;
double sum;
scanf("%d%d%d%d", a, b, c, d);
sum = (double)(a+b+c+d)/4
printf("%f\n", sum):

で頑張ります
長々とありがとうございました
510デフォルトの名無しさん:2008/11/26(水) 15:59:29
一応OK
a+b+c+d の演算過程で int のとり得る範囲を突破するわけでもないしね

(a+b+c+d)/(double)4
 a+b+c+d の結果は int
 次の割り算は int/double で結果はdouble (かつ演算は double/double で評価される)
511デフォルトの名無しさん:2008/11/26(水) 18:32:31
>>496
#include <string.h>
#include <stdio.h>
void sortName(char** name){
char** pSrc = name;
while(*(pSrc+1) != NULL){
char** pDst = pSrc + 1;
while(*pDst != NULL){/*
int strcmp(const char *str1,const char *str2);
*/if(strcmp(*pDst, *pDst) > 0){
char* tmp = *pSrc;
*pSrc = *pDst;
*pDst = tmp;}
++pDst;}
++pSrc;}}
int main(void){
char* name[] = {"Wada", "Kanto", "Matsuda", "Kudo", "Sato", "Iizumi", "Sugawara", NULL}; char** ptr = name;
sortName(name);
while(*ptr != NULL){
printf("%s\n", *ptr++);}
return 0;}
512デフォルトの名無しさん:2008/11/26(水) 19:15:05
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
  1 円周率 の値を近似式
π=4納{(−1)^n/(2n+1)}×{(1/2)^(2n+1)+(1/3)^(2n+1)}]  (0≦n≦100)で
を用いて小数点8ケタまで(3.14159265)正しい値を出力し、そのπを用いて

|(π^2/6)-(1/k^2)|<ε   (1≦k≦N)
この不等式を満たす最小の自然数Nを求めるプログラムを作れ。
表示は
Input the volume of error: 0.000001【Enter】
Pi is 3.14159265.
the smallest integer N is .
とする。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2008年11月29日まで
[5] その他の制限:配列、数学関数は使ってはいけない


よろしくお願いします
513デフォルトの名無しさん:2008/11/26(水) 19:53:09
>>512
すでに回答されています。
>>37 >>389
514デフォルトの名無しさん:2008/11/26(水) 20:04:05
[1] 授業単元:プログラムc
[2] 問題文(含コード&リンク):
  http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8115.c
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2008年11月28日 19時まで
[5] その他の制限:
  よろしくお願いします
515デフォルトの名無しさん:2008/11/26(水) 20:11:28
>>495 >>499
それはそのとおりやねんけど、「方程式をとく」、というのは「あたえられた式を満たす x をもとめる」っちゅうことやから、
係数が文字であたえられたら、係数がどんなばあいにはどう、どんな場合にはどう、と場合わけして的確に記述することが重要やねん。
「すべての実数が与えられた式を満たす」「与えられた式を満たす実数は存在しない」というのも立派な解なんや。
「a=0 のときは二次方程式やない」、と言い切るのは、「方程式をとく」という所作になにがもとめられているかを理解していないのとちゃうか?

今の教程は、言葉尻をとられないようにするあまり無用に親切ではあるのですが、我々理工系に何が求められているか、という観点からすると
かなり歪んだものになっています。
しかし、これは若者には罪はありません。

高等学校の教科書などは早く投げ捨てて、本物の教科書を手にとってください。
手元にあるのは、
ISBN-13: 978-4000051712
ISBN-13: 978-4000050203
です。

516デフォルトの名無しさん:2008/11/26(水) 20:25:54
言葉尻を捕らえて拡大していくと、複素空間やその他写像系まで考慮しだすはめに…

何処まで習っているか+題意はどこらへんを狙っているか は想像しづらい
明示されているもののみを対象にする以外やりようはないな <宿題スレだし
517デフォルトの名無しさん:2008/11/26(水) 20:28:13
こうなってくると出題者に聞いてそれに従えば一番簡単なんだけどね。
518デフォルトの名無しさん:2008/11/26(水) 20:37:31
[1] 授業単元:プログラムc
[2] 問題文(含コード&リンク):
  円周率πを以下の式を用いて計算するプログラムを作成しなさい
π=4×(arctan(1/2)+arctan(1/5)+arctan(1/8))
[3] 環境
 [3.1] OS:LINUX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2008年11月28日まで
[5] その他の制限:
  よろしくお願いします
519デフォルトの名無しさん:2008/11/26(水) 20:38:30
>>514
関数 getCountBetweenLimits のなかで、
int count;  ⇒  int count = 0;
int index;  ⇒  int index = 0;
numbers[index] > lowerLimit ⇒ numbers[index] >= lowerLimit
numbers[index] < upperLimit ⇒ numbers[index] <= upperLimit
あと、while 内側最後で index++;
520デフォルトの名無しさん:2008/11/26(水) 20:39:04
>>514
int getCountBetweenLimits(int numbers[], int lowerLimit, int upperLimit)
{
int count = 0;
int index = 0;
for(;numbers[index] != DataTerminator; index++)
{
if((numbers[index] >= lowerLimit) && (numbers[index] <= upperLimit))
{
count++;
}
}
return count;
}
521デフォルトの名無しさん:2008/11/26(水) 21:31:33
どなたか494お願いします
522デフォルトの名無しさん:2008/11/26(水) 22:14:23
>>521
6-1
display 関数
p = ****; ⇒ p = p->next;
insert 関数
****= n; ⇒ newnode->next = n;
****= ****; ⇒ newnode->prev = n->prev;
****= newnode; ⇒ n->prev->next = newnode;
****= newnode; ⇒ n->prev = newnode;

523デフォルトの名無しさん:2008/11/26(水) 22:19:03
>>494
6-2 なんだけど、検索の関数って、何を検索すればよいかわかる?
データが一致するものとか?
524デフォルトの名無しさん:2008/11/26(水) 22:44:56
宿題関係です。自分では合ってると思うのですが、実行すると動いてくれません。

[問題]
以下の文字列をアルファベット順に並べ替えるプログラムを作成せよ。
文字列の比較にはstrcmpを用いること。

char *name[] = {"Wada", "Kanto", "Matsuda", "Kudo", "Sato", "Iizumi", "Sugawara", NULL};

[自作のプログラム(前半)]
#include<stdio.h>
#include<string.h>

void array(char *name[]){
int i, j;
char *temp;

i = 0;
while(name[i]){
j = i + 1;
while(name[j]){
if(strcmp(name[i], name[j]) < 0){
temp = name[i];
name[i] = name[j];
name[j] = temp;
}
j++;
}
i++;
}
}
525デフォルトの名無しさん:2008/11/26(水) 22:46:05
[自作のプログラム(後半)]

int main(){
int i;

char *name[] = {"Wada", "Kanto", "Matsuda", "Kudo", "Sato", "Iizumi", "Sugawara", NULL};

array(name);

i = 0;
while(*name[i]){
printf("%s\n", *name[i]);
i++;
}

printf("OK.");

return 0;
}

526デフォルトの名無しさん:2008/11/26(水) 22:51:44
連レス本当にすみません。

自作プログラム(後半)の"OK."のprintfはチェック用ですので無視して下さい(^^;

どうか、助言のほどよろしくお願いします。
527デフォルトの名無しさん:2008/11/26(水) 22:52:32
>>525
i = 0;
while(*name[i]){
printf("%s\n", *name[i]);
i++;
}
*name[i]ではなくてname[i]だろうな、コンパイラさんちゃんと警告してあげてください。
whileではなくてforのほうがわかりやすいと思う。
qsort()使ってください。
528デフォルトの名無しさん:2008/11/26(水) 22:52:47
前半で終端チェックを name[i] と正しくやってるのに
後半では while(*name[i]) ってやってる

while(name[i]){
printf("%s\n", name[i]);

にしないと
529デフォルトの名無しさん:2008/11/26(水) 23:02:12
>>518
すでに回答されています
>>38 >>389
530デフォルトの名無しさん:2008/11/26(水) 23:02:27
>>527
教授に聞いたところ、qsort()はメッ!!っということでした(^^;

また、指摘点の修正後、while(name[i])の後ろにprintf("OK.");を追加してチェックしたところ、「OK.」が人数分表示されました。
しかし、肝心の名前は表示されません…orz
531デフォルトの名無しさん:2008/11/26(水) 23:12:16
先ほどから連レス本当に申し訳ないです(><;)

修正を重ね、以下のように表示できました。

Wada
Sugawara
Sato
Matsuda
Kudo
Kanto
Iizumi

…完全に逆ですね、わかります。
あとは調整して提出できそうです。助言して頂いた皆さん、ありがとうがざいました。
532デフォルトの名無しさん:2008/11/26(水) 23:14:53
>>514
void main(void)
は非常にまずい。
int main(void)
とか
int main()
とか
main()
とか。
533529:2008/11/26(水) 23:16:29
>>518
問題を間違えておりました。この問題はまだ未解答です。
しばしお待ちを。
534デフォルトの名無しさん:2008/11/26(水) 23:32:00
>>518
#include <math.h>
#include <stdio.h>
int main()
{
printf("pi = %16f\n", 4 * (atan(1/2.0) + atan(1/5.0) + atan(1/8.0)));
return 0;
}

C99規格でいいならこうなるな
535デフォルトの名無しさん:2008/11/26(水) 23:38:11
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク): 西暦n 年がオリンピック年か、平年かを判別する。数値がオリンピック年だったら"Olynpic year"、平
年だったら"ordinary year"と表示する。
データは次の6 つを用意し、int 型配列変数に格納しておくこと。
1984, 1990, 1993, 1996, 2001, 2004
(このデータのうち1984, 1996, 2004 がオリンピック年)
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008/10/28
[5] その他の制限: gethar()使用 <stdio.h>のみ
よろしくお願いします
536デフォルトの名無しさん:2008/11/26(水) 23:38:30
>>518
当方の環境はcygwin/WindowsXP, 処理系はgcc 3.4.4 です。過去問の焼き直しです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8116.txt
537451:2008/11/26(水) 23:53:01
>>453
途中経過も表示していただき、親切なプログラムです。
どうもありがとうございました。
538デフォルトの名無しさん:2008/11/27(木) 00:42:47
>>535
getchar() 使えってのが意味不明だけど、なんとなく使ってみた
#include <stdio.h>
int main()
{
int i, y[] = {1984, 1990, 1993, 1996, 2001, 2004};
for(i = 0; i < 6; i++){
if(y[i] % 4 == 0)
printf("%d is Olympic year", y[i]);
else
printf("%d is Ordinary year", y[i]);
getchar();
}
return 0;
}
539デフォルトの名無しさん:2008/11/27(木) 00:49:42
>>538 頭悪くてごめん
問題解きTHX
540デフォルトの名無しさん:2008/11/27(木) 01:41:54
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク): コマンドライン引数を使って、年と月を指定したときにはその年月のカレンダーを、
年だけの時はその年の12か月分のカレンダーを表示するプログラムを作りなさい。

[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 夜が明けるまで
よろしくお願いします。もしよろしければ、説明もお願いします。
541デフォルトの名無しさん:2008/11/27(木) 01:50:23
542デフォルトの名無しさん:2008/11/27(木) 01:55:42
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):最長5文字の文字列を3件入力し、char 型の配列にそれぞれ格納する。3つの文字列
を比較し、文字列が同じだったら「○」を表示し、異なっていたら「×」を表示するプログラム
6文字以上ならスルー
  [3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 朝まで
お願いします
543デフォルトの名無しさん:2008/11/27(木) 02:04:36
>>542
「6文字以上スルー」って、どういう意味?
6文字以上入力したら何も表示しない?それとも6文字以降は比較対象にしない?
544デフォルトの名無しさん:2008/11/27(木) 02:07:10
>>543 6文字以上は何も表示しない 
適当でそーりー
545デフォルトの名無しさん:2008/11/27(木) 02:14:26
>>544
#include <stdio.h>
#include <string.h>
int main()
{
char s[3][10];
printf("String:");
scanf("%s", s[0]);
if(strlen(s[0]) > 5)
return 1;
printf("String:");
scanf("%s", s[1]);
if(strlen(s[1]) > 5)
return 1;
printf("String:");
scanf("%s", s[2]);
if(strlen(s[2]) > 5)
return 1;

if(strcmp(s[0], s[1]) == 0 && strcmp(s[1], s[2]) == 0)
printf("○\n");
else
printf("×\n");
return 0;
}
546デフォルトの名無しさん:2008/11/27(木) 02:15:21
>>545 ありがと!助かった
547デフォルトの名無しさん:2008/11/27(木) 02:24:13
>>545を 2次元配列使用しないで1次元配列?を使用 return を return 0 一つのみを使用して
できませんかね? 
548デフォルトの名無しさん:2008/11/27(木) 02:25:53
>>547
      _/      ∠≠ニ二ニ≧=<´  ヘ.     ', ヘ\ヽ.      /
 _ -‐ ´/  ,   -‐´、_, '⌒`^  、 \::\ } l     ヽヘ ヽ}     /         _|_ \
   ̄ フ´,  /             丶\::V| |      Vl       ,'             |____
.  //./                   `Vヽl |      ヽ ' .     |         /|    ヽ
  / ,イ/                    Y/,       ヽ.\   |.   l       (_ノ  _ノ
  |/ /       |               ∨ヘ.      ト、 \_ |.   |
.  /     /  /  l:     /  l           ∨i    、   |  ̄   !  l       lヽ│/ /
  l│  /  イ  ,イ.    l  ト、ヽ     / | :l :|   |  l      |   ヽ_ノ   !ー┼‐ |‐┬
  | |   l_メ、」_,;./l     L  l V   ∧ /  :|/   ハ.  ト、   |          |./│ヽ l  |
  | ト.  |.____ ヽ    l´ヽ{ _⊥イ イ /   /    / l/⌒ヽ   .|  ー┼─ └── l  |
  | | ヽ | 、i┘::::i  \  | r┬┬‐┬ァ V  ,∧.   ,'  ´       |   ー┼−
  レ   ヽ!  ゝ- '   \l  i,.┘:::::iノ / ,/〉│ :| {         |    _⊥_     l   |
.      7/l/l/   、     `'ー‐ ' ∠≠r'ノ:jノ :| |         |   (__丿 ヽ    レ  |
     λ    `i`ァー-- 、  /l/l/l ∧‐'.:|:::|  ハ ',        |              l
      `、     レ'    ',     ,/| ::| :|:::| ./ ヽ_>      _|   __|_       _ノ
        ` = 、 '、    ノ  ,.イ∧'|:l.:/l:::|´            \    ._|
              `>-r  =ニi´、.,_`::: |:| { |:::l             |  .(_|
          _,.イ´ヽ.7   /  /:\;八:V:ノ                 |    ノ
       /7:::::!  ○O'´  /::::::::/ヽ.
       /  /:::::::レ'/ムヽ.  /::::::::/   ヽ.
549デフォルトの名無しさん:2008/11/27(木) 02:29:24
>>548\(^o^)/
550デフォルトの名無しさん:2008/11/27(木) 02:36:40
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク): 入力した文字に応じたプログラムの作成
【'a'or'A'】→”続行”を出力する(プログラムは終わらない) 【'b'or'B'】→プログラムを終了する 【その他】→”エラーです”を出力する


[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 今日中
よろしくお願いします。細かく解説していただければ幸いです。
551デフォルトの名無しさん:2008/11/27(木) 02:39:47
>>550
改行文字はどうする?無視したほうがいい?エラー扱いにする?
スペースも
552デフォルトの名無しさん:2008/11/27(木) 02:44:25
>>547
#include <stdio.h>
#include <string.h>
int main()
{
char s0[6], s1[6], s2[6];
scanf("%s", s0);
if(strlen(s0) <= 5){
scanf("%s", s1);
if(strlen(s1) <= 5){
scanf("%s", s2);
if(strlen(s2) <= 5){
if(strcmp(s0, s1) == 0 && strcmp(s1, s2) == 0)
printf("○\n");
else
printf("×\n");
}
}
}
return 0;
}
553デフォルトの名無しさん:2008/11/27(木) 02:45:30
>>550
#include <stdio.h>
int main()
{
int c;
while (1) {
c = getchar();
switch (c) {
case 'A': case 'a':
printf("続行\n"); /* A, aだったので終了する */
break;
case 'B': case 'b':
return 0; /* B, bだったので終了する */
break;
default:
printf("エラーです\n"); /* それら以外なのでエラーを表示 */
}
}
}
554デフォルトの名無しさん:2008/11/27(木) 02:46:04
>>552ありがと涙でた
555デフォルトの名無しさん:2008/11/27(木) 02:46:03
>>551
エラー扱いでお願いします
556デフォルトの名無しさん:2008/11/27(木) 02:49:18
>>555
>>553じゃぁこれで大丈夫だな
557デフォルトの名無しさん:2008/11/27(木) 02:50:45
>>556
ありがとうございました!
558デフォルトの名無しさん:2008/11/27(木) 02:51:31
[1] 授業単元:ソフトウェア演習B
[2] 問題文(含コード&リンク):
文字列を格納する配列へのポインタ変数textとkeyを引数に持ち、
extが示す文字列にkeyが示す文字列が出現する回数を返す関数pattern_match_num()を作成し、
これを用いて、textが示す文字列とkeyが示す文字列をプログラム中で与え、
出現回数を標準出力で表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: ?
 [3.3] 言語: C
[4] 期限: ([2008年11月27日11:00まで]
[5] その他の制限:
よろしくお願いします
559デフォルトの名無しさん:2008/11/27(木) 02:53:15
>>523
たしか、検索するのは最初にユーザが適当に数値を10個ぐらいいれて、その中から
検索したい数値があるかどうかを検索するって感じです
560デフォルトの名無しさん:2008/11/27(木) 09:44:33
>>494
6-2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8118.txt

>>559 本当にそれであってる?? 6-3, 6-4 へのつながりがよくわからない
あと、6-4 の「連続リスト」って何?つなぎリストってのはいわゆる線形リストのことだと
思うけど
あと連続リストの場合もやっぱりソートするの?
561デフォルトの名無しさん:2008/11/27(木) 11:00:34
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8119.c
↑のカレンダーの年月の指定について、月を数字だけでなく英語(Novemberなど)でも
指定できるようにせよ。また、適切でない入力がなされた場合には
その旨エラー表示し、再度入力を促すようにせよ。
( ユーザからの入力をscanf()でうけとるのではなく、gets()でいったん
文字列として受け取り、それの内容を検査するという処理が必要になる。)

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年11月29日
[5] その他の制限:関数で関数プロトタイプ、再帰、引数の値渡しと参照渡しを
習ったばかりです。

よろしくおねがいします。
562デフォルトの名無しさん:2008/11/27(木) 11:11:45
>>561
何がわからないのかな
入力部分を変えるだけで、他のルーチンはいじら無いと思うけど。。。

>暇な奴
厳密に言うと、Cに参照渡しはなかった気がするが俺の気のせいか?
ポインタで似たような機能は実装できたはずだけど・・・
563デフォルトの名無しさん:2008/11/27(木) 11:12:13
[1] 授業単元:C
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8120.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[5] その他の制限
 [5.1]while文を使う

どなたかよろしくお願いします。
564デフォルトの名無しさん:2008/11/27(木) 11:14:54
テーラー級数の板書写し間違いだと思う。
一応数学板に問い合わせて
565デフォルトの名無しさん:2008/11/27(木) 11:23:26
566デフォルトの名無しさん:2008/11/27(木) 11:23:47
>>561
たたき台のプログラムちゃんと動作しないぞ
567デフォルトの名無しさん:2008/11/27(木) 11:34:03
>>565
January + 余計な文字を入力しても、Januaryが一致していればおkってことで。
568563:2008/11/27(木) 11:38:43
>>564
分かりました。確認してみます。
ありがとうございました
569561:2008/11/27(木) 11:40:53
>>566
565で問題なく動きました

>>565,567
どうもありがとうございました。
570デフォルトの名無しさん:2008/11/27(木) 11:44:02
>>563
こりゃ出題ミスだな。
571デフォルトの名無しさん:2008/11/27(木) 11:46:17
>>568
一応これで動いたがな 2.0 近くなると収束しねぇ
#include <stdio.h>
int main()
{
double X, logX = 0.0, a_n, n;
printf("Real number:");
scanf("%lf", &X);
if(X > 2.0 || X < 0.0){
printf("%f: Out of range\n", X);
return 1;
}
a_n = -1.0;
for(n = 1.0; a_n > 1e-8 || a_n < -1e-8; n += 1.0){
a_n *= -(X - 1.0);
logX += a_n/n;
}
printf("log %f = %f\n", X, logX);
}
572デフォルトの名無しさん:2008/11/27(木) 11:51:32
>>569
今月の出力結果↓たぶん1週目の空白の数がおかしい
Year?: 2008
Month?: 11
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
573561:2008/11/27(木) 12:02:05
>>572
本当だ・・・。12月は少しずれてただけなのに11月や10月は1週目が
おかしいですね。講師の人が適当に作ったのだと思います。
>>565で直っているのでたぶん大丈夫です
574デフォルトの名無しさん:2008/11/27(木) 12:04:04
>>572
だからそこ、直したって
575563:2008/11/27(木) 12:11:44
>>571
本当にありがとうございます。
576デフォルトの名無しさん:2008/11/27(木) 12:19:26
>>571
収束チェックする対象は a_n/n じゃね?

まあ、分母の進みは遅いからやっぱり収束に時間かかりそうだけど
577571:2008/11/27(木) 12:24:11
>>576
あー、そうだね
あと、0 と 2 ちょうども除外しないと半径1になって多分永久に収束しないかな
578デフォルトの名無しさん:2008/11/27(木) 12:38:32
>>577
a_n であれば X=2 の時 -1⇔ 1の発振をおこすけど
a_n/n だったら n が増加関数なので振動収束するよん
579デフォルトの名無しさん:2008/11/27(木) 12:43:22
>>560
先生に聞いたらそれでいいみたいです
削除の方もそんな感じで、ユーザーに数入れてもらって、後から消すという感じ

6-4番は、対象のデータがあるのですが、容量が大きすぎてダメだったのでいいです
580デフォルトの名無しさん:2008/11/27(木) 12:47:09
>>579
むしろSample-6-1-revは誰が書いたコードなのか気になる。
581デフォルトの名無しさん:2008/11/27(木) 13:19:05
>>579
6-3
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8124.txt
6-2 とは検索関数の仕様変えてる
削除と言っても配列の記憶は放置
582デフォルトの名無しさん:2008/11/27(木) 13:32:52
>>581
出来ました!ありがとうございました

>>580
多分、とある大学院生かと
583デフォルトの名無しさん:2008/11/27(木) 14:13:42
[1]授業単元:プログラミング
[2]問題文:自然対数の底の値(e=2.718282...,小数点以下12桁まで)を求めるプログラムを作成せよ。
[3]環境
[3.1]OS:indows
[3.2]コンパイラ名とバージョン:?
[3.3]言語:C++
[5]その他の制限:なし(できれば簡単なものを・・・)

素人なもんで・・・すいません。
どなたかよろしくお願いします。。。
ちなみに締め切りは月曜ですOrz
584デフォルトの名無しさん:2008/11/27(木) 14:31:24
すいません>>583の[3]は、visual C++ でした・・・
585デフォルトの名無しさん:2008/11/27(木) 14:35:26
>>583
#include <cmath>
#include <cstdio>

int main()
{
double e = exp(1);
printf("e = %.12lf\n", e);
return 0;
}
/* 自然体数の底を求める「関数」を作れとは言われてないもんね */
586デフォルトの名無しさん:2008/11/27(木) 14:37:15
[1]授業単元:プログラミング
[2]問題文:
生徒のテストの成績を表す構造体を定義し,下記の出席番号と得点リストの内容を格納する変数を作
り,最も得点の高い生徒を検索して,その生徒の情報を出力するプログラム.

生徒の情報を表す構造体は以下のメンバーを持つ.

出席番号(int)
得点(int)

出席番号と得点リスト

出席番号 得点
1     54
2     0
3     65
4     70

なお、出席番号と得点がプログラムで入力すること

実行例
$ ./a
出席番号 得点
4 70

[3]環境
[3.1]OS:Windows XP
[3.2]コンパイラ名とバージョン:Cygwin
[3.3]言語:C
[5]その他の制限:まだまだ序の口・・・らしいです。

どうか宜しくお願いします。
587デフォルトの名無しさん:2008/11/27(木) 14:41:43
>>585 (・∀・)ニヤニヤ
588デフォルトの名無しさん:2008/11/27(木) 14:44:07
>>585さん
ホント助かりますm(__)m
ありがとうございました。。
589デフォルトの名無しさん:2008/11/27(木) 14:47:17
>>588 (・∀・)ニヤニヤ
590デフォルトの名無しさん:2008/11/27(木) 14:48:11
>>586
何人分まで用意するの?
おそらく配列つかえって趣旨なんだろうけど
591デフォルトの名無しさん:2008/11/27(木) 14:53:31
>>589さん

何せ、ガチで素人なもんで・・・
592590:2008/11/27(木) 15:12:25
>>586
何度も読み返してみたんだけどわからない

> 出席番号と得点がプログラムで入力すること

これどういう意味?問題では4人分のデータを使うよう書かれてるけど、
それは実行時に手で入力しろってこと?それとも、4人分のデータは
あらかじめプログラムのコードに埋めておけってこと?
実行例は、最高得点だけが出力されているように見える。
593デフォルトの名無しさん:2008/11/27(木) 15:27:57
>>583
問題文の空気読んだらこんな感じかなぁ
#include <cstdio>
int main()
{
double e = 1.0, r_n = 1.0;
int n;
for(n = 1; r_n > 1e-12; n++){
r_n *= 1.0/n;
e += r_n;
}
printf("e = %.12f\n", e);
}
594デフォルトの名無しさん:2008/11/27(木) 15:28:37
文意を読めないアスペルガー症候群の人が頑張っています。
595デフォルトの名無しさん:2008/11/27(木) 15:35:40
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
・入力された文字列中に特定の文字がいくつあるか調べるプログラムを作成せよ
  -特定の文字は最初に入力してもらう
   ・scanfを使って
  -文字列はgetcharを使って入力

実行例
数える文字を入力: a ↓
文字列を入力してください(Ctrl-zで終了)
minamotono ↓
yoritomo ↓
nihonn ↓
[Ctrl-z]
aは1個ありました

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月28日(金)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子
            配列の初期化、2次元配列、文字コード、文字データ(char型)
            getchar、putcharは習いました。
お願いします。
596デフォルトの名無しさん:2008/11/27(木) 15:36:10
>>594 (・∀・)ニヤニヤ
597デフォルトの名無しさん:2008/11/27(木) 15:49:40
>>586
> 出席番号と得点がプログラムで入力する
これを「出席番号と得点をハードコードする」と読んだ

#include <stdio.h>

int main(void)
{
struct {
int n;
int score;
} grade[4] = {
{1, 54},
{2, 0},
{3, 65},
{4, 70},
}, max;

max = grade[0];
int i;
for (i = 1; i < sizeof(grade)/sizeof(grade[0]); i++) {
if (max.score < grade[i].score) {
max = grade[i];
}
}
puts("出席番号 得点");
printf("%d %d\n", max.n, max.score);

return 0;
}
598デフォルトの名無しさん:2008/11/27(木) 15:58:27
>>595
#include <stdio.h>

int main(void)
{
int c;
char buf[255];
int count = 0;
int i;

printf("数える文字を入力: ");
c = getchar();

puts("文字列を入力してください(Ctrl-Zで終了)");
while (scanf("%s", buf) != EOF) {
for (i = 0; buf[i] != '\0'; i++) {
if (buf[i] == c) {
count++;
}
}
}
printf("%c は %d個ありました\n", c, count);

return 0;
}
599デフォルトの名無しさん:2008/11/27(木) 16:07:38
>>598
本当に有難う御座いました。
大変助かりました。
600デフォルトの名無しさん:2008/11/27(木) 16:19:36
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
・入力されたアルファベットの大文字と小文字を反転して表示するプログラムを作成せよ
  -アルファベット以外はそのまま表示
  以下のライブラリ関数を使う
    ・isupper(c):cが大文字なら真になる
    ・islower(c):cが小文字なら真になる

実行例
文字列を入力してください(Ctrl-zで終了)
Odanobunaga ↓
oDANOBUNAGA

D51 ↓
d51
[Ctrl-z]

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月28日(金)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子
            配列の初期化、2次元配列、文字コード、文字データ(char型)
            getchar、putcharは習いました。
お願いします。
601デフォルトの名無しさん:2008/11/27(木) 16:30:29
>>600
> 以下のライブラリ関数を使う
いや、指定されていて出来ないってのも、どうかと・・・それ使ってぇ〜おねがーい
602デフォルトの名無しさん:2008/11/27(木) 16:32:39
#include <stdio.h>
#include <ctype.h>
int main() {
    int c;
    printf("文字列を入力してください(Ctrl-zで終了)\n");
    while ((c = getchar()) != EOF) {
        if (islower(c)) putchar(toupper(c));
        else if (isupper(c)) putchar(tolower(c));
        else putchar(c);
    }
    return 0;
}
603デフォルトの名無しさん:2008/11/27(木) 16:42:29
>>601
どういうことですか?

>>602
本当に有難う御座います。
大変助かりました。
604デフォルトの名無しさん:2008/11/27(木) 17:30:57
[1] 授業単元: C言語
[2] 問題文: 「Hit & Blow」をつくる
 ・乱数を用いて4桁の数をきめる。乱数は以下のプログラムを利用する
----乱数ここから----
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main(void){
int n;

srand(time(0));
n = rand()%10000;
printf("%d\n",n);
}
----ここまで----
 ・キーボードから4桁の数を入力
   ※ 改行、%などの余計な入力を受け付けないようにする
 ・入力された数が場所・数ともに一致ならばH、数のみ一致ならBと判定
   例) 決めた数:1234  入力:1546  → 「1H1B」
      決めた数:1234  入力:1844  → 「2H0B」(Hit優先)
 ・当るまで繰りか牛、何回目で4Hになるか判定
   例) 「あなたは 10 回目で当りました」
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual Studio .NET
 [3.3] 言語: C
[4] 期限: 11/28
[5] その他の制限
 【printf,scanf,if,while,配列】以外は使用しない(forなども×)
宜しくお願い致します。
605 ◆Mn9bS1g7Ng :2008/11/27(木) 17:32:04
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
・自分の名字と名前を2つの文字列に代入し、
  -名字は変数の初期化、名前はstrcpyを使って
 以下のように表示するプログラムを作成せよ
   名字は〜、名前は〜です
   名前の最後の文字は〜です
  -名前の最後の文字は文字列が入った配列に適当な添字を指定して表示すること
  -名字はYamada 名前はTarouでお願いします

実行結果(Yamada Tarou の場合)
名字は Yamada, 名前は Tarouです
名前の最後の文字は uです

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月28日(金)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子
            配列の初期化、2次元配列、文字コード、文字データ(char型)
            getchar、putcharは習いました。
お願いします。
606 ◆Mn9bS1g7Ng :2008/11/27(木) 17:33:28
名字は下のプログラムを参考にお願いします。  
#include <stdio.h>                    
int main(void)                       
{                               
char str[ ]="Yamada";                  
printf("%s\n", str);                      
return 0;                            
}

名前は下のプログラムを参考にお願いします。
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[6];
strcpy(str, "Tarou");
printf("%s\n", str);
return 0;
}
607デフォルトの名無しさん:2008/11/27(木) 18:11:35
608デフォルトの名無しさん:2008/11/27(木) 18:37:59
>>605
一体何が分からないんだろう。。。

#include <stdio.h>
#include <string.h>

int main(void)
{
char family[] = "Yamada";
char given[32];

strcpy(given, "Tarou");
printf("名字は %s、名前は %s です\n", family, given);
printf("名前の最後の文字は %c です\n", given[strlen(given)-1]);

return 0;
}
609607:2008/11/27(木) 18:57:41
>>604
デバッグのために正解出力したままだったw
printf("%dH%dB (%4d)\n", h, b, n);
  ↓
printf("%dH%dB\n", h, b);
としてくだしあ
610デフォルトの名無しさん:2008/11/27(木) 19:37:52
>>609
有難う御座います。
HとBが重なったときには、Hを優先し、
Bのカウントにはいれたくないのですが、どのようにすればよいでしょうか?
ご教授頂けると幸いです。
611デフォルトの名無しさん:2008/11/27(木) 19:46:23
>>610
続きです。
charは習っていないのですが、intではダメでしょうか?
612デフォルトの名無しさん:2008/11/27(木) 21:41:08
[1] 授業単元:UNIX入門
[2] 問題文(含コード&リンク):
以下の二つのアルゴリズムの違いを応えよ(何故同じ答えが出るのか?ということ)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8127.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] VC 6.0
 [3.3] 言語: C
[4] 期限: ([2008年12月01日
[5] その他の制限: とくになし
宜しく尾根がします。
613デフォルトの名無しさん:2008/11/27(木) 21:48:20
最後がおかしくなってしまいましたが、宜しくお願いします。
614デフォルトの名無しさん:2008/11/27(木) 21:56:39
[1] 授業単元:コンピュータグラフィクス
[2] 問題文(含コード&リンク):外部ファイルのデータを変数、配列に格納せよ
データは
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8128.txt
です。
 [3.1] Linux
 [3.2] gcc
 [3.3] C言語
[4] 期限: 11/28迄
よろしくお願いします<(_ _)>
615デフォルトの名無しさん:2008/11/27(木) 22:48:47
>>614
ちゃんと動作確認してないので、参考程度に。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8129.txt
1つ気になったのは、polygon の各要素数(ポリゴンデータの先頭の数値)を
どっかに保存しておかないと、取り込んだはいいけど、参照する時に困ると思う。
616デフォルトの名無しさん:2008/11/27(木) 22:59:54
>>615
- top[i] = malloc(sizeof(float));
+ top[i] = malloc(sizeof(float)*3);
じゃないか?
617615:2008/11/27(木) 23:01:45
>>616
その通りですた
指摘さんくす
618デフォルトの名無しさん:2008/11/27(木) 23:09:11
>>536
お礼が遅れて申し訳ありませんでした。ありがとうございます。
コンパイルしてみたところ、70行目付近の

for(i=(long)(0.5 * PRECISION/ log10(k))・・・・・

の行が、デクリメント演算子が云々ということで通りませんでした。どうすればいいんでしょうか…
619615:2008/11/27(木) 23:12:00
もう一か所間違いあった
2つめの for ループは
for(i = 0; i < n_ver; i++){
じゃなくて
for(i = 0; i < n_pol; i++){
が正解
620デフォルトの名無しさん:2008/11/27(木) 23:20:51
>>615
迅速な回答ありがとうございます<(_ _)>
動作確認してみましたがうまく取り込めていました!
ポリゴンデータの先頭の数値はたぶん1ファイルで3ならずっと3
4ならずっと4とかになると思いますのでn_elemを参照すれば大丈夫そうです。
大変助かりました、ありがとうございました!
621デフォルトの名無しさん:2008/11/27(木) 23:23:15
動作確認した時は正確な結果が得られていたのですが、少し訂正して確認
してみます@@
訂正助かります<(_ _)>
622デフォルトの名無しさん:2008/11/27(木) 23:41:27
>>610
重複の考え方なんだけど、

正解 1234
入力 1844

これは、入力の1つ1つの数に対して、Hit があれば Hit 加算、なければ
1 → 1 hit
8 → 1 → 2 → 3 → 4 → 該当なし
4 → 1 → 2 → 3 → 4 → Blow +1
4 → 1 → 2 → 3 → 4 → Hit +1
この場合、3つめの4についてはBlowとカウントしないってこと?
623622:2008/11/27(木) 23:47:30
>>610 >>611
質問投げっぱなしであれだけど、↓これでどう?int にしてみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8130.txt
例によって printf のデバッグ出力は >>609 のように直してくだしあ
624622:2008/11/27(木) 23:49:41
あー、あと最後のほうの
if (h == 4)

if (n_h == 4)
です。こうしないと終われないw
625デフォルトの名無しさん:2008/11/27(木) 23:53:54
>>610
横からだが
正解 1234
入力 4444
だったら、 Hit 1, Blow 0 ?

正解 1234
入力 4456
だとどうなる?
626デフォルトの名無しさん:2008/11/28(金) 00:20:23
>>625
正解 1234、入力 4444 → Hit 1 Blow 0
正解 1234、入力 4456 → Hit 0 Blow 1
となります。HitとBlowが重複する場合は、Blowはカウントしません。
627デフォルトの名無しさん:2008/11/28(金) 00:53:02
【質問テンプレ】
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):

単振り子の運動方程式
θ''=-(g/l)sinθ、θ'(0)=0、θ(0)=Θ
の厳密な数値解を初期振れ角Θを起動時に指定して、アニメーション表示させるプログラムを作成しなさい。

[3] 環境
 [3.1] OS:Windows/
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C
[4] 期限:2008年12月11日まで
[5] その他の制限:特になし
628デフォルトの名無しさん:2008/11/28(金) 00:55:28
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
以下のマップを時間発展させるプログラムを書きなさい。(最大ステップ数は70程度)
Xn+1 = 2Xn (0≦Xn≦1/2)
2(1-xn)  (1/2≦Xn≦1)
ちなみに、X1=2/5でおねがいします。
[3]環境
 [3.1] Unix
 [3.2] gcc
 [3.3] C
[4] 期限: 本日中

よろしくお願いします。
629デフォルトの名無しさん:2008/11/28(金) 00:59:14
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
a:3人、7教科のテストの点数のうちTop3の人名と教科名を表示するプログラムを作成せよ(人名、教科名、点数は任意とします)
b:入力した生年月日に対し下記の情報を表示するプログラムを作成せよ
・現在の年齢
・産まれた年の干支、曜日
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ:VC 6.0
[3.3] 言語:C

よろしくお願いします。

630デフォルトの名無しさん:2008/11/28(金) 01:21:29
[1] プログラミング言語C++
[2] x,y座標において入力された場所から8×7の座標軸で、(4,0)か(4,7)のところまで点を移動させる
 x軸では(0,a)になったらx軸方向の速さは+、(8,a)になったら−、
 y軸では(b,0)で+、(b,7)で−の速さをというように反射しながら点両軸に1マスずつを動かす
 動く方向は(vx,vy)で表す
 ボールの位置(x、y)および速度(vx、vy)を構造体の変数とするように書き換えろ
 また、(x,y)(vx,vy)を更新する関数も構造体の関数とするように書き換えよ

[3] 環境
 [3.1] OS: Windowsビスタ
 [3.2] コンパイラ名とバージョン:よくわかりませんがフォートランビルダーを使っています
    一応visualC++もあります
 [3.3] 言語:C++
[4] 期限: もう過ぎているんですが自分で完成させたいので、学校が始まる明日9時までにお願いします
[5] その他の制限: if,else,関数のプロトタイプ宣言,『構造体』←今回のメインです

すごい時間がないですがよろしければお願いします

アップローダに一応自分が頑張ってみたC++ファイルを載せておきました
よければそちらも見てください
>>1テンプレにあるアップローダの記事番号8131です
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
631デフォルトの名無しさん:2008/11/28(金) 02:14:34
>>612
数学アルゴリズムの問題
要するに、(xy) % n ==( (x % n)*(y % n) )% nが成り立つことが本質
これより(x^m) % n = ( (x % n)^m ) % nが成り立つ。(x,y>0)
(^はC言語では別の意味で使われる記号だが、ここではべき乗の意味)
最初のプログラムは、(x^b % n)を計算するプログラム。
但しb以下のベキ乗に対しても計算結果を出力している。
2番目のプログラムも結果的に(x^b % n)を計算し表示するプログラム
x=11
b=12
として説明
12= 2^3+2^2=2^3+2^2

x^13=x^(2^3+2^2+2^0)=x^(2^3)*x^(2^2)*x^(2^0)
x^(2^3)=(x^2)^3 二乗する操作を3回行う
x^(2^2)=(x^2)^2 二乗する操作を2回行う
この2つをかけたものを%nしたものが答え
プログラムでは、公式(xy)^m=x^m y^mを利用して
一つのループで、上の2つの掛け合わせた結果を求めている。
632631:2008/11/28(金) 02:18:23
x^(2^3) = (x^2)^3
この式は間違いなので忘れて
x^(2^3)を求める操作は、ある変数にxを入れてそれを
二乗する操作を3回行うことで求められることは正しい
ので、大意は631の通り
633612:2008/11/28(金) 02:34:49
>631
サンクスです
634 ◆Mn9bS1g7Ng :2008/11/28(金) 02:49:20
>>608
本当に有り難う御座いました。
大変助かりました。
635デフォルトの名無しさん:2008/11/28(金) 02:57:57
>>626
同じ数字を2回使えるんだね。
正解 1123 入力 4114だったらHit 1 Blow 1でいいのかな。
636デフォルトの名無しさん:2008/11/28(金) 03:01:30
>>634
何が分からなかったのかは秘密ですよね。
637デフォルトの名無しさん:2008/11/28(金) 03:51:58
[1] プログラミングc
[2]最大6 桁の整数を3 つ入力させ、int 型の配列にそれぞれ格納する。
入力終了後、3 数値の和を求め出力するプログラムを作成しなさい。ただし、7桁以上
の文字列が入力された場合は、先頭から6 文字までを有効とし、7 文字目以降を無視す
る。また、負の数が入力された場合はエラーメッセージを表示しプログラムを終了す
る。 
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:朝まで
エラー仕様 
7 桁以上の文字列が入力された先頭から6 文字までを有効とし、7 文字目
以降を無視する。
#include <stdio.h>
#include <string.h>

main()
{
int a[3];
int i;

for(i = 0; i < 3; i++) {
scanf("%d", &a[i]);
}
printf("%d\n", a[0] + a[1] + a[2] );
return 0;
}
ここまではなんとかできたのですが 最大桁数とエラー仕様がわかりません
お願いします
638デフォルトの名無しさん:2008/11/28(金) 04:14:38
>>637
制限とか細かいこと書いてないので atoi 使った。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int a[3], i;
char buf[10];
for(i = 0; i < 3; i++) {
scanf("%s", buf);
buf[6] = '\0'; /* 7文字目にNULL文字を強制挿入 */
a[i] = atoi(buf);
if(a[i] < 0){
printf("負の数は無効です\n");
return 1;
}
}
printf("%d\n", a[0] + a[1] + a[2]);
return 0;
}
639629:2008/11/28(金) 04:36:13
期限書き忘れてました
11/28 12:00までです。
640デフォルトの名無しさん:2008/11/28(金) 05:03:23
>>630
もとのコードを最大限尊重する方向で書いた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8132.txt
641デフォルトの名無しさん:2008/11/28(金) 06:07:31
>>629
習った範囲を書けよ
極端な話変数も配列も使わずに scanf と printf でベタ出力したってできちまうぞ
642デフォルトの名無しさん:2008/11/28(金) 06:28:53
>>628
課題の趣旨は実数加減算の誤差を調べることかな?
#include <stdio.h>
int main()
{
double Xn = 2.0/5.0;
int i;
for(i = 1; i < 70; i++){
printf("X%d: %.15f\n", i, Xn);
if(Xn < 0.5)
Xn = 2 * Xn;
else
Xn = 2 * (1 - Xn);
}
printf("X%d: %.15f\n", i, Xn);
return 0;
}
643629:2008/11/28(金) 10:02:00
>>641
配列や構造体は学んでます
644629:2008/11/28(金) 11:30:44
>>629
お願いします
645デフォルトの名無しさん:2008/11/28(金) 11:48:45
>>629
aの問題のみ。
構造体を使ってみたが意味なかったorz
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8133.c
646デフォルトの名無しさん:2008/11/28(金) 12:50:30
[1] 授業単元:Linuxシステムプログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8136.zip
[3]環境
 [3.1] Linux
 [3.2] gcc 4.1.2
 [3.3] C
[4] 期限: 11/28(金)中くらいだと助かります。
[5] 補足
C言語初心者です。1問目は共有メモリ、2問目は共有メモリ+セマフォの問題です。
1問目はウェブで調べた内容を元に何とか自力でやったものをアップしました。
2問目はそれを改造してセマフォによる同期処理を追加するらしいのですが、ウェブで
調べてもセマフォに関する情報が難しくてあまり理解出来ませんでした。どなたか
1問目のファイルに処理を追記してもらえると助かります。
(問題の仕様が曖昧かも知れませんが、適当な感じで構わないです。)
647デフォルトの名無しさん:2008/11/28(金) 15:47:43
648デフォルトの名無しさん:2008/11/28(金) 15:51:29
>>645
ありがとうございます
助かりました
649デフォルトの名無しさん:2008/11/28(金) 16:05:25
[1] 授業単元:Cプログラミング
[2] 構造体 struct data{int a; char b;}c[128],d[128];の中から、
c.aの数値を大きい順にヒープソートで並べ直し、結果を構造体dへ格納・表示する。
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 2008年11月28日19:30まで

別なプログラムの実行結果をヒープソートで整理するというもので、元データを構造体に格納する
ところまでは出来たのですが、その先が分かりません。
ヒープソートの解説サイトを調べてみたのですが、構造体を利用しているものがなく、
よく分かりませんでした。期限が短くて申し訳ないのですが、よろしくお願いします。
650デフォルトの名無しさん:2008/11/28(金) 16:08:25
>>583の、標準ライブラリを使わずに、自分で桁などを指定して
求めるコードが書けたんだが、もう遅いか・・・次に似た課題が出たら出すか。
651646:2008/11/28(金) 17:12:21
>>647
とてもわかりやすいコード有り難うございました。
(1)の方はコンパイルと実行が上手く行きました。
(2)の方ですが私の環境だと上手くコンパイル出来ません。。
環境はLinux Debian(英語版)、gcc 4.12です。(ソース中の日本語はアルファベットに変換済)
以下、gccのエラーメッセージですが何かわかりますでしょうか。sem.h, sem.c, producer.c, consumer.c
の全てを同一ディレクトリに置いて実行しています。

$ gcc -Wall -c sem.c (成功)
$ gcc -Wall -o consumer.c sem.o
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o: In function `_start':
../sysdeps/i386/elf/start.S:115: undefined reference to `main'
collect2: ld returned 1 exit status

このエラーが出ると、consumer.cファイルは削除されてしまうようです。
同様に、producer.cをコンパイルしても同じエラーとファイル削除が起こります。
652646:2008/11/28(金) 17:16:58
自己レスです。実行コマンドに誤りがありました。
> $ gcc -Wall -o consumer.c sem.o
$ gcc -Wall consumer.c sem.o -o consumer
$ gcc -Wall producer.c sem.o -o producer
ですね。上手く行きました。有り難うございました! →647
653デフォルトの名無しさん:2008/11/28(金) 17:57:34
654デフォルトの名無しさん:2008/11/28(金) 17:58:39
>>649
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8140.txt

要は比較の所だけ構造体の要素を比較するようにすればいいだけ。
655デフォルトの名無しさん:2008/11/28(金) 18:00:07
×構造体にするところが分からない
○全くなにも分からない
656647:2008/11/28(金) 18:07:34
>>646
 時間がなくて焦って作ったから、コマンドライン書き間違ってた。
 共有メモリには、参照カウンタ付けた方がいいな、と今読んでいて思った。
が、後悔はしていない。Linuxならきっとなんとかしてくれる。という妄想。
 1日ROMってまつ。
657デフォルトの名無しさん:2008/11/28(金) 19:26:14
[1] 授業単元:Cプログラミング基礎
[2] 問題文(含コード&リンク):

次の図のように33個の節点が抵抗で繋がれた電気回路がある。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8141.zip
ただし、全ての抵抗の抵抗値は同じである。
ここで、AB間に5Vの電源を接続し、Aの電位を5V、Bの電位の0Vとしたとき、残りの31点の電位を計算せよ。

[3] 環境
 [3.1] OS:Windows/
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C
[4] 期限: ([2008年12月19日まで]
[5] その他の制限:各節点の電位を未知数とする連立方程式を立て、それをガウスの消去法で解けばよい。
各節点に対して、「流れ込む電流の和は0」という法則で方程式を作れるはず。
658デフォルトの名無しさん:2008/11/28(金) 20:49:27
>>653
大変参考になりました。
現状、単体では動作していますが、組み合わせると大量にエラーが返されてしまうので、
教えていただいたコードを元に修正を加えていこうと思います。
ありがとうございました。
659ruru:2008/11/28(金) 21:57:09
よろしくお願いしますっ!!!

[1]プログラミング1

[2]課題

1990年1月1日以降の年月日をキーボードから入力すると、
それが何曜日かを表示するプログラムを作りなさい。
[条件]
@年、月、日の順にキーボードから入力すると
 曜日が表示されるようにすること。
A1990年1月1日が月曜日であることは既知であるとする。
Bうるう年の条件
 「4の倍数で、100の倍数ではない」あるいは
 「400の倍数である」も既知であるとする。

[3] 環境
 [3.1] windowsXP
 [3.2] Microsoft Visual studio 2005
 [3.3] C言語

[4] 2008/12/01 12:00

[5]
まったくの初心者の状態から、
変数を使ったプログラミング→データの出入力→変数と演算子→条件分岐
という手順で授業が進み、今回の学習目標が
「条件分岐 switch を使うことができる」
です。
660デフォルトの名無しさん:2008/11/28(金) 22:08:18
>>659
前回までの学習目標は達成できてるの?
661ruru:2008/11/28(金) 22:23:39
>>660
はい、できてます!!
662 ◆Ao6dpGb6Jk :2008/11/28(金) 22:43:26
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):以下の仕様を満たすプログラムを作成せよ。
       【銀行ATM】
・実際のATMの機能を網羅する
・通帳記入によりファイルに情報を出力
・顧客情報のデータベースを作成
・エラー所処理
・独自の機能を一つ以上加える
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Visual C++
 [3.3] 言語: どちらでも可
[4] 期限: 2008年12月2日10:00
[5] 全スレにも同様な質問がございましたがリンク切れのため、どなたかよろしくお願いいたします。
663デフォルトの名無しさん:2008/11/28(金) 22:48:51
んじゃ今回の課題は今までの学習内容で実装できるからまずはそれをがんばればいいとおもうよ。

switchの使い道が思い浮かばないんだが、無理矢理使うとしてもここぐらい?
switch(dayofweek)
{
case 0: printf("日曜日"); break;
case 1: printf("日曜日"); break;
・・・
default: printf("バグってすみません"); break;
}
664デフォルトの名無しさん:2008/11/28(金) 22:52:26
>>662
・実際のATMの機能一覧
・通帳に見立てたファイルのフォーマット
・使用するDBMS
・エラー通知方法(メール送信?イベントログ?独自プロトコルで別マシンに通知?)
・加えようと思う機能

とりあえずこれくらいは伝えておかないと想定外のものが出てくると思うよ。
665デフォルトの名無しさん:2008/11/28(金) 22:53:51
666デフォルトの名無しさん:2008/11/28(金) 22:56:02
これはひどいw
667665:2008/11/28(金) 22:59:50
間違えた。。

↓の365と366が逆だった。
/* 1990年からの日数を数える */
switch(bis){
case 0:
days += 366;
break;
case 1:
days += 365;
break;
default:
break;
}
668デフォルトの名無しさん:2008/11/28(金) 23:01:27
>>659
#include <stdio.h>
int main()
{
int h,y,m,d,w;
char*wn[]={{"日"},{"月"},{"火"},{"水"},{"木"},{"金"},{"土"}};
printf("日付を入力してください(YYYY/MM/DD) ");
scanf("%4d/%2d/%2d",&y,&m,&d);
if(m<3){--y;m+=12;}
w=(y+y/4-y/100+y/400+(13*m+8)/5+d)%7;
printf("%s曜日",wn[w]);
return 0;
}
669デフォルトの名無しさん:2008/11/28(金) 23:05:11
>>668
0点だな
670デフォルトの名無しさん:2008/11/28(金) 23:08:52
>>669
#include <stdio.h>
int main()
{
int h,y,m,d,w;
char*wn[]={{"日"},{"月"},{"火"},{"水"},{"木"},{"金"},{"土"}};
printf("日付を入力してください(YYYY/MM/DD) ");
scanf("%4d/%2d/%2d",&y,&m,&d);
if(m<3){--y;m+=12;}
w=(y+y/4-y/100+y/400+(13*m+8)/5+d)%7;
printf("%s曜日",wn[w]);
switch(w){
case 0:break;
default:break;
}
return 0;
}
671 ◆xvhaSPKbVw :2008/11/28(金) 23:20:54
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
void main()
{
int i,j,data[5][4];
for (j=0;j<=3;j++){
data[4][j]=0;
}
for (i=0;i<=3;i++){
data[i][3]=0;
for (j=0;j<=2;j++){
printf("data[%d][%d]=",i,j);
scanf("%d",&data[i][j]);
data[i][3]+=data[i][j];
data[4][i]+=data[i][j];
data[4][3]+=data[i][j];
}
}
for(i=0;i<=4;i++){
for(j=0;j<=3;j++){
printf("%4d",data[i][j]);
}
printf("\n");
}
}
672 ◆xvhaSPKbVw :2008/11/28(金) 23:21:53
これを↓のように表示するように改良する
右下の合計と平均の文字は要りません

 国語 数学 英語  |合計    |平均     

  75  35   40 |       | 
    
  69  75   82  |       |
  
  57  48   36  |       |

  30   60   50  |       |
-------------------------------------
合計 |

平均 |

[3] 環境:ポケコンに打つんでよく分かりません
[4] 期限:12月1日
[5] その他の制限:特になし

お願いします

673デフォルトの名無しさん:2008/11/28(金) 23:22:14
>>659
よう 俺と同じ授業受けてるな・・
課題内容の文のせいでばればれだからあぷろだ使おう
ってか生徒だよな・・・生徒だよな・・・

>>659と同じ宿題なのですが、自力でやるとこんな感じになりました
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8144.txt
どうも上手くいってるのかどうか微妙なんですよね。
どなたか改善、または計算方法の変更出来るお方いませんか
674 ◆Ao6dpGb6Jk :2008/11/28(金) 23:30:01
>>664
申し訳ございません。詳細を記述いたしました。ご指摘ありがとうございます。
データベースについては、よくわかりませんが以下に記述するようことができれば
よいかと思います。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8145.txt
675デフォルトの名無しさん:2008/11/28(金) 23:31:06
>>670
switchを使うべき箇所が見つからなかったという意思表示が見られるのでよいと思う
676デフォルトの名無しさん:2008/11/28(金) 23:38:01
>>674
実際のATMの機能を網羅する、からずいぶんと機能落ちしたなあ。
Excelの読み書きってbiff扱うライブラリ持ってるの?xlsx形式?にしてもxmlパーサを使うか作るかしなきゃならない。
期間的にテキストを選ばざるを得ないだろうけれど。
フォーマットもなにもあったもんじゃないね。
顧客データの保存形式はどうするのとかもうね、なんで今になるまでほっといたの?
少なくとも1ヶ月くらいは期間くれてないと学生には厳しくないかい
677デフォルトの名無しさん:2008/11/28(金) 23:42:38
[1] 授業単元: Cプログラミング言語演習
[2] 問題文(含コード&リンク):英語→日本語に変換するプログラムを作りなさい。
              次の3段階で構成すること。
              @単語の登録(10単語)
               char word[][2][40]={{"apple","ringo"},{"dog","inu"},・・・・}
              Aキーボードからの入力(英単語)
              B入力した値が@の英単語に含まれていれば日本語を出力させて、そうでなければエラーを表示させる関数
     
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Microsoft Visual studio2005
 [3.3] 言語: C++
[4] 期限: 2008年12月4日
[5] その他の制限: ポインタは使用不可、"strcmp"を使用することです。
          よろしくお願いします。

678デフォルトの名無しさん:2008/11/29(土) 00:08:06
>>677
#include <stdio.h>
#include <string.h>
int main()
{
char word[][2][40]={{"apple","ringo"},{"dog","inu"}};
char w[5000];
unsigned int i;
scanf("%4999s", w);
for (i = 0; i < sizeof(word) / sizeof(word[0]); ++i) {
if (!strcmp(w, word[i][0])) {
puts(word[i][1]);
return 0;
}
}
puts("エラーです");
return 0;
}
単語は自分で足してくれ
679デフォルトの名無しさん:2008/11/29(土) 00:51:32
[1] 授業単元:ハードウェア設計
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8125.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語:C++
[4] 期限:2008年12月1日10:40まで

よろしくお願いします。
680デフォルトの名無しさん:2008/11/29(土) 01:03:52
>>679
#include <iostream>
class Rectangle {
int width, height;
public:
void setWidthHeight(int w, int h) {
std::cout << "横幅に" << w << "が高さに" << h
<< "が入力されました" << std::endl;
if ( w < 0 || h < 0) {
width = 0;
height = 0;
std::cout << "横幅や高さには正の値を入れる必要があります。"
"どちらも0にします。" << std::endl;
} else {
width = w;
height = h;
}
}
void calcArea() {
std::cout << "面積は" << width * height << "です。" << std::endl;
}
};
int main()
{
Rectangle r;
r.setWidthHeight(6, 8);
r.calcArea();
r.setWidthHeight(-6, 8);
r.calcArea();
return 0;
}
681デフォルトの名無しさん:2008/11/29(土) 01:10:30
よろしくおねがいします。
[1] 授業単元:c++入門
[2] 問題文(含コード&リンク):実行するたびにランダムな
10文字の文字列を生成するプログラムを作成しなさい
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: g++ (GCC) 4.2.4
 [3.3] 言語: C++
[4] 期限: 2008年11月30日16:00まで
[5] その他の制限:
682657 ◆1lOgEs2Vr2 :2008/11/29(土) 01:11:29
[1] 授業単元:Cプログラミング基礎
[2] 問題文(含コード&リンク):

次の図のように33個の節点が抵抗で繋がれた電気回路がある。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8141.zip
ただし、全ての抵抗の抵抗値は同じである。
ここで、AB間に5Vの電源を接続し、Aの電位を5V、Bの電位の0Vとしたとき、残りの31点の電位を計算せよ。

[3] 環境
 [3.1] OS:Windows/
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C
[4] 期限: ([2008年12月19日まで]
[5] その他の制限:各節点の電位を未知数とする連立方程式を立て、それをガウスの消去法で解けばよい。
各節点に対して、「流れ込む電流の和は0」という法則で方程式を作れるはず。

お願いします。
683627 ◆i2J9TbOj36 :2008/11/29(土) 01:12:45
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):

単振り子の運動方程式
θ''=-(g/l)sinθ、θ'(0)=0、θ(0)=Θ
の厳密な数値解を初期振れ角Θを起動時に指定して、アニメーション表示させるプログラムを作成しなさい。

[3] 環境
 [3.1] OS:Windows/
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C
[4] 期限:2008年12月11日まで
[5] その他の制限:特になし
お願いします。
684デフォルトの名無しさん:2008/11/29(土) 01:25:31
[1] 授業単元:if文,while文,配列
[2] 問題文:
1H1Bを作りなさい。
(1)乱数を用いて答えとなる4桁の数字を決める。
(2)キーボードから4桁の数字を入力する。(4桁の数字以外を入力したらエラーを表示する)
(3)数字と場所が一致していたらH、数字のみ一致していたらBと判定する。
[例:答え1234 入力1324 判定2H2B, 答え1134 入力1111 判定2H2B]
(4)4H0Bになるまで入力と判定を繰り返し、4H0Bになったまでの回数を表示する。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] Visual Studio .NET
 [3.3] C
[4] 期限:今日の12:30
[5] printf,scanf,if,while,for,int,char,配列,乱数を発生させるプログラム(srand,rand,timeを用いたもの)

以下のようにしてみたのですが、
「答え1134 入力1111」のときに1桁目の1に対して1H3B、2桁目の1に対して1H3Bであわせて2H6Bと表示されてしまいます。
また(2)のエラーの表示ができません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8146.c

よろしくお願いします。
685デフォルトの名無しさん:2008/11/29(土) 01:28:12
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
・入力された文字列をchar型の配列strに読み込み,それを逆順にしてchar型の配列rtsに入れるプログラムを作成せよ
  -配列str,rtsは大きめの要素数を確保
  -入力された文字数は'\0'を探すことによってわかる

実行例
文字列を入力: osaka ↓
反転した文字列 = akaso

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月30日(日)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子
            配列の初期化、2次元配列、文字コード、文字データ(char型)
            getchar、putcharは習いました。
宜しくお願いします。
686デフォルトの名無しさん:2008/11/29(土) 01:35:30
>>678
ありがとうございます。でもこれだといつも「エラーです」と出力されると思うんですけど。
687デフォルトの名無しさん:2008/11/29(土) 02:07:20
>>686
回答者じゃないですが、そんなことはないと思うんですけど。
688デフォルトの名無しさん:2008/11/29(土) 02:15:24
>>685
#include <cstdio>
#define BUFSIZE 200

int main(int argc,char **argv){

    char str[BUFSIZE],rts[BUFSIZE];
    int length = 0;

    printf("文字列を入力:");
    gets_s(str,BUFSIZE);

    while(str[length] != '\0') length++;

    for(int i=0;i<length;i++){
        rts[i] = str[length-i-1];
    }
    rts[length] = '\0';
    
    printf("反転した文字列 = %s\n",rts);
    return 0;
}
689デフォルトの名無しさん:2008/11/29(土) 03:06:06
[1] 授業単元:プログラミングc
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8147.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: c
[4] 期限: 朝まで
[5] その他 出来る限りの範囲でこの形から変えずにお願いします。
      初心者なんで難しい関数は禁止でお願いします。
      出来る限り簡単な回答求む
690デフォルトの名無しさん:2008/11/29(土) 03:09:46
>>684は、>>604とは違うもの?
691デフォルトの名無しさん:2008/11/29(土) 03:15:32
>>689
意味の無い部分を削ってもいいか?
692デフォルトの名無しさん:2008/11/29(土) 03:21:09
>>691 意味ないものは削ってください
693デフォルトの名無しさん:2008/11/29(土) 03:30:26
>>689
#include<stdio.h>
#define SIZE 8
int main()
{
int count;
int c = 0, d;
int x[3], i;
for (i = 0; i < 3; ++i) {
count = 0;
d = 0;
while ((c = getchar()) != '\n') {
if (count < SIZE) {
d = d * 10 + (c - '0');
count++;
}
}
x[i] = d;
}
printf("%d + %d + %d = %d\n", x[0], x[1], x[2], x[0] + x[1] + x[2]);
return 0;
}
694デフォルトの名無しさん:2008/11/29(土) 03:33:31
>>693感謝!
695デフォルトの名無しさん:2008/11/29(土) 03:33:48
ごめん負数忘れてた、あとこれはエラーチェックを省いてるのでfとかも受け付けますが値は狂います
696デフォルトの名無しさん:2008/11/29(土) 03:38:13
>>694
#include<stdio.h>
#include <stdlib.h>
#define SIZE 8
int main()
{
int count;
int c = 0, d;
int x[3], i;
for (i = 0; i < 3; ++i) {
count = 0;
d = 0;
while ((c = getchar()) != '\n') {
if (c < '0' || '9' < c ) {
printf("エラーです\n");
exit(1);
}
if (count < SIZE) {
d = d * 10 + (c - '0');
count++;
}
}
x[i] = d;
}
printf("%d + %d + %d = %d\n", x[0], x[1], x[2], x[0] + x[1] + x[2]);
return 0;
}

負数に対応、というより数字以外を受けるとエラーを表示して終了することで
-があれば終了するというものです
697デフォルトの名無しさん:2008/11/29(土) 03:48:08
見えた
698デフォルトの名無しさん:2008/11/29(土) 03:51:10
>>683
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8148.txt
これでもいいのかな?
厳密な数値解よく分からない
アニメーションってどんな方法ありますか?
699デフォルトの名無しさん:2008/11/29(土) 06:24:14
>>698
これは確か初等関数の範囲外だったかと。
700デフォルトの名無しさん:2008/11/29(土) 06:26:51
>>659
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8149.c
switchは不使用。閏年を求める部分は、独自で定義した関数を使用。
っつか、ツェラーの公式を使いてぇ〜〜。
701627 ◆i2J9TbOj36 :2008/11/29(土) 07:05:35
>>698
ありがとうございました。
702デフォルトの名無しさん:2008/11/29(土) 09:42:03
>>690
同じ内容の課題です、同じ授業をとってる人かもしれません。
703デフォルトの名無しさん:2008/11/29(土) 10:15:46
>>681
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <ctime>

int main(void)
{
srand(time(NULL));
std::stringbuf sb;
for (int i = 0; i < 10; i++) {
sb.sputc(rand()%26+'a');
}
std::cout << sb.str() << std::endl;
return 0;
}
704デフォルトの名無しさん:2008/11/29(土) 10:51:22
>>659
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8150.txt
無理やりスイッチ文使って見たり色々とアレ気なプログラムだけどどうぞ
705デフォルトの名無しさん:2008/11/29(土) 10:55:47
> それが何曜日かを表示するプログラムを作りなさい。
ツェラーの公式を使うなら、日数の合計なんて要らないじゃん・・・
706デフォルトの名無しさん:2008/11/29(土) 11:00:46
パターン的に、その曜日を求めるが出てくると次はカレンダーとかって話になったりするから
>>704の方が親切な気はする。
707デフォルトの名無しさん:2008/11/29(土) 11:08:44
先読みしたつもりが、題意を無視すると、評価されんぞ・・・
まぁ、丸投げで知ったこっちゃないだろうけど、

> A1990年1月1日が月曜日であることは既知であるとする。
これがキーだな。何のために基準の年月日と曜日を問題で示したか。
708デフォルトの名無しさん:2008/11/29(土) 11:20:02
>>706
コンパイルして実行してみた?
709デフォルトの名無しさん:2008/11/29(土) 11:22:52
>>708
俺が書いたのじゃないから知らんがな

constでintとくっついてる場所があるのはきになったけど文字コードの問題だろうし。
710657 ◆1lOgEs2Vr2 :2008/11/29(土) 12:38:38
[1] 授業単元:Cプログラミング基礎
[2] 問題文(含コード&リンク):

次の図のように33個の節点が抵抗で繋がれた電気回路がある。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8141.zip
ただし、全ての抵抗の抵抗値は同じである。
ここで、AB間に5Vの電源を接続し、Aの電位を5V、Bの電位の0Vとしたとき、残りの31点の電位を計算せよ。

[3] 環境
 [3.1] OS:Windows/
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C
[4] 期限: ([2008年12月19日まで]
[5] その他の制限:各節点の電位を未知数とする連立方程式を立て、それをガウスの消去法で解けばよい。
各節点に対して、「流れ込む電流の和は0」という法則で方程式を作れるはず。

お願いします。
711デフォルトの名無しさん:2008/11/29(土) 14:34:57
[1]授業単元;プログラミング
[2]問題文
  ペン1〜10個で100円
11〜100個で90円
101個以上は70円
n個買った時の値段は
[3]
 [3.1]OS:XP
[3.2]コンパイラとパーテンション:vc6.0
[4]期限:2008/12/5
お願いします
712711:2008/11/29(土) 14:45:19
101以上かったら全部70円
になるわけではありません
713デフォルトの名無しさん:2008/11/29(土) 15:48:23
>>711

#include<stdio.h>

int main()
{

int n ;
printf ( "何個買いますか?->" ) ;
scanf ( "%d", &n ) ;

int price = 0 ;
for ( int i = 1 ; i <= n ; i++ ){
price += (100 - (i>10)*10 - (i>100)*20 ) ;
}

printf ( "%d円です\n", price ) ;

}
714デフォルトの名無しさん:2008/11/29(土) 15:51:12
>>712 101 -> 10*100 + 90*90 + 1*70 = 9170?
715デフォルトの名無しさん:2008/11/29(土) 18:27:08
>>710
式の立て方がよく分かんない。デレデレしながら教えて。
716デフォルトの名無しさん:2008/11/29(土) 19:15:22
>>711
int get_price(int pen_num)
{
int price=0;

if(pen_num-100>0) price+=(pen_num-100)*70, pen_num-=pen_num-100; // pen_num-=pen_num-100 -> pen_num=100
if(pen_num-10>0) price+=(pen_num-10)*90, pen_num-=pen_num-10;
if(pen_num-0>0) price+=(pen_num-0)*100, pen_num-=pen_num-0;
return price;
}
717657 ◆1lOgEs2Vr2 :2008/11/29(土) 19:27:01
>>715
ちょっと式の立て方もわからんです
718デフォルトの名無しさん:2008/11/29(土) 19:29:10
>>715
>>657じゃ無いけど

たとえばAの上の点V1とする
V1に入ってくる電流、出てく電流を
 I2↑ I3
V1├→
 I1↑
とすると
I1 = I2 + I3
∴I1 - I2 - I3 = 0
って方程式が立ってこれが各点分31個

肝心の電圧はVaから電圧降下I1*rを引いた
V1 = Va - I1*r
∴I1 = (Va - V1)/r
この式が各線分52個

Iiを代入してViについての連立方程式MV=mの形にする
V = {V1,V2,・・・,V32}'
連立方程式をガウスの消去法なりで解く

紙の上でやることがほとんど
719デフォルトの名無しさん:2008/11/29(土) 19:31:08
V31までか
720デフォルトの名無しさん:2008/11/29(土) 22:02:43
[1] 授業単元: 情報処理
[2] 問題文: FILE文、fopen文、fwrite文、fflush文、fclose文が全て含まれるプログラムを示せ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler
 [3.3] 言語: Cのみ
[4] 期限: ([2008年12月1日まで)
[5] その他の制限: 特になし
721デフォルトの名無しさん:2008/11/29(土) 22:29:18
                _     _
              /__.:.<.:.^>´.:_.:\ヘ、_
               _,∠厶=::≧':∠三:::≧_` .:.:.:.:.:`丶、
          '".:.:.:.: ̄.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:\.:.:.:.:.:.:.:.:.:.\
.        ∠/.:.:.:.:.:.:.:.: /.:.:.:.:.:.:.:.:.:.:.:.:.:.:\.:.:.:.:.\.:.:.:.:.:.:.:.:.:.ヽ
          /.:.: /.:./.:.:/.:.:.:.:.:.:.:.:.::l.:.:.:.丶:.:.ヽ.:.:.:.:.:ヽ.:.:.:.:.:.:.:.:.:.:..
       /.:.: /.:./.:.:.:.::l.:.:.:.:::.:.|.:.:.::|:.:.:.:.:.:.:.:.:.:.:'..:.:.:.:.:.:'., :.:.:.:.:.:.:.:.:'.
       ,'.:.: /.::;'.::l.:.:::::|.:.:.:.:::.:.|.:.:.::l:.:.:.:.:.:.:::.:.:.: l:::.:.i.:.:.:.Y::::.:.:.:.:.:.l
        |.:.:/|.:::|.:::|\/|.:.:.:.::|.:.ト、.;ィ⌒.:.:.::|:.:.:.:.|:::.:.|.:.:l::.l:|::::.:.:.:.:.: |
        |.:/│,'|::::l.::∧|.:l.:.:::Wメ:.:lヽ::.:.:.: l:.:.:.:.|:::.;ム.:.Wl:::::.:.:.:.:.:.|
        |/ j/ |::::l :::坏ハ.::T^ 行外千':.:ト::.:.∧/圦リ::::|:::::.:.:.:.:.:.|        >>718
         リ:ハ::ヽ小リ ヽ{  iト沙'_ \| W 〈  \::i:::::.:.:.:.:.:.|        べ、べつに感謝なんてしないからね!
            ヾ∧ :::}^r'//////` ´     |{}  j _,ノ::i:::::.:.:.:.:.:.|
            ヽ八           ハ_厂}:::::::i:::::.:.:.:.:.:.|
              \`^⌒         ,':::::{: {: }:::::::i:::::.:.:.:.:.:.|
                  |\      イ/:::::::{: {:_}:::::::i:::::.:.:.:.:.: |

しかし、行列の入力が半端なく面倒だな。
入力しやすいデータ構造から行列への変換処理も課題のうちか? 
データ構造も変換処理も思いつかないからやんないけど。

>>710
Va = a1 * V1 + a2 * V2 + ... + a31 * V31
の式を31個分導出して欲しいです。
無茶ですか?
722657 ◆1lOgEs2Vr2 :2008/11/29(土) 23:09:56
>>721
ちょっとできないですね。というかできてたら質問しにこないような…

ガウスの消去法について、少し補足をしておきます
参考になるかはわかりませんが

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8152.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8153.txt
723657 ◆1lOgEnIaoc :2008/11/29(土) 23:33:20
ttp://aprd.run.buttobi.net/cgi-bin/src/aprd0022.jpg
とりあえず解答になる電位を図にしてみました
Cでこれを算出してください
どなたかお願いします
724657 ◆3l99NbVdNE :2008/11/29(土) 23:55:54
トリップを変更します。

うっかり消してしまいました。
725721:2008/11/30(日) 00:03:27
>>722
よくよく考えてみたら、ステップ実行で電圧を収束させる課題の気がしてきたけど、
講義の内容はどうだった?
726657 ◆3l99NbVdNE :2008/11/30(日) 00:07:58
以前のトリップがわかったので本物という証明においておきます。
#+`+`+`+`

>>725
講義では電圧云々には触れてませんでしたね
理系の学校なので他の授業でやっているだろう、みたいな言い方をされました
(できないわけですが)
727デフォルトの名無しさん:2008/11/30(日) 00:18:41
キルヒホッフの法則でぐぐって自分で勉強しろ
728711:2008/11/30(日) 00:34:01
すいませんまとめて書いてください。
補足
11個買うと100*10+90です
729デフォルトの名無しさん:2008/11/30(日) 00:37:43
730デフォルトの名無しさん:2008/11/30(日) 00:47:38
>>725
未知数と方程式の数が同一の線型方程式解法までヒントだされてるんだから
収束させるような反復計算は不要でしょ
キルヒホッフの法則は高校時代に習ったもんだが今の3年からゆとりなんだよな
731デフォルトの名無しさん:2008/11/30(日) 00:49:13
>>722
だからここにいるほとんどの人はガウスの消去法ぐらいは知っている
問題は連立方程式の立て方が分からない事だ
732♯shinshu:2008/11/30(日) 00:52:00
[1] 授業単元:c言語と数値計算
[2] 問題文:(ガウスザイデル法を用いて最低四元の一次連立方程式を解くプログラムを作成せよ。尚、プログラムはキーボードからの入力に対するもので、収束判定とピボット選択を必ず入れること。)
[3] 環境
 [3.1] OS: (WindowsXP)
 [3.2] コンパイラ名とバージョン: (cygwin2007)
 [3.3] 言語: (C)
[4] 期限: ([2008年12月01日09:00まで]
[5] その他の制限: (授業で習ったのはfor文やif文などの本当に初歩の初歩ですので初心者向けにお願いします)

以上よろしくお願いします
733デフォルトの名無しさん:2008/11/30(日) 00:54:48
>>732
マルチ?
734デフォルトの名無しさん:2008/11/30(日) 00:59:28
#ではなく♯なんだな
735デフォルトの名無しさん:2008/11/30(日) 01:05:25
>>733
先に書いた方がなんとなくスレチな気がしたので一応こちらに書き直しました。
マズかったでしょうか?
736デフォルトの名無しさん:2008/11/30(日) 01:07:45
>>735
なら元スレに一言書いとけよ。
737デフォルトの名無しさん:2008/11/30(日) 01:08:38
>>736
すみませんでした。
今から書いてきます
738デフォルトの名無しさん:2008/11/30(日) 01:59:39
>>657
8154.txt
行列だけやってみた。こうじゃないかなー?
自分機械なんで正確さは保証しない
739デフォルトの名無しさん:2008/11/30(日) 02:09:41
>>738
電流の方向がアッー
740デフォルトの名無しさん:2008/11/30(日) 02:22:31
逆かな?www
どっちでもいーきがしたんだけど

解いてないからわかんないな
これだからゆとりは
741デフォルトの名無しさん:2008/11/30(日) 02:50:09
なるほど。キルヒホッフの法則を使えば、IをVに直すのが簡単になるなのか。
742デフォルトの名無しさん:2008/11/30(日) 03:39:50
[1] 授業単元  二重ループ
[2] 問題文
for文を用いて二つの正の整数値width(幅),height(高さ)を読み込む。
長方形を描くときに,ふちだけ*文字を出力するようにする。長方形の中央部は,スペース
文字を使ってあける。もしwidth が5,height が4 であれば,次のように出力される。
*****
*   *
*   *
*****

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語:C++
[4] 期限:2008年12月2日10:40まで

よろしくお願いします。
743デフォルトの名無しさん:2008/11/30(日) 03:45:49
>>742
#include <iostream>

int main()
{
int w = 0, h = 0;
std::cout << "w = ";
std::cin >> w;
std::cout << "h = ";
std::cin >> h;
for (int i = 0; i < h; ++i) {
if(i == 0 || i == h - 1)
for (int j = 0; j < w; ++j) {
std::cout << '*';
}
else
for (int j = 0; j < w; ++j) {
if(j == 0 || j == w - 1)
std::cout << '*';
else
std::cout << ' ';
}
std::cout << std::endl;
}
return 0;
}
744デフォルトの名無しさん:2008/11/30(日) 03:52:05
[1] 授業単元:関数
[2] 問題文
二つの関数を作成しなさい
(1) int min_intarray(int data[ ], int n)
この関数は,要素がn 個の配列data の中の最小の値を返すものである。

(2) void print_intarray(int data[ ], int n)
この関数は,要素がn個の配列data のすべての要素を横に並べて出力するものである。
その上で,次のプログラム(main 関数)を利用して,作成した関数が正しく動作しているか
確認しなさい。
int main(void)
{
int a[5] = {3, 5, 1, 2, 4};
int b[10] = {6, 4, 2, 5, 8, -2, 7, 0, 1, 9};
int c[4] = {-2, -3, -4, -1};

printf("%d :", min_intarray(a, 5));
print_intarray(a, 5);

printf("%d :", min_intarray(b, 10));
print_intarray(b, 10);

printf("%d :", min_intarray(c, 4));
print_intarray(c, 4);
return 0;
}
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語:C++
[4] 期限:2008年12月2日10:40まで

よろしくお願いします。
745デフォルトの名無しさん:2008/11/30(日) 03:56:21
[1] 授業単元:関数
[2] 問題文
関数double area(double w, double h)を作成しなさい。この関数は,w を長方形の
幅,h を長方形の高さと見なして,その長方形の面積を計算する。ただし,w 又はh が負
の値の場合は,長方形の面積はゼロとすることにする。関数を定義した上で,次のような
プログラム(main 関数)を作成しなさい。

(1) 二つの実数値width(幅),height(高さ)を読み込む。長方形の面積を求めて出力し
なさい。

(2) 四つの実数値width1, height1, width2, height2 を読み込む(一つ目の長方形の幅,一
つ目の長方形の高さ,二つ目の長方形の幅,二つ目の長方形の高さを意味する)。二つ
の長方形の面積を出力し,さらに,一つ目の長方形と,二つ目の長方形とどちらが大き
いのか,又は同じ大きさなのかを出力しなさい。

 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語:C++
[4] 期限:2008年12月2日10:40まで

よろしくお願いします。
746デフォルトの名無しさん:2008/11/30(日) 03:57:11
>>743
ありがとうございます!
747デフォルトの名無しさん:2008/11/30(日) 03:58:17
>>744
#include<algorithm>
#include<iterator>
#include<iostream>
int min_intarray(int data[ ], int n) {
return *std::min_element(data,data+n);
}
void print_intarray(int data[ ], int n){
copy(data,data+n,std::ostream_iterator<int>(std::cout," "));
std::cout<<std::endl;
}
748デフォルトの名無しさん:2008/11/30(日) 04:08:12
>>744>>745に追記です
初心者なので難しい関数は避けてください。
すみませんがよろしくお願いします。
749デフォルトの名無しさん:2008/11/30(日) 04:31:13
>>745
#include <stdio.h>
double area(double w,double h){
    if(w <0 || h <0) return 0;
    return w*h;
}
int main(int argc,char **argv){
    double height,width,height1,width1,height2,width2,area1,area2;
//(1)
    printf("幅:\t");
    scanf_s("%lf",&width);
    printf("高さ:\t");
    scanf_s("%lf",&height);
    printf("面積:\t%lf\n",area(width,height));
    printf("\n");
//(2)   
    printf("幅1:\t");
    scanf_s("%lf",&width1);
    printf("高さ1:\t");
    scanf_s("%lf",&height1);
    printf("面積1:\t%lf\n",area1 = area(width1,height1));
    printf("幅2:\t");
    scanf_s("%lf",&width2);
    printf("高さ2:\t");
    scanf_s("%lf",&height2);
    printf("面積2:\t%lf\n",area2 = area(width2,height2));
    printf("\n");
    if(area1 == area2) printf("同じ大きさ\n");
    else if(area1 < area2) printf("二つ目の長方形の方が大きい\n");
    else printf("一つ目の長方形の方が大きい\n");
    return 0;
}
750デフォルトの名無しさん:2008/11/30(日) 05:13:51
>>730
おっしゃる意味がわからないのですが?ヤコビ法とかありますが。
751デフォルトの名無しさん:2008/11/30(日) 05:17:52
>>730
おまえさぁ、ゆとりゆとりってうるせーよ、2次方程式の解w
752デフォルトの名無しさん:2008/11/30(日) 05:18:34
469 名前:デフォルトの名無しさん 投稿日:2008/11/26(水) 06:51:21
>>443
いいえ。a == 0 のときなども含めて「二次方程式を解く」と表現して問題はありません。昔は高校の数Tではそうだったんですが。
これが、ゆ と り 教 育なんですね。驚きました。
753750=469:2008/11/30(日) 05:33:13
>>751
ん?レスつける先をまちがえていますよ。「ゆとりゆとりってうるさい」のは私なんですけれども。
754デフォルトの名無しさん:2008/11/30(日) 05:46:25
うわぁ〜〜、このスレで自分勝手な基準で他人を見下す、引きこもり基地外かよ・・・
きめぇ。お前、性格が狂ってんな。日頃、まともに相手にされていないか、
低レベルの学校の講師か?お前以上の人間なんて、世の中腐るほどいるぞ?
もっと社会を広い目で見ろよ、な?変な気を起こすなよ。まだこれからも
人間社会に未来はあるし、お前にも老いて死ぬまでに時間はあるだろうし。
755デフォルトの名無しさん:2008/11/30(日) 06:26:49
>>750
そこまで分かってるんなら自分で解けよカス
756デフォルトの名無しさん:2008/11/30(日) 07:15:48
[1] 授業単元:Linuxプログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8156.zip
[3]環境
 [3.1] Linux Debian
 [3.2] gcc 4.1.2
 [3.3] C
[4] 期限: 12/1(月)朝9時くらいまでに出来ると助かります。
[5] 補足
C言語初心者です。ちょっと面倒なプログラムですみません。ソケット通信プログラムを
作成する問題です。問題の詳細は添付のURLをご覧下さい。

1問目はウェブで調べた内容を参考にしてサーバー/クライアント間でメッセージの
送受信をするというベーシックなところまでは出来ました。問題は、これをクライアント
から受け取った単語をサーバ側で/usr/share/dict/words辞書と照らし合わし、存在可否
結果を返すようにしたいです。なので僕がアップしたファイルに修正/追記してほしいです。
2問あって2問目の方はもっと難しいです。問題の仕様が曖昧だと感じた場合は、適当な
感じでも構わないです。よろしくお願いします。
757デフォルトの名無しさん:2008/11/30(日) 09:22:27
[1] 授業単元: 電子計算機
[2] 問題文: 8bitの2進数を16進数、10進数に変換するプログラムを示せ。ただし、負数、正数について示せ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler
 [3.3] 言語: C言語
[4] 期限: ([2008年12月2日まで)
[5] 補足: 正数の場合は何とかなりましたが負数の場合が…
      両方を処理するプログラムでも、別々に処理するプログラムでもOKです。

      宜しくお願いします。
758デフォルトの名無しさん:2008/11/30(日) 09:24:47
先頭ビットを符号ビットとして遣えばいいだけの話じゃなくって?
759デフォルトの名無しさん:2008/11/30(日) 09:55:20
>>757
既に作ったものを提示したら?
760デフォルトの名無しさん:2008/11/30(日) 10:34:23
>>757
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8157.c
たまにはクソースを。BPBを変えてもイケまっせ。
761デフォルトの名無しさん:2008/11/30(日) 10:37:58
って、16進数のところをやってなかった、すまそ。ちと削除。
762デフォルトの名無しさん:2008/11/30(日) 12:25:05
>>757 よっしゃ、次こそ、きんも〜なクソースでw
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8158.c
763デフォルトの名無しさん:2008/11/30(日) 12:47:41
>>747>>749
ありがとうございます!
764デフォルトの名無しさん:2008/11/30(日) 13:22:47
どなたか>>732をお願いします
765デフォルトの名無しさん:2008/11/30(日) 14:32:38
どなたか>>720をお願いします

どんな簡単なプログラムでも良いので
766デフォルトの名無しさん:2008/11/30(日) 14:37:38
>>765
簡単なのでいいとかいうなら自分で作れば?
767デフォルトの名無しさん:2008/11/30(日) 14:40:12
>>765
#include <stdlib.h>
#include <stdio.h>
int main()
{
FILE *fp;
fp = fopen("t.txt", "w");
fwrite("caster", 1, 6, fp);
fflush(fp);
fclose(fp);
return 0;
}
768デフォルトの名無しさん:2008/11/30(日) 15:37:45
陸上競技の100mのタイム[s]を入力したとき
平均速度を[m/s]と[km/h]の単位で小数第1位まで
出力するプログラムをつくりなさい。
769デフォルトの名無しさん:2008/11/30(日) 15:43:02
>>768
#include <stdio.h>
int main(void){
double t;
printf("陸上競技の100mのタイム[s]: ");
scanf("%lf", &t);
printf("平均速度 %.1lf[m/s]\n", t / 100);
printf("平均速度 %.1lf[km/h]\n", t * 3.6 / 100);
return 0;
}
770デフォルトの名無しさん:2008/11/30(日) 16:01:39
>>769
ありがとう。
771デフォルトの名無しさん:2008/11/30(日) 16:18:41
>>769
@なんでfloatじゃなくてdoubleを使うんですか?
Aなんで3.6をかけるんですか?
772デフォルトの名無しさん:2008/11/30(日) 16:20:22
>>771
時速だからだろ。
60*60=360で時速でm/hがでる
これの1000倍だろ
773デフォルトの名無しさん:2008/11/30(日) 16:21:37
60*60=360 すげー
774デフォルトの名無しさん:2008/11/30(日) 16:25:05
60*60=3600でkmに単位あわせるのに1000でわるから。

ちょ、ちょっと間違えただけなんだからね!
775デフォルトの名無しさん:2008/11/30(日) 16:26:55
正しくは60*60=3600
776デフォルトの名無しさん:2008/11/30(日) 16:30:12
doubleの理由はなんですか?
777デフォルトの名無しさん:2008/11/30(日) 16:31:29
>>776
精度の高い計算をしてみたかっただけ。
778デフォルトの名無しさん:2008/11/30(日) 16:32:24
>>774
じっ、自分もちょっと茶化してみたかっただけなんだからねっ ♥
779g02dy2:2008/11/30(日) 16:46:54
なるへそ
780デフォルトの名無しさん:2008/11/30(日) 16:51:36
>>776
doubleは浮動小数点におけるintのような存在。特に理由がないときに使う。

Cではmath.hの浮動小数点関数がdoubleしかなく、
floatだと頻繁にdoubleへ変換する機会が現れるのでdoubleより遅くなるのが常識
(今でもprintfのような可変個引数に名残がある)
という時代が長かった。

もちろん、floatだと精度が問題になることも多いし、
今でも理由がなければdoubleを使っておくのが普通。
781デフォルトの名無しさん:2008/11/30(日) 16:57:31
[1] 授業単元: 情報演習
[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8159
.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 12/1
[5] 補足: プログラム自体の問題ではないのですがイマイチ理解できません。お願いします。
782デフォルトの名無しさん:2008/11/30(日) 17:00:06
>>781
構造体のサイズが分かってるんだから、ポインタを構造体のサイズ分だけ移動させればっていう話じゃないの?
783g02dy2:2008/11/30(日) 17:04:33
>>780
へぇ×20
784デフォルトの名無しさん:2008/11/30(日) 17:06:42
いや、まぁ、intってのが曖昧で。short , long があるんだが、とりわけ今時の環境じゃ
long型と同じ扱いだし。short も float も、それぞれの半分のbit幅だが、
浮動小数に於いては、指数部分も大きく差がでるしね・・・
785デフォルトの名無しさん:2008/11/30(日) 17:12:21
unsignedって使いますか?
786デフォルトの名無しさん:2008/11/30(日) 17:16:54
使いますよ。
787デフォルトの名無しさん:2008/11/30(日) 17:28:47
C言語は最強ですか?
788デフォルトの名無しさん:2008/11/30(日) 17:29:47
C言語は逆に何でも出来るので使う人間の心持次第何にかに特化した言語ではない
ただの、オールラウンダー
789デフォルトの名無しさん:2008/11/30(日) 17:30:02
前提条件がつけば、どの言語も最強になるさ
C言語が最強であると仮定しても、いろんな意味を考えると
最強になれない場合がある
790デフォルトの名無しさん:2008/11/30(日) 17:36:07
C言語を極めるには何年かかりますか?
791デフォルトの名無しさん:2008/11/30(日) 17:39:00
>>790
極めなくてもすぐにそこそこのものは書けるようになりますよ、書き続ければ。
792デフォルトの名無しさん:2008/11/30(日) 17:40:10
>>732
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8160.txt

ピボット選択は部分ピボット選択によった。
793デフォルトの名無しさん:2008/11/30(日) 17:41:38
あ、ごめん
×#define N 3
○#define N 4
794デフォルトの名無しさん:2008/11/30(日) 17:42:11
もちろんNは5でも6でも7でも好きな物を入れて良い。
795732:2008/11/30(日) 17:47:38
>>792さん
ありがとうございました.
これから自分でも解読してみたいと思います.
796デフォルトの名無しさん:2008/11/30(日) 17:54:22
>>795
×#define N 3 /* 4元 */4
○#define N 4 /* 4元 */

済みませんね、最終チェックを怠ってうpしてしまったので
これだけは最低修正して下さい
そうしないとコンパイルできません
797デフォルトの名無しさん:2008/11/30(日) 18:02:03
C machine使ってる人いますか?
798732:2008/11/30(日) 18:04:34
>>796さん
今コンパイルしてみたのですが, エラーがでてしまいます.
自分でもデバック中ですが, もしよかったら協力していただけないでしょうか?

gauss-seidel.c: In function `main':
gauss-seidel.c:9: error: parse error before numeric constant
gauss-seidel.c:15: error: parse error before numeric constant
gauss-seidel.c:15: error: parse error before ')' token
gauss-seidel.c:16: error: parse error before numeric constant
gauss-seidel.c:16: error: parse error before ')' token
gauss-seidel.c:18: error: `a' undeclared (first use in this function)
799732:2008/11/30(日) 18:05:09
gauss-seidel.c:18: error: (Each undeclared identifier is reported only once
gauss-seidel.c:18: error: for each function it appears in.)
gauss-seidel.c: At top level:
gauss-seidel.c:21: error: parse error before string constant
gauss-seidel.c:21: warning: data definition has no type or storage class
gauss-seidel.c:25: error: parse error before string constant
gauss-seidel.c:25: error: conflicting types for 'scanf'
gauss-seidel.c:25: note: a parameter list with an ellipsis can't match an e
parameter name list declaration
gauss-seidel.c:25: error: conflicting types for 'scanf'
gauss-seidel.c:25: note: a parameter list with an ellipsis can't match an e
parameter name list declaration
gauss-seidel.c:25: warning: data definition has no type or storage class
gauss-seidel.c:28: error: parse error before string constant
gauss-seidel.c:28: warning: data definition has no type or storage class
gauss-seidel.c:32: error: parse error before string constant
gauss-seidel.c:32: warning: data definition has no type or storage class
gauss-seidel.c:37: warning: data definition has no type or storage class
gauss-seidel.c:41: error: parse error before "for"
gauss-seidel.c:43: error: `i' undeclared here (not in a function)
gauss-seidel.c:43: warning: data definition has no type or storage class
gauss-seidel.c:44: error: parse error before "for"
gauss-seidel.c:48: error: redefinition of 'pivot'
800732:2008/11/30(日) 18:05:56
gauss-seidel.c:43: error: previous definition of 'pivot' was here
gauss-seidel.c:48: error: `j' undeclared here (not in a function)
gauss-seidel.c:48: warning: data definition has no type or storage class
gauss-seidel.c:49: error: parse error before '}' token
gauss-seidel.c:55: error: `b' undeclared here (not in a function)
gauss-seidel.c:55: error: variable-size type declared outside of any functi
gauss-seidel.c:55: error: variable-sized object may not be initialized
gauss-seidel.c:55: warning: data definition has no type or storage class
gauss-seidel.c:56: error: parse error before '}' token
gauss-seidel.c:66: error: `a' undeclared here (not in a function)
gauss-seidel.c:66: error: `sum' undeclared here (not in a function)
gauss-seidel.c:66: warning: data definition has no type or storage class
gauss-seidel.c:67: error: parse error before '+=' token
gauss-seidel.c:69: warning: data definition has no type or storage class
gauss-seidel.c:70: error: parse error before '}' token
gauss-seidel.c:73: error: parse error before string constant
gauss-seidel.c:73: warning: data definition has no type or storage class
gauss-seidel.c:55: error: storage size of `b' isn't known
gauss-seidel.c:69: error: storage size of `x' isn't known
801732:2008/11/30(日) 18:12:03
>>796さん
すみません、無事にコンパイルできました.
ご協力いただきありがとうございました
802デフォルトの名無しさん:2008/11/30(日) 18:14:05
>>798
誤: #define N 3 /* 4元 */4
正: #define N 3 /* 4元 */
803732:2008/11/30(日) 18:17:10
>>802さん
わざわざありがとうございます.
また, 別の課題でお世話になることがあるかもしれませんが
そのときはよろしくお願いします.
(このたびは解説付きのわかりすいプログラム誠にありがとうございました)
804デフォルトの名無しさん:2008/11/30(日) 18:36:15
[1] 授業単元:アルゴリズム論
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8161.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 12月10日21:00まで
[5] その他の制限:特になし

自作のソース:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8162.txt
上のものだと木の生成後、根の内容(整数)は出力できるのですが、以降の節に巡回してくれません。
(ソース中のset_node、addは別ファイル(B-tree.h)から呼び出ししています。長くなるので省略しましたが必要があれば掲示します)

よろしくお願いします。
805デフォルトの名無しさん:2008/11/30(日) 19:47:12
期限過ぎてますが、どなたか>>58のAお願いします
806デフォルトの名無しさん:2008/11/30(日) 20:49:59
807 ◆a0MxWqf9PE :2008/11/30(日) 21:54:58
[1] 授業単元:文字列処理
[2] 問題文(含コード&リンク):入力された文字列中に大文字のX、小文字のx、大文字のY、小文字のyが何文字あるか調べ、結果を出力するプログラムを作れ
[例]
入力:AWTXYXMPWPDxyDGmg
大文字のX:2文字、小文字のx:1文字、大文字のY:1文字、小文字のy:1文字

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2008年12月1日23:00まで
[5] その他の制限:特になし。

よろしくお願いします。
808デフォルトの名無しさん:2008/11/30(日) 22:08:01
>>807
#include <stdio.h>
int main(void)
{
int lx = 0, sx = 0, ly = 0, sy = 0;
int i = 0;
char input[100];
scanf("%s", input);
while (input[i] != NULL) {
switch (input[i]) {
case 'X':
lx++;
break;
case 'x':
sx++;
break;
case 'Y':
ly++;
break;
case 'y':
sy++;
break;
}
i++;
}
printf("大文字のX:%d個\n", lx);
printf("小文字のx:%d個\n", sx);
printf("大文字のY:%d個\n", ly);
printf("小文字のy:%d個\n", sy);
return 0;
}
809デフォルトの名無しさん:2008/11/30(日) 22:47:20
806ありがとう
810デフォルトの名無しさん:2008/11/30(日) 23:35:08
>>680さん
ありがとうございました><
811デフォルトの名無しさん:2008/12/01(月) 03:27:49
もうほんとエラー出て無理です助けてください…。
全てまとめて書き込もうと思ったら文字数が多すぎるとか改行が多すぎるとか言われてしまいました。
DLkeyもDELkeyも「null」です。詳細内容全て記載してあります。
宜しくお願いします。。
http://upsurusuru.hp.infoseek.co.jp/cgi-bin/src/up3284.txt.html
812811:2008/12/01(月) 03:32:56
ひとつエラーが出ましたが記載を忘れていました。

C:\Documents and Settings\(ユーザー名)\デスクトップ>bcc32 lexico.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
lexico.c:
警告 W8004 lexico.c 45: 'mc' に代入した値は使われていない(関数 main )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

失礼しました。宜しくお願い致します。
813デフォルトの名無しさん:2008/12/01(月) 03:50:25
>>811 2箇所めっけた。もうちょっとだったな
for(a = 0; a < b; b++) { ⇒ for(a = 0; a < b; a++) {
puts(tango[c]); ⇒ puts(tango[mc]);
814デフォルトの名無しさん:2008/12/01(月) 03:56:56
>>811
当方の環境はcygwin/WindowsXP, 処理系は gcc 3.4.4 です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8167.txt
815811:2008/12/01(月) 04:06:35
>>813
ありがとうございます…!!完璧に動きました!!!!
やっと・・・やっと寝れます・・・。ホント助かりました(;;)

>>814
ありがとうございます!!
ただ、flagの意味が微妙に難しくて分からないので今回は>>813さんに甘えさせて頂きます。

こんな真夜中に、大変お手数お掛けしました…。
隔週で課題が出るので、もしまたどうしても詰まった時はお願い致します…!
ありがとうございました!
816デフォルトの名無しさん:2008/12/01(月) 10:32:31

[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8135.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年12月6日23:59
[5] その他の制限:

よろしくお願いします
817デフォルトの名無しさん:2008/12/01(月) 11:01:52
>>816
7-1
↓コメントはずす
//void init_stack(struct stack *target);
//char push(struct stack *target, char push_data);
//char pop(struct stack *target);

target->list[****] = push_data;

target->list[target->num_of_data] = push_data;

pop_data = target->list[****];

pop_data = target->list[target->num_of_data - 1];


818デフォルトの名無しさん:2008/12/01(月) 11:08:58
[1] 授業単元:アルゴリズム論
[2] 問題文(含コード&リンク):
1.data.txtをつくる
  (データの中身は、20個以内の整数をスペースで区切る。例:2 34 33 62 2 712 等)
2.先ほどのdata.txtから数値を順に読み取り、ソートする。
  (int s[21]に格納する。(先にs[21]にすべて-1を入れておく(初期化)))
3.printfで「あなたが探したいデータを入力してください。」→入力
4.ソートされたs[]を2部探索法で探す。
5.データがあれば「〇番目にあります。」なければ「ありません。」と返す。

[3] 環境
 [3.1] OS: (Linux)
 [3.2] コンパイラ名とバージョン: (gcc)
 [3.3] 言語: (C)
[4] 期限: ([2008年12月6日23:59まで])
[5] その他の制限: 制限はないです。
          C言語を3年前に習ったので全く分かりません。
          宜しく御願い致します。
819817:2008/12/01(月) 11:24:48
>>816
7-1 補足
構造体宣言の } のあとにセミコロン追加
init_stac, push, pop 関数の定義部にプロトタイプと同じく
void, char, char 型宣言を追加
push 関数の return_data_check; のコメントを外す
820817:2008/12/01(月) 11:29:11
>>816
7-1 の while 以降を以下のように変更
int rev = 0;
while(string[current] != '\0')
{
if(string[current] == '#'){
while(s.num_of_data > 0)
reverse[rev++] = pop(&s);
reverse[rev++] = '#';
} else {
push(&s, string[current]);
}
current++;
}
while(s.num_of_data > 0)
reverse[rev++] = pop(&s);
reverse[rev] = '\0';
printf("%s\n",reverse);
821デフォルトの名無しさん:2008/12/01(月) 11:34:14
>>818
#include <stdlib.h>
#include <stdio.h>
int compare(const void *a, const void *b){
return *(const int*)a - *(const int*)b;
}
int main(void){
FILE *inf; int i, s[21], m, n, *find;
char buf[1024], *p;
for(i = 0; i < 21; i++) s[i] = -1;
inf = fopen("data.txt", "r");
if (inf == NULL){
fprintf(stderr, "ファイルdata.txtが開けません。");
return 1;
}
fgets(buf, 1024, inf); p = buf;
for(i = 0; i < 20; i++){
s[i] = strtol(p, &p, 10);
if(*p != '\0') p++; else break;
}
fclose(inf);
m = i;
qsort(s, m, sizeof(int), compare);
printf("あなたが探したいデータを入力してください。");
scanf("%d", &n);
find = bsearch(&n, s, m, sizeof(int), compare);
if (find != NULL) printf("%d番目にあります。\n", find - s + 1);
else printf("ありません。\n");
return 0;
}
822デフォルトの名無しさん:2008/12/01(月) 11:45:04
>>816
7-3
7-1 の while 以降を以下のように変更
while(string[current] != '\0')
{
if(string[current] == '(')
push(&s, string[current]);
else if(string[current] == ')'){
if(pop(&s) == '\0'){
puts("NG");
return 1;
}
}
current++;
}
if(s.num_of_data > 0)
puts("NG");
else
puts("OK");
823817:2008/12/01(月) 11:58:42
>>816
7-4 main 本文 
そのほか関数は 7-1 と同じ
struct stack s;
char string[STACKMAX];
int current, len;
init_stack(&s);
printf("文字列:");
scanf("%s", string);
printf("文字列の長さ:");
scanf("%d", &len);
current = 0;
while(string[current] != '\0')
{
if(current * 2 != len - 1)
if(current < len / 2)
push(&s, string[current]);
else
if(pop(&s) != string[current]){
puts("NG");
return 1;
}
current++;
}
puts("OK");
824756:2008/12/01(月) 12:38:24
すみません。756です。ソケット通信のプログラムでお願いした者ですが、
どなたかお願い出来ないでしょうか?(今見たら、リンクが切れているようだったので
うpろだにアップし直しました。)

http://www2.uploda.org/uporg1824550.zip.html
825デフォルトの名無しさん:2008/12/01(月) 12:47:30
>>819
これは7-2と考えても宜しいでしょうか
826817:2008/12/01(月) 12:54:48
>>825
>>819 は 7-1(>>817)に対する補足
7-2 は >>820
827デフォルトの名無しさん:2008/12/01(月) 13:03:30
>>826
ありがとうございます!助かりました
828 ◆zh1nL90fZk :2008/12/01(月) 13:26:14
[1] 授業単元:プログラミング
[2] 問題文:
入力された文字列の中に「USA」という文字の並びがあるかどうか調べ、結果を出
力するプログラムを作りなさい
[実行例]
入力:TGWQGDUSAPMPWG
"USA"が見つかりました
入力:TGWQGDUMGWAPMPWG
"USA"が見つかりません
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:よくわかりませんが、たぶんgccです
 [3.3] 言語: C
[4] 期限: 2008年12月2日12:00まで
[5] その他の制限:なし

期限が短いですが、よろしくお願いします
829デフォルトの名無しさん:2008/12/01(月) 13:32:55
>>828
#include <stdio.h>
#include <string.h>
int main(void)
{
char s[1024];
while(1){
printf("入力: ");
fgets(s, 1024, stdin);
if (s[0] == '\n') return 0;
if (strstr(s, "USA") != NULL)
printf("\"USA\"が見つかりました\n");
else
printf("\"USA\"が見つかりません\n");
}
return 0;
}
830デフォルトの名無しさん:2008/12/01(月) 14:03:00
>>824
>>756 1問目
server.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8169.txt
client.c は以下の1行を修正
len = recv(sockfd, buf, len, 0);

len = recv(sockfd, buf, BUFSIZ, 0);
831デフォルトの名無しさん:2008/12/01(月) 14:10:03
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8170.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual stdio 2005
 [3.3] 言語: C
[4] 期限: 12/3 21:00
[5] その他の制限:特に無し

よろしくお願いします
832デフォルトの名無しさん:2008/12/01(月) 14:14:31
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):カラー画像を読み込んでRGB空間上に分布を表示しなさい。
[3] 環境
 [3.1] OS: Windows
 [3.2] VC だと思います。
 [3.3] 言語: C++
[4] 期限: 2008年12月3日13:00まで
[5] その他の制限: 制限無し
833デフォルトの名無しさん:2008/12/01(月) 14:33:14
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
整数nをキーボードから入力する。続いてn 個の文字列をキーボードから入力する(文字列の長さは最大20 と仮定してよい)し、その入力した文字列とその長さを出力しなさい。
さらに、文字列の中で最も短いものを最後に出力しなさい。その際,その文字列及び何番目に入力されたものなのかを出力すること。
なお,最短文字列の長さと同じ文字列が複数あった場合は,その中で最も早く入力したものを出力すること。

[3] 環境
 [3.1] OS:Win
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語C
[4] 期限:12/1

期限短くて申し訳ないです。どなたかお願いします。
834デフォルトの名無しさん:2008/12/01(月) 14:35:54
>>828 おいどんも、きしょ〜すを出すでごわす。
#include <stdio.h>

int main(void)
{
char ch;
const char *str="USA",*p;

p=str;
printf("入力:");
do{
ch=getchar();
if(ch==*p) p++;
else {
p=str;
if(*p==ch) p++;
}
}while(ch!='\n' && ch!=EOF && *p);

printf("\"%s\"が",str);
if(*p!='\0') printf("見つかりませんですた。\n");
else printf("見つかりますた。\n");

return 0;
}
835デフォルトの名無しさん:2008/12/01(月) 14:40:10
836756:2008/12/01(月) 14:43:26
>>830
正常動作を確認しました。本当に有り難うございました!今日が期限なのでこれから提出してきます。
2問目の方もお願い出来ると大変助かるのですが。。(2問目はエキストラクレジットで期限があと一週間あります。)
837デフォルトの名無しさん:2008/12/01(月) 14:44:08
>>831
#include <stdio.h>
void ToUpper(char *in, char *out){
while(*in != '\0'){
if(*in >= 'a' && *in <= 'z')
*in += 'A' - 'a';
*out++ = *in++;
}
*out = '\0';
}
int main (void){
char instr[256], outstr[256];
printf("小文字の文字列を入力してください:");
scanf("%s",instr);
ToUpper(instr, outstr);
printf("変換後:%s\n",outstr);
return 0;
}
838837:2008/12/01(月) 14:48:56
>>831
>>837 は main の instr も書き換えてしまうので、こっちの方がベターかな
#include <stdio.h>
void ToUpper(char *in, char *out){
while(*in != '\0'){
if(*in >= 'a' && *in <= 'z')
*out++ = *in++ + 'A' - 'a';
else
*out++ = *in++;
}
*out = '\0';
}
int main (void){
char instr[256], outstr[256];
printf("小文字の文字列を入力してください:");
scanf("%s",instr);
ToUpper(instr, outstr);
printf("変換後:%s\n",outstr);
return 0;
}
839デフォルトの名無しさん:2008/12/01(月) 14:49:31
840デフォルトの名無しさん:2008/12/01(月) 14:57:13
こうだな
*out++ = *in++ -'a' + 'A';
小文字のaからの差を、Aに足してやれば良い。
ASCIIコードでどちらが先か分かっているとは言え。
841756:2008/12/01(月) 15:04:59
>>835>>839
すみません、直後に書き込んでいました。ありがとうございます!
こんなに短時間でプログラム作れるのはすごい。。本当に有り難うございました。
842デフォルトの名無しさん:2008/12/01(月) 15:05:58
>>833 制限とか書いてないので。
#include <stdio.h>
#include <string.h>
int main()
{
char str[21], strmin[21];
int n, len = 0, min = 20, i, imin;
printf("整数:");
scanf("%d", &n);
for(i = 0; i < n; i++){
printf("文字列:");
scanf("%s", str);
len = strlen(str);
if(len < min){
strcpy(strmin, str);
imin = i + 1;
min = len;
}
printf("長さ %d\n", len);
}
printf("最も短い文字列は %d 番目 %s\n", imin, strmin);
return 0;
}
843デフォルトの名無しさん:2008/12/01(月) 15:18:05
>>833
入力された文字列の表示ができてなかった。一度全部入力してから表示するのかな?だとするとこうなる。
#include <stdio.h>
#include <string.h>
int main()
{
char str[10][21], *strmin;
int n, len = 0, min = 20, i, imin;
printf("整数:");
scanf("%d", &n);
if(n > 10)
n = 10;
strmin = str[0];
for(i = 0; i < n; i++){
printf("文字列:");
scanf("%s", str[i]);
}
for(i = 0; i < n; i++){
len = strlen(str[i]);
printf("%s (%d)\n", str[i], len);
if(len < min){
strmin = str[i];
imin = i + 1;
min = len;
}
}
printf("最も短い文字列は %d 番目 %s\n", imin, strmin);
return 0;
}
844デフォルトの名無しさん:2008/12/01(月) 16:53:52
[1] 授業単元 C言語プログラミング演習
[2] 問題文
二つの文字列を入力し、どちらが長いか、辞書順ではどちらが先か、以上2点を満たしたプログラムを作成しなさい。
文字列は小文字アルファベットのみで長さは最大30とする。

[3] 環境 OS:Windows VC 6.0
言語C
[4] 期限:今日中
[その他の制限]特にありません
よろしくお願いします。
845デフォルトの名無しさん:2008/12/01(月) 17:04:15
>>842>>843
早々の回答ありがとうございました。
入力された文字列とは最初に入力するnですよね?
恐らく>>842ので合ってると思います。


いずれにしても大変助かりました。ありがとうございます。
846デフォルトの名無しさん:2008/12/01(月) 17:12:58
>>844
#include <stdio.h>
#include <string.h>
int main(void)
{
char s1[31], s2[31];
int len1, len2, cmp;
printf("文字列1: ");
scanf("%30s", s1);
printf("文字列2: ");
scanf("%30s", s2);
len1 = strlen(s1);
len2 = strlen(s2);
cmp = strcmp(s1, s2);
if(len1 < len2) puts("文字列1の方が長い");
else if(len2 < len1) puts("文字列2の方が長い");
else puts("同じ長さ");
if(cmp < 0) puts("辞書順では文字列1が先");
else if(cmp > 0) puts("辞書順では文字列2が先");
else puts("同じ文字列");
return 0;
}
847デフォルトの名無しさん:2008/12/01(月) 17:14:09
>>846 間違い修正
(誤)
if(len1 < len2) puts("文字列1の方が長い");
else if(len2 < len1) puts("文字列2の方が長い");
(正)
if(len2 < len1) puts("文字列1の方が長い");
else if(len1 < len2) puts("文字列2の方が長い");
848デフォルトの名無しさん:2008/12/01(月) 17:36:32
>>844
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8172.c
MAXの指定を3以上にしても使えまっせ
849デフォルトの名無しさん:2008/12/01(月) 18:17:45
>>837
ありがとうございました
850デフォルトの名無しさん:2008/12/01(月) 18:18:23
>>846-848
ありがとうございましす。ホントに助かりました。

851843:2008/12/01(月) 18:45:10
>>845
NO
入力された文字列とは、nを入力した後に入力を要求されるn個の文字列のこと。
>>842 は、scanf のエコーバックは表示されるが、プログラムで取り込んだ文字列を
表示していない。
852デフォルトの名無しさん:2008/12/01(月) 19:00:37
>>688
本当に有難う御座いました。
大変助かりませんでした。
エラーが7個も出てしまいました。
出来ればもう一度やっていただけないでしょうか?
853デフォルトの名無しさん:2008/12/01(月) 19:18:53
C++ でなくて C の設定でコンパイルしているとエスパー
あるいはコピペミス
854デフォルトの名無しさん:2008/12/01(月) 19:19:04
1] 授業単元: C
[2] 問題文(含コード&リンク): 2個の多項式を入力してその和を求め次数の大きい順に出力する
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8070.txt

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual stadio2008
 [3.3] 言語: C
[4] 期限: 2008年12月5日
[5] その他の制限:事故参照型構造体、線形リストを使う. 基のプログラムを極力変えない
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8174.txt
実行結果は↑のように0を入力すると1つ目の多項式の入力が終わり次に2つ目の入力が始まり0で終わり合計を出力されるものをお願いします
855デフォルトの名無しさん:2008/12/01(月) 19:28:20
>>853
「C言語」って書いてあんだから cstdio とかアウトだろ
#include <stdio.h>
#define BUFSIZE 200
int main(int argc, char **argv)
{
char str[BUFSIZE], rts[BUFSIZE];
int length = 0, i;
printf("文字列を入力:");
scanf("%s", str);
while(str[length] != '\0')
length++;
for(i = 0; i < length; i++) {
rts[i] = str[length - i - 1];
}
rts[length] = '\0';
printf("反転した文字列 = %s\n", rts);
return 0;
}
856デフォルトの名無しさん:2008/12/01(月) 21:33:45
>>821
早々の回答大変助かりました!!ありがとうございます。
857デフォルトの名無しさん:2008/12/01(月) 21:40:09
[1] 授業単元:プログラミング入門
[2] 問題文(含コード&リンク):一つの整数をキーボードから入力する。これをn とする。
続いてn 個の文字列をキーボードから入力する(文字列の長さは最大20 と仮定)。
文字列を入力するとすぐに,入力した文字列とその長さを出力しなさい。
更に文字列の中で最も短いものを最後に出力しなさい。
その際,その文字列及び何番目に入力されたものなのかを出力すること。
なお,最短文字列の長さと同じ文字列が複数あった場合は,その中で最も早く入力したものを出力すること。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VisualC++ 6.0
 [3.3] 言語:C
[4] 期限:12月3日0:00
[5] その他の制限:特にありません

文字列中で最も〜辺りからわからなくなってしまいました。
良ければお願い致します。
858デフォルトの名無しさん:2008/12/01(月) 22:14:42
でじゃぶ?
859デフォルトの名無しさん:2008/12/01(月) 22:22:57
860デフォルトの名無しさん:2008/12/01(月) 22:31:42
>>859
すみません。
一応目を通したつもりだったんですが…恥ずかしいorz
ありがとうございました!
861デフォルトの名無しさん:2008/12/01(月) 22:37:30
[1] C言語
[2] 構造体の配列 構造体のデータを得点で昇順に並び変えてください
[3] 環境
 [3.1] Windows vista
 [3.2] マイクロソフトヴィジュアルスタジオ
 [3.3] 言語: C/
[4] 期限: ([2008年11月21日17;00まで]
[5] プリプロセッサ 、ファイル処理、操作 供用体 データ変換型 記憶クラス
  は習っていません。 qsort もなしでお願いいたします
よろしくお願いいたします。
862デフォルトの名無しさん:2008/12/01(月) 22:38:29
最初の方の宣言文です
# include<stdio.h>
struct tmp{
char name[20];
int bangou;
int ten;
};
void main(void)
{
{
struct tmp data[10]={{"山田",50113,87};
{"浜名",30211,60};
{"飯田",56231,58};
{"岡田",50215,30};
{"今田",60987,89};
{"原田",57892,75};
{"有田",53901,55};
{"清原",53098,72};
{"神山",56221,71};
{"上原",12345,100};
}}
863デフォルトの名無しさん:2008/12/01(月) 23:30:34
>>834遅くなりましたが、ありがとうございました。
864デフォルトの名無しさん:2008/12/01(月) 23:53:06
【質問テンプレ】
[1] 授業単元: Cプログラミング演習
[2] 問題文(含コード&リンク): キーボードから10個の整数を読み込んで、それについて二分探索を行うプログラムを再帰を使って作りなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Visual studio2005
 [3.3] 言語: C
[4] 期限: 12月17日
[5] その他の制限: ポインタはまだ習っていません。よろしくお願いします。
865デフォルトの名無しさん:2008/12/02(火) 00:23:57
>>862
続きから
struct tmp w;
int i, j;
for(i = 0; i < 10; i++) {
for(j = 1; j < i; j++) {
if (data[i].ten < data[j].ten) {
w = data[i];
data[i] = data[j];
data[j] = w;
}
}
}
for(i = 0; i < 10; i++)
printf("名前:%s 番号:%5d 特典:%3d\n", data[i].name, data[i].bangou, data[i].ten);
return 0;
}

ちなみに >>862 の宣言文は以下の誤りがある
struct tmp の前の { が余計
{"山田", 50113, 87};

{"山田", 50113, 87}, ← 各要素間の区切りはカンマ

}; ← 宣言の最後はセミコロン
866デフォルトの名無しさん:2008/12/02(火) 00:29:14
なぁ〜〜にぃ〜〜!?やっちまったな!
867デフォルトの名無しさん:2008/12/02(火) 00:36:54
いわゆるクールポコっちまったってやつだな
868デフォルトの名無しさん:2008/12/02(火) 00:40:05
>>864
二分探索って具体的に何をしろっていう課題なの?

本当は二分探索木を作って昇順(または降順)で表示しろって言いたいのかな?
869デフォルトの名無しさん:2008/12/02(火) 01:15:11
>>868
ある整数を入力してそれが読み込んだ10個の整数の中に含まれていれば、「含まれていた配列の番号+1」を表示させて、そうでなければ、「ありません」と表示させる。
これを再帰を使って作れという課題です。
870デフォルトの名無しさん:2008/12/02(火) 01:28:19
>>869
つまり11回整数を入力することになるの?
871デフォルトの名無しさん:2008/12/02(火) 01:32:32
>>869
なんかおかしい気がする
二分探索はソートしてからじゃないと使えないんだがどうすればいい?
別領域に添え字と内容のセットの構造体の配列をとって
そっちに移してからそれをソートして二分探索でもするか?
872デフォルトの名無しさん:2008/12/02(火) 02:04:19
ニートしてソ分って読んだ俺は、何かがおかしい。
873デフォルトの名無しさん:2008/12/02(火) 02:10:36
>869
入力値をソートしながら配列に格納していくのかな? "挿入ソート"だっけ?
874デフォルトの名無しさん:2008/12/02(火) 02:27:51
>>865
本当にありがとうございました!!
助かりました!
875デフォルトの名無しさん:2008/12/02(火) 08:43:41
[1] 計算幾何
[2] 1.入力:2次元平面上の2つの線分s1、s2(線分はその両端点(座標は整数)を指定することによって入力とする)
    出力:s1とs2が交差するか否か(yes→1、no→0)
  
  2・入力:2次元平面上のn点からなるS(ただしどの3点も一直線上にない)
    出力:Sの凸包(凸包定義する多角形の頂点を順序つきで出力)

[3]
[3.1] OS:Windows
[3.2] すいません、わかりません
[3.3] 言語:C
[4] 期限:12月8日
[5] main関数以外に1つ以上の関数を定義する。
  構造体、配列、if、for、whileぐらいで記述していただければと。。
  考察を書く際のポイント等も教えていただけると嬉しいです。



876デフォルトの名無しさん:2008/12/02(火) 10:30:49
>>875
1問目 考え方は、s1 の直線の式に s2 の2点をそれぞれ代入して結果を掛け合わせたものの符号で判定
#include <stdio.h>
struct segment {
int x1; int y1;
int x2; int y2;
};
int chk_cross(struct segment s1, struct segment s2)
{
return ((s1.x1 - s1.x2) * (s2.y1 - s1.y1) + (s1.y1 - s1.y2) * (s1.x1 - s2.x1))
* ((s1.x1 - s1.x2) * (s2.y2 - s1.y1) + (s1.y1 - s1.y2) * (s1.x1 - s2.x2))
< 0;
}
int main()
{
struct segment s1, s2;
printf("線分 s1\nx1 y1:");
scanf("%d %d", &s1.x1, &s1.y1);
printf("x2 y2:");
scanf("%d %d", &s1.x2, &s1.y2);
printf("線分 s2\nx1 y1:");
scanf("%d %d", &s2.x1, &s2.y1);
printf("x2 y2:");
scanf("%d %d", &s2.x2, &s2.y2);
if (chk_cross(s1, s2))
printf("s1 と s2 は交わります\n");
else
printf("s1 と s2 は交わりません\n");
return 0;
}
877デフォルトの名無しさん:2008/12/02(火) 10:52:18
>>875
1問目だけ。
>>876だけでは足りない気がしたので。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8177.c
878デフォルトの名無しさん:2008/12/02(火) 11:28:29
[1] C言語
[2] 標準入力から文字列を入力すると、ランダムな漢字1文字を出力するプログラムを作れ。表示すべき漢字1文字の候補は予め決めておく。違う文字列を入力したら違う結果が出て、同じ文字列を入力したら常に同じ結果が出るようにする。
[3.1]Mac
[3.2] すみません、よくわかりません
[3.3] C
[4] 12月3日まで

よろしくお願いいたします。
879876:2008/12/02(火) 11:37:59
>>875
2問目
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8178.txt

考え方は、1問目の交差判定を応用して、すべての点でつくられる線分が
交わらなければそれは凸包のエッジをなす原理を用いる。

データ入力は、1つ1つ手入力かファイルリダイレクトで

>>877
どの辺が足りない?計算内容に違いはないようだけど?
880デフォルトの名無しさん:2008/12/02(火) 11:53:46
[1] 授業単元: コンピュータプログラミング
[2] 問題文: ヤコビ法で多元連立一次方程式を解けるようなプログラムを作れ。但し以下のような条件がある
1部分ピボットを入れること
2数値は手入力で行えるようにすること
3計算回数が表示されるようにすること

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4 VC 5.0
 [3.3] 言語: C
[4] 期限: [2008年12月2日17:00まで]
[5] その他の制限:

自分でも頑張ってみましたが分からなく、期限になってしまうのでどなたかお願いします
881デフォルトの名無しさん:2008/12/02(火) 11:56:54
1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 以下の機能を実現するプログラムを作れ:
􀀄 元本と利率を入力できる。ただし、単利と複利そ
れぞれに別の利率を設定することもできる。
􀀄 最初に以下の処理のどちらかをユーザが選んで
実行できる(プログラムとしては1つのもので全
部の機能を提供すること)
􀀉 入力した年数が経過したら、単利・複利それぞれいく
らになるかを表示する。
􀀉 複利の方が(利率が低い場合でも)何年後に単利を追
い越すかを表示する。

いくつか補足・注意

利息や金額を計算する時は、float(もしくは
double)型の変数を使う。
􀂄 小数点以下切捨て:
#include “math.h” を冒頭で書く
floor(x) で x の小数点以下切捨てができる
􀂄 printf(“%.0f”, x); とすれば、実数(浮動小数点
数)を整数かのように画面表示できる
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: visual studio2003 visual c++ win32
 [3.3] 言語: C++
[4] 期限: 12月10日 24:00まで
[5] 繰り返し処理(for)繰り返し(while)を最近習いました。for,whileでお願いします。
882デフォルトの名無しさん:2008/12/02(火) 12:00:50
>>879
直線ABと直線CDの交差を判定するならそれでいいと思うけど
線分ABと線分CDの交差を判定する場合はまずくない?

例えば、線分ABの延長線上に線分CDが
交差しているようなときにも交差しているとなってる。
883デフォルトの名無しさん:2008/12/02(火) 12:35:30
>>882
いや、だから式自体は >>877 とまったく同じなのにどうしてそうなるの?
x1→s1.x1 x2→s1.x2 x3→s2.x1 x4→s2.x2
y1→s1.y1 y2→s1.y2 y3→s2.y1 y4→s2.y2
に置き換えてみ

884デフォルトの名無しさん:2008/12/02(火) 13:59:15
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8179.txt
[3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:12/4
[5] その他の制限: とくになし

まわりでできてる人いなくてよくわからないので
よろしくおねがいします
885デフォルトの名無しさん:2008/12/02(火) 14:39:34
>>884
PBM形式についての説明を授業で受けてるはずだからその資料も上げれ
886デフォルトの名無しさん:2008/12/02(火) 15:18:47
[1] 授業単元:計算数学演習
[2] 問題文(含コード&リンク):
6個の実数 A[0] 〜 A[5] を入力すると、まずそれらの平均値 heikin を表示し,
次に V[i] = (A[i] - heikin)2 を i = 0 〜 5 に対し全て表示し, 最後に V[0] 〜 V[5] の平均値(つまり A[i] の分散)を表示するプログラムを作成せよ.
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 12/2 pm5:00
[5] その他の制限: とくにないです


あと2時間ですが、すみませんよろしくお願いします!
このスレに昨日気づけばどれだけよかったか!
887デフォルトの名無しさん:2008/12/02(火) 15:20:37
888デフォルトの名無しさん:2008/12/02(火) 15:23:27
>>886
V[i] = (A[i] - heikin)2 ← この 2 は *2 ?
889デフォルトの名無しさん:2008/12/02(火) 15:26:23
>>888
すみません、2乗です!
^2です!
890デフォルトの名無しさん:2008/12/02(火) 15:28:28
>>889
やっぱそうだよな分散って書いてあるんだから
#include <stdio.h>

int main()
{
double A[6], heikin = 0.0, V[6], bunsan = 0.0;
int i;
for(i = 0; i < 6; i ++){
printf("実数:");
scanf("%lf", &A[i]);
heikin += A[i];
}
heikin /= 6.0;
printf("平均:%f\n", heikin);
for(i = 0; i < 6; i++){
V[i] = (A[i] - heikin)*(A[i] - heikin);
printf("V[%d] = %f\n", i, V[i]);
bunsan += V[i];
}
bunsan /= 6.0;
printf("分散:%f\n", bunsan);

return 0;
}
891デフォルトの名無しさん:2008/12/02(火) 15:31:57
>>890
早いw
脱帽ですw

本当にありがとうございます!m<_>m
これからlinuxでコンパイルしてたしかめてきます!
892デフォルトの名無しさん:2008/12/02(火) 15:33:06
#include <stdio.h>
int main(void)
{
int A[5],V[5],i,heikin=0,heikin2=0;
for (i=0;i<6;i++){printf("実数を入力してください:");scanf("%d",&A[i]);heikin+=A[i];}
heikin/=6;printf("%d \n",heikin);
for (i=0;i<6;i++){V[i]=(A[i]-heikin)*2;heikin2+=V[i];}printf("%d",heikin2/6);
}
893デフォルトの名無しさん:2008/12/02(火) 16:15:26
制限なしって言ったら、文字列の処理にしても、string.hにある
標準ライブラリを使っても良いってことだよね?
894デフォルトの名無しさん:2008/12/02(火) 18:01:54
>>873
最初から入力値は小さい順ってことでソートする必要はありません。
説明不足で申し訳ない・・・
895デフォルトの名無しさん:2008/12/02(火) 18:05:46
まじか・・・・・
896N,R:2008/12/02(火) 18:43:19
[1] 授業単元:構造体
[2] 問題文(含コード&リンク);
*学籍番号・身長・体重の 3 つのメンバを持つ構造体 struct height_weight を宣言し,さらに typedef 宣言を用いて struct height_weight 型を student として参照できるようにせよ.
student型の配列 a[10] を宣言し,この配列に下記のデータをセットせよ.
キーボードから,身長の下限および体重の下限を入力し,その範囲の学生の学籍番号とその身長および体重を表示するプログラムを作成せよ.
学籍番号・身長・体重のデータとして,次のデータを用いること.
1001 160.5 53.1
1002 173.8 79.2
1003 169.7 65.3
1004 175.3 72.7
1005 187.2 98.9
身長の下限を170,体重の下限を75とした時,
1002 173.8 79.2
1005 187.2 98.9

*上記のプログラミングのstudent 型の構造体のポインタ変数を受取り, その内容を表示する関数 void print_student(student*) を作成せよ.
キーボードから学籍番号を入力すると,print_studentを用いて,その学籍番号の学生の身長と体重が表示されるプログラムを作成せよ.
[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 12月4日(水)まで
[5] その他の制限:特になし
期限が早くてすみません。できたらでいいのでよろしくお願いします
897N,R:2008/12/02(火) 18:45:43
自己レスすみません。友達の写すことにしましたので大丈夫です
898デフォルトの名無しさん:2008/12/02(火) 19:05:25
[1] 授業単元: C
[2] 問題文(含コード&リンク):@http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8184.txt
Ahttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8185.txt
Bhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8186.txt

[3] 環境
 [3.1] OS: Win xp
 [3.2] コンパイラ名とバージョン: visual stadio
 [3.3] 言語: C
[4] 期限: 2008年12月5日
[5] その他の制限: Aは@を3分割するので3つ解答お願いします
899デフォルトの名無しさん:2008/12/02(火) 19:33:40
[1]授業単元:プログラミング1

[2]課題

英文文字列を入力し、英大文字は小文字に、英小文字は大文字に変換して出力する。
ただし、英文字以外は変換しないでそのまま出力する。なお、is〜関数は使用しないこと。

<実行例>
・入力英文:It is necessary to execute the program.

・出力英文:iT IS NECESSARY TO EXECUTE THE PROGRAM.

[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:Microsoft Visual studio 2005
 [3.3] 言語:C言語
[4] 期限:2008年12月18日

よろしくお願いします。
900デフォルトの名無しさん:2008/12/02(火) 19:39:10
>>899
#include<stdio.h>

int main(void){
unsigned char map[256], buf[512];
int i;

for(i=0;i<256;i++) map[i]=i;
for(i=0;i<26;i++) map['a'+i]='A'+i;
for(i=0;i<26;i++) map['A'+i]='a'+i;

fgets(buf, sizeof(buf), stdin);
for(i=0;buf[i];i++) buf[i]=map[buf[i]];
puts(buf);

return 0;
}
901デフォルトの名無しさん:2008/12/02(火) 19:44:50
[1]授業単元:プログラミング1

[2]課題

 キーボードからの英文字列(100文字以内)を入力し、その文字列を反転させて出力する。
反転表示はいずれかの方法で行う。

@文字列を配列に入力し、最後の文字から一文字ずつ取り出して表示する。
A文字列を配列に入力し、最後の文字から一文字ずつ取り出し、別の配列に格納してから表示する。
B文字列をポインタの示す領域に入力し、最後の文字から一文字ずつ取り出して表示する。
C文字列を配列に入力し、配列内で前後交換してから表示する。

[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:Microsoft Visual studio 2005
 [3.3] 言語:C言語
[4] 期限:2008年12月18日

よろしくお願いします。
902デフォルトの名無しさん:2008/12/02(火) 19:49:34
>>900
ありがとうございます。
903デフォルトの名無しさん:2008/12/02(火) 19:51:47
>>901
このスレを文字列とか反転とかで検索したらいくつか見つかるんだが
それを参考にしてはどうだろうか?
904デフォルトの名無しさん:2008/12/02(火) 19:57:30
>>903
すいません^^;
探してみます。
905デフォルトの名無しさん:2008/12/02(火) 20:22:22
>>901
一応

#include <stdio.h>

int main(void)
{
char str[1001];
int i = 0;
printf("1000バイト以内の文字列を入力してください:");
scanf("%s", &str);
while (str[i] != 0)i++;
for (; i >= 0; i--)
if (str[i]!=0)
printf("%c", str[i]);
return 0;
}
906デフォルトの名無しさん:2008/12/02(火) 20:30:11
>>905
ありがとうございます><
907デフォルトの名無しさん:2008/12/02(火) 20:49:37
>>898
@
#include <stdio.h>
#include <stdlib.h>
/* define を使った定義 */
#define MAX 100
#define MIN 0
#define HANI(x, a, b) ((a) > (x) || (x) > (b))
#define HANTEI(x, a) ((x) >= (a))
int main(void)
{
int point, border;
do {
printf("Input your score: ");
scanf("%d", &point);
} while(HANI(point, MIN, MAX));
do {
printf("Input border: ");
scanf("%d", &border);
} while(HANI(border, MIN, MAX));
if(HANTEI(point, border))
puts("合格");
else
puts("不合格");
return 0;
}

908デフォルトの名無しさん:2008/12/02(火) 20:55:06
>>898
A
============== kadai09c.h ==============
#define MAX 100
#define MIN 0
#define HANI(x, a, b) ((a) > (x) || (x) > (b))
#define HANTEI(x, a) ((x) >= (a))
void hantei(void);
============== hantei.c ================
#include <stdio.h>
#include "kadai09c.h"
extern int point, border;
void hantei(void)
{
if(HANTEI(point, border)) puts("合格");
else puts("不合格");
}
============== input.c =================
#include <stdio.h>
#include "kadai09c.h"
int point, border;
int main()
{
do {
printf("Input your score: "); scanf("%d", &point);
} while(HANI(point, MIN, MAX));
do {
printf("Input border: "); scanf("%d", &border);
} while(HANI(border, MIN, MAX));
hantei();
return 0;
}
909デフォルトの名無しさん:2008/12/02(火) 21:02:09
>>880
ですが、期限がすぎてしまいましたがわかる方教えていただけませんか?
910デフォルトの名無しさん:2008/12/02(火) 21:04:50
>>898
B
#include <stdio.h>
#include <stdlib.h>
/* define を使った定義 */
#define NUM 10
#define DEBUG 0
int main(void)
{
int array[NUM];
int *p = array;
int sum = 0, i;
double heikin = 0;

printf("Input %d integer.\n", NUM);
for(i = 0; i < NUM; i++) {
scanf("%d", &array[i]);
sum += *p++;
}
heikin = sum / (double)NUM;
#if DEBUG == 1
printf("Input numbers:\n");
for(i = 0; i < NUM; i++)
printf("%d ", *p++);
printf("\n");
#elif DEBUG == 2
printf("goukei = %d\n", sum);
#endif
printf("heikin = %f \n", heikin);
return 0;
}
911デフォルトの名無しさん:2008/12/02(火) 21:46:47
1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
    ストップウォッチ作成。
    00:00:00.0(確かこのような感じでした)デジタル表示で。
    何かキーを押すと開始して、もう一度押すと止まるという仕組みも。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語: C++でお願いします
[4] 期限:12月5日までです。
[5] その他の制限: 特にないです

お願いします
912デフォルトの名無しさん:2008/12/02(火) 21:59:54
>>911
基本的に環境依存のプログラムになるからどうにかして環境ちゃんと書けやクズ

913デフォルトの名無しさん:2008/12/02(火) 22:05:17
911です
>>912
すみません

環境
OS:Windows XP
コンパイラ名とバージョン:Microsoft Visual studio 2008
言語:c++

です。
914デフォルトの名無しさん:2008/12/02(火) 22:32:41
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8189.txt
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 12月3日まで
[5] その他の制限: 特になし

よろしくお願いします。
915デフォルトの名無しさん:2008/12/02(火) 23:56:08
#include<stdio.h>
typedef struct{
char name[100];
int age;
double height;
double weight;
} PERSONAL_DATA1;
typedef struct{
int person[10];
}PERSONAL_DATA2;

PERSONAL_DATA1 input_personal_data(int num);
void output_personal_data(PERSONAL_DATA2 person[10],int num);

int main(int argc, char *argv[]){
PERSONAL_DATA1 x;
int num,i;
char person[10];

if(argc != 2){
printf("Usage ./test number");
return 0;}
num=atoi(argv[1]);
for(i=0;i<10&&i<num;i++){
person[i]=input_personal_data();
output_personal_data(person,num);
return 0;}}

916デフォルトの名無しさん:2008/12/02(火) 23:56:59
PERSONAL_DATA1 input_personal_data(int num){
PERSONAL_DATA1 x;

printf("name>");
scanf("%c" ,&x.name);
printf("age>");
scanf("%d" ,&x.age);
printf("height>");
scanf("%lf" ,&x.height);
printf("weight>");
scanf("%lf" ,&x.weight);
return x;}

void output_personal_data(PERSONAL_DATA2 person[10],int num){
PERSONAL_DATA1 x;

printf("name>>%s\n" ,x.name);
printf("age>>%d\n" ,x.age);
printf("height>>%lf[cm]\n" ,x.height);
printf("weight>>%lf[kg]\n" ,x.weight);
}

917デフォルトの名無しさん:2008/12/03(水) 00:02:35
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 問題はコマンドライン引数で人数を指定し,人数分のデータを標準入力(キーボード)から構造体配列に入力し,標準出力(ディスプレイ)に出力するプログラム
個人データの集合を格納するための構造体配列PERSONAL_DATAを定義せよ.
PERSONAL_DATA person[10]; /* 10人分用意 */ 
構造体配列personの要素数はdefine文を用いて定義すること
個人データを標準入力から入力し,戻り値としてPERSONAL_DATA型構造体を返す関数を作成せよ.
関数のプロトタイプ(案) PERSONAL_DATA input_personal_data(int num);
戻り値を構造体配列に順番に代入するようにすること.引数の整数型変数numは何番目の入力かを記すために使用(無くても良い).
データを格納しているPERSONAL_DATA型構造体変数を引数として受け取り,個人データを標準出力に出力する関数を作成せよ.
関数のプロトタイプ(案) void output_personal_data(PERSONAL_DATA per[], int num);
※ 引数が構造体配列変数となっている点に注意すること
引数の整数型変数numを用いて表示人数を関数に渡している
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語:C
[4] 期限: 無期限
[5] その他の制限:>>915>>916は自分なりに考えたプログラムです。
どこが悪いかわかりません。使う関数などは上のプログラムの内容に使われるもののみでおねがいします。
918デフォルトの名無しさん:2008/12/03(水) 00:13:20
>>864ですが、いろいろ追加して分かりにくくなっているので、修正しました。
[1] 授業単元: Cプログラミング演習
[2] 問題文(含コード&リンク): キーボードから10個の整数を小さい順に読み込む。
               その後新たにある整数を入力したとき、それが10個の整数のなかにあれば、
               「その配列の番号+1」を表示させてなかったら
               「ありません」と表示させる2分探索のプログラムを再帰を使って作りなさい。
               
実行例:{1,3,4,6,7,9,11,24,31,35}としたら
     9:6番目にあります。
     15:ありません。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Visual studio2005
 [3.3] 言語: C
[4] 期限: 12月17日
[5] その他の制限: ポインタはまだ習っていません。再帰は2分探索の部分で関数を使います。
  どなたかよろしくお願いします。



919910:2008/12/03(水) 00:28:33
>>898
>>910 はコピペしながら修正してしまったので、一部バグがが混入。
scanf の for ループを抜けた直後に
p = array; を追加してくらっさい。
920デフォルトの名無しさん:2008/12/03(水) 00:32:26
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):以下の2つのプログラムをデバックせよ
http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8182.c
http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8183.c
[3] 環境
 [3.1] OS: Windows xp
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 12/4 18:00
[5] その他の制限: 特になし
  よろしくお願いいたします
921デフォルトの名無しさん:2008/12/03(水) 00:33:55
どうでもいいけど「キーボードからよみこむ」とかいう表現なんとかならないもんかな。
これだけよく書かれているのをみると一般的に浸透してしまっているようだが、
標準入力から読み込みたいのか、コマンドライン引数で渡すのか分かりにくい。
まぁ、普通は前者なのかな。
922デフォルトの名無しさん:2008/12/03(水) 00:39:53
>>920
デバッグ結果を求めているの
それとも、これらのソースの間違っている部分を修正してほしいの
923デフォルトの名無しさん:2008/12/03(水) 01:00:32
>>881

881で質問した者なのですが、どなたかわかる方はいらっしゃいませんか?
プログラムを最初に選ばせて、計算するのですがプログラムが書けなくて困っています。
924デフォルトの名無しさん:2008/12/03(水) 01:03:36
>>921
その表現に限らず日本語おかしいの大杉だよね
問題が毎度パターン化してるからエスパーも多いと思うけど
925デフォルトの名無しさん:2008/12/03(水) 01:20:31
[1] 授業単元:プログラミング
[2] 問題文: 処理前:AbcefGhijklMnopqrstuvw
処理後:wvutsrqponMlkjihGfecbA
#include<stdio.h>
#include<stdlib.h>

void RevStr(char *p, char *rp, int n);

int main(void){
char *str="KantoGakuinUniversity",*rst;
int k,num;
[文字数を算出して、領域確保する処理]
RevStr(引数を記述する);
printf("処理前:%s\n",str);
printf("処理後:%s\n",rstr);
[確保領域を解放する処理]
return 0;
}
void RevStr(char *p, char *rp, int n)
[文字列を逆順にする処理]
[3] 環境:Visual studio2005
 [3.1] OS: (Windowsxp
 [3.2] Visual studio2005
 [3.3] 言語:C
[4] 期限:12/8 10:30
[5] その他の制限:特になし

よろしくお願いします
926デフォルトの名無しさん:2008/12/03(水) 01:50:21
>>923
>>923
#include <math.h>
#include <iostream>
class cash {
protected:
double ga; double yen; double ri;
public:
cash(double ganpon, double riritsu) : ga(ganpon), yen(ganpon),ri(riritsu) { }
virtual void addYear() = 0; void show() { std::cout << floor(yen);}
bool operator<=(const cash& op) { return yen <= op.yen ? true : false;}
};
class hukuri : public cash {
public:
void addYear() { yen *= 1.0 + ri;} hukuri(double ganpon, double riritsu) : cash(ganpon, riritsu){ }};
class tanri : public cash {
public:
void addYear() { yen += ga * ri;} tanri(double ganpon, double riritsu) : cash(ganpon, riritsu){ }};
int main()
{ double gan, rit, rih; int y, ay = 0;
std::cout << "元本: " << std::endl; std::cin >> gan;
std::cout << "単利の利率: " << std::endl; std::cin >> rit; tanri t(gan, rit);
std::cout << "複利の利率: " << std::endl; std::cin >> rih; hukuri h(gan, rih);
std::cout << "年数: " << std::endl; std::cin >> y;
for (int i = 0; i < y; ++i) { h.addYear(); t.addYear();
if (t <= h && ay == 0) ay = i + 1; }
std::cout << "単利"; t.show(); std::cout << "円" << std::endl;
std::cout << "複利"; h.show(); std::cout << "円" << std::endl;
if (rit > rih) std::cout << "追い付くのは" << ay << "年" << std::endl;
return 0;}
927デフォルトの名無しさん:2008/12/03(水) 01:50:27
>>911
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8190.c
C言語で、クソースゆえ、異論は認める。
928デフォルトの名無しさん:2008/12/03(水) 01:52:10
>>921 前者です。
>>924 例えばほかにどこ?
929デフォルトの名無しさん:2008/12/03(水) 01:55:00
>>911
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8191.c
っと、ちと経過時間を間違えた。
930デフォルトの名無しさん:2008/12/03(水) 02:02:59
>>925
k は使わなかった。
#include<stdio.h>
#include<stdlib.h>
void RevStr(char *p, char *rp, int n);
int main(void)
{
char *str = "KantoGakuinUniversity", *rstr;
int num;
for(num = 0; str[num] != '\0' ; num++);
rstr = malloc(num);
RevStr(str, rstr, num);
printf("処理前:%s\n", str);
printf("処理後:%s\n", rstr);
free(rstr);
return 0;
}
void RevStr(char *p, char *rp, int n)
{
while(--n >= 0)
*rp++ = *(p + n);
*rp = '\0';
}
931デフォルトの名無しさん:2008/12/03(水) 02:24:43
>>930
for(;str[num]!='\0';)
malloc(num)
臭うコードだな
932デフォルトの名無しさん:2008/12/03(水) 02:27:18
1足りないか
933デフォルトの名無しさん:2008/12/03(水) 03:56:39
>>931
C FAQ的には 0 がいいそうですね
934デフォルトの名無しさん:2008/12/03(水) 04:12:33
くせぇくせぇ、●ンコの臭いがぷんぷんすんぜっ!こりゃ〜(ry
935デフォルトの名無しさん:2008/12/03(水) 07:04:48
どっちかというとfor(;条件;)っていうのがキモイ
While(){
}でいいだろう
936デフォルトの名無しさん:2008/12/03(水) 07:24:14
だからそれは自分の主観的なことだろ?そういうのが
柔軟な考えが必要なプログラマーには向いていない考え方なんだよ。
気持ち悪いのが、自分の方だと気づいた方が良いぞ?

とりあえず、鏡を見ろ。何が映った?そう、お前の顔だよ。
キモかった?それともイケてた?どちらでも、それは
自分が思ったことで、第三者からしてみれば、自分が
思った通りとは限らないんだよ。
937デフォルトの名無しさん:2008/12/03(水) 07:28:56
>>933
聞いたことねぇ
938デフォルトの名無しさん:2008/12/03(水) 07:29:03
num=0;
do{
num++;
}while(str[num]!='\0');

この方が、何か臭うな、キモイな。
939デフォルトの名無しさん:2008/12/03(水) 07:30:40
num=0;
while(str[num]!='\0') {
num++; };
あるいはstr[num++]か。やっぱこっちの方がきめぇ。
もっとforに対して、考え方を変えるんだなw
940デフォルトの名無しさん:2008/12/03(水) 07:53:07
While(1){
if(str[num]!='\0') break;
}

これでおk
941デフォルトの名無しさん:2008/12/03(水) 08:37:00
なんか少しずつ話が捏造されて最後は無限ループになってるしw
942デフォルトの名無しさん:2008/12/03(水) 10:09:45
>>883
亀レスですまんが、
式自体は同じだが、判定を2回やらないとだめじゃねってこと。
(直線AB・線分CD)と(線分AB・直線CD)の交差判定が必要でしょ?

じゃあ実際に値入れてみそ?
点A(1,0) 点B(5,0) 点C(0,1) 点D(0,-1)
これの線分ABと線分CDは交差しないっしょ?
943デフォルトの名無しさん:2008/12/03(水) 11:00:36
>>939
num = 0;
while (num++[str] != '\0');

ちょっとだけキモくしてみたよ
944デフォルトの名無しさん:2008/12/03(水) 11:22:25
別スレで加齢臭とか言って、汚い表現だと突っ込まれていた香具師か?
お前の書き込みから、厨房臭さが漂ってるぜ?
945デフォルトの名無しさん:2008/12/03(水) 11:25:22
920ですが、この2つのプログラムのソースの間違っている部分を修正するというものです。
言葉足らずに申し訳なかったです。どなたかよろしくお願いいたします。
946デフォルトの名無しさん:2008/12/03(水) 11:45:16
>>943
きもいけどプログラムとしては意図した動きになるな
こういうのに警告吐くコンパイラってあるのかな
947デフォルトの名無しさん:2008/12/03(水) 11:56:59
申し訳ありませんが、どなたか>>878をお願いできないでしょうか。
自分でも考えてみましたが、上手くいきません…
948デフォルトの名無しさん:2008/12/03(水) 12:15:54
>>947
「ランダムな漢字」が何を求めているのかよくわからんが、とりあえず a-z の 26文字用。
#include <stdio.h>
int main()
{
char kanji[] = "亜哀愛悪握圧扱安案暗以衣位囲医依委威胃為尉異移偉意違";
char c;
printf("文字を入力(a-z):");
scanf("%c", &c);
if(c >= 'a' && c <= 'z')
printf("%c%c\n", kanji[(c - 'a')*2],kanji[(c - 'a')*2 + 1]);
return 0;
}
949デフォルトの名無しさん:2008/12/03(水) 12:28:56
>>948
ありがとうございます。
私の説明が悪くて微妙にずれた感じになってしまいましたが
参考にさせていただきます。
950デフォルトの名無しさん:2008/12/03(水) 12:30:37
>>918
#include <stdio.h>
int main()
{
int n[10], i, key, p, q;
printf("10個の整数を小さい順に入力してください\n");
for(i = 0; i < 10; i++){
printf("整数:");
scanf("%d", &n[i]);
}
printf("探す数を入力してください:");
scanf("%d", &key);
p = q = 10/2;
while(1){
q /= 2;
if(key > n[p])
p += q;
else if (key < n[p])
p -= q;
else {
printf("%d:%d 番目にあります。\n", key, p + 1);
break;
}
if(q == 0){
printf("%d:ありません\n", key);
break;
}
}
}
951デフォルトの名無しさん:2008/12/03(水) 12:36:01
>>947
こういうことかなと勝手に妄想。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
char kanji[] = "亜哀愛悪握圧扱安案暗以衣位囲医依委威胃為尉異移偉意違";
char s[30];
int i, c;
unsigned int seed;

printf("文字列を入力: ");
scanf("%s", s);

for(i = 0, seed = 0; i < strlen(s); i++){
seed += s[i];
}
srand(seed);

c = rand() % strlen(s);

printf("%c%c\n", kanji[c*2],kanji[c*2 + 1]);
return 0;
}
952951:2008/12/03(水) 12:40:51
ちと違った。
×c = rand() % strlen(s);
○c = rand() % (strlen(kanji) / 2);
953デフォルトの名無しさん:2008/12/03(水) 12:44:52
モンテカルロ法を使って円錐と球の体積を求めるのと、リサージュ曲線とダイヤモンド図形の書き方を教えて下さい><

お願いします。
954950:2008/12/03(水) 12:49:02
>>918

>>950 は再帰つかえってのを思いっきり無視してた
あとで時間あったらあげるつもりだけど他の人がやってくれるかもしれない
955デフォルトの名無しさん:2008/12/03(水) 13:31:26
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
c言語でスタックオーバーフローするプログラムを作成し、実際にスタックの内容を
表示させる。そして、どれくらいのスタックの大きさならスタックオーバーフローの
起こらないかのスタックの限界領域を調べる。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ:Cygwin
[3.3] 言語:C

よろしくお願いします。
956デフォルトの名無しさん:2008/12/03(水) 14:04:33
>>955
無限再起でオーバーフロー
#include <stdio.h>

void func(void)
{
int val[256];
printf("%p ", val);
func();
}

int main(void)
{
func();
return 0;
}
957デフォルトの名無しさん:2008/12/03(水) 14:41:01
958デフォルトの名無しさん:2008/12/03(水) 14:50:39
[1] 授業単元:計算機プログラミングU ─G 関数へのポインタ─
[2] 問題文(含コード&リンク):
 下のサンプルプログラムを,関数へのポインタ配列を利用して書き直せ。
 そのとき,演算に対してIDを割り当て,入力を簡素化すること。
 例えば,次のようにする。

   (1) addition
   (2) substruction
   (3) multiplication
   (4) division
   上記以外 other

 さまざまな数値データに対して,上記のいずれかの演算を指定して,
 常に正しい計算結果が得られることを確認せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc (Visual C++でも動くと嬉しい)
 [3.3] 言語:C
[4] 期限:2008年12月4日10:30まで
[5] その他の制限:問題文+ヒント>http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8193.txt
959デフォルトの名無しさん:2008/12/03(水) 15:32:33
>>958
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

double addition(double a, double b){ return a+b; }
double substruction(double a, double b){ return a-b; }
double multiplication(double a, double b){ return a*b; }
double division(double a, double b){ return a/b; }
double other(double a, double b){ return 0; }

int main(int argc, char *argv[]){
char* opt[]= {"0.other", "1.addition", "2.substruction", "3.multiplication", "4.division"};
double (*pfunc[])(double a, double b) = {other, addition, substruction, multiplication, division};
double pa, pb;
int i=1, idx_f;
while(i < argc){
idx_f = atoi(argv[i]);
if (idx_f > 4 || idx_f < 0) {
idx_f = 0;
}
pa = atoi(argv[i+1]);
pb = atoi(argv[i+2]);
printf("%s(%f,%f)=%f\n",opt[i/3+1],pa,pb,pfunc[idx_f](pa,pb));
i+=3;
}
return 0;
}
960デフォルトの名無しさん:2008/12/03(水) 16:21:03
ファイル関連で質問です
任意のディレクトリ以下のcsvファイルのフルパス(サブディレクトリのファイル含む)を取得したいです。
FindFirstFileとかででいけそうと思ったのですが、ファイル名しか取得できなくて困っています。
どうすればディレクトリも取得でlきますか?
961960:2008/12/03(水) 16:22:49
すみません。スレ間違えました。。
962デフォルトの名無しさん:2008/12/03(水) 16:24:53
>>960
GetCurrentDirectory
GetFullPathName
を使え
963help me:2008/12/03(水) 16:50:16
[1] 授業単元:c言語
[2] 問題文 あらかじめ、なんらかの内容(英文)が書かれた“test.txt”
というファイルを作り、ファイルの先頭から終端(EOF)まで、
文字コードを16進数で画面に出力するプログラムを作成せよ。
出力形式は横8データと分する。
[3] 環境
 [3.1] OS: Linux
 [3.3] 言語:C
[4] 期限:12月5日まで

よろしくおねがいします!
964デフォルトの名無しさん:2008/12/03(水) 17:03:06
>>963
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(void){
FILE *fout, *fin; struct stat st;
char *buf; size_t i;
fout = fopen("test.txt", "w");
fprintf(fout, "テストだよ\nあいうえお\nカキクケコ

\n");
fclose(fout);
stat("test.txt", &st);
buf = (char *)malloc(st.st_size);
fin = fopen("test.txt", "r");
fread(buf, st.st_size, 1, fin);
fclose(fin);
for(i = 0; i < st.st_size; i++){
printf("%02X ", buf[i]);
if (i % 8 == 7) puts("");
}
free(buf);
return 0;
}
965デフォルトの名無しさん:2008/12/03(水) 17:08:01
>>963
#include <stdio.h>
int main()
{
FILE *fp;
char buf[256], *p;
int i;
fp = fopen("test.txt", "r");
if(fp == NULL){
printf("Cannot open test.txt\n");
return 1;
}
while(fgets(buf, 256, fp) != NULL){
p = buf;
i = 0;
while(*p != '\0'){
printf("%02x ", *p++);
if(i++ == 7){
printf("\n");
i = 0;
}
}
}
printf("\n");
return 0;
}
966デフォルトの名無しさん:2008/12/03(水) 17:11:58
>>963
#include <stdio.h>

int main(void)
{
FILE *fp = fopen("test.txt", "r");
int c, i = 0;
while ((c = fgetc(fp)) != EOF) {
printf("%02X ", c); ++i;
if (i % 8 == 0) printf("\n");
}
return 0;
}
967デフォルトの名無しさん:2008/12/03(水) 17:12:03
>>963

#include <stdio.h>
#define HABA 8
int main(void)
{
int i = 0, input;
FILE * fin;
if ((fin = fopen("test.txt", "r")) == NULL)
{
puts("file open error");
return 1;
}
while ((input = fgetc(fin)) != EOF)
{
printf("%02X ", input);
if (i++ % HABA == HABA -1)
printf("\n");
}
fclose(fin);
return 0;
}
968help me:2008/12/03(水) 17:15:20
すみません、テキストファイルはあらかじめ作っておいて、そのファイルを
読みこんで文字コードを出力するようです。 説明たりなくてごめんなさい。
969デフォルトの名無しさん:2008/12/03(水) 17:16:32
>>963の人気にShit!
970help me:2008/12/03(水) 17:16:38
おおレスにきずきませんでしたありがとうございます!
971デフォルトの名無しさん:2008/12/03(水) 17:22:50
fgetcを使った例は、データにEOFが含まれているときに失敗してしまう。

#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(void){
FILE *fin; struct stat st;
char *buf; size_t i;
stat("test.txt", &st);
buf = (char *)malloc(st.st_size);
fin = fopen("test.txt", "rb");
fread(buf, st.st_size, 1, fin);
fclose(fin);
for(i = 0; i < st.st_size; i++){
printf("%02X ", buf[i]);
if (i % 8 == 7) puts("");
}
free(buf);
return 0;
}
972デフォルトの名無しさん:2008/12/03(水) 17:24:57
>>971
>ファイルの先頭から終端(EOF)まで、
って仕様なんだからEOF以降を処理しちゃいかんよ
973デフォルトの名無しさん:2008/12/03(水) 17:26:36
>>971
一般的にはそうだろうが
> ファイルの先頭から終端(EOF)まで
と出題されてる。
974デフォルトの名無しさん:2008/12/03(水) 17:35:29
データに EOF が含まれてる場合とかあるの?
975デフォルトの名無しさん:2008/12/03(水) 17:40:34
[1] 授業単元: プログラミングU
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8195.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] VC 6.0等
 [3.3] 言語: C++
[4] 期限: ([2008年12月4日17:00まで]
[5] その他の制限: 問題文中に条件が2つ
  よろしくお願いします。
976デフォルトの名無しさん:2008/12/03(水) 17:58:11
>>929
たすかりました。本当にありがとうございました!
977デフォルトの名無しさん:2008/12/03(水) 18:00:15
>>975
>(2)データは下図のように各支店の売上を管理する配列を用意し,
「下図」とやらを見せてくれ
978デフォルトの名無しさん:2008/12/03(水) 18:33:17
>>855
本当に有り難う御座いました。
大変助かりました。
979デフォルトの名無しさん:2008/12/03(水) 18:39:36
>>914
btree_print の部分(実行例のような出力)以外のところはできてるけど
980デフォルトの名無しさん:2008/12/03(水) 21:16:01
[1] 授業単元: プログラミング演習1
[2] 問題文(含コード&リンク):3次関数f(x)=x(x-a)(x-b)とx軸、および直線
  x=0とx=c(c>0)とで囲まれる部分の面積の近似値を求めるプログラミングを
次のように書け。
(1)定数a,bおよびcを整数データとして標準入力から入力する。
(2)区間[0,c]をn等分して、その分点を順にx0=0,x1,x2,…xn=c,分点の間隔を
Δx=c/nとして、求める面積Σn k=1 f(xk)Δxで計算する。nは1000とし、記号定数N
として定義せよ。
(3)f(xk)を計算する部分を関数にする。変数xkと関数値f(xk)はdoubleとして扱うこと。
[3] 環境
 [3.1] OS: CentOS5
 [3.2] コンパイラ名とバージョン: gcc バージョンは不明
 [3.3] 言語: Cのみ
[4] 期限: [2008年12月04日20:00まで]
[5] その他の制限: 特になし

981デフォルトの名無しさん:2008/12/03(水) 21:22:04
>>971
「データにEOFが含まれている」とはどういう意味ですか?
EOF って具体的にはどんなデータですか?
982デフォルトの名無しさん:2008/12/03(水) 21:28:36
>>981
0x1Aだったけな・・・が、EoFの文字コードだったはず。
EoFを消さないで末尾から追記するとか特殊な事もあるから
983デフォルトの名無しさん:2008/12/03(水) 21:30:59
>>982
んー、>>971 は "rb" でオープンしているのだから、 0x1a を EOF として解釈するのはどうかと思うのですが。テキストモードならば
一つの考え方として理解できます。
984デフォルトの名無しさん:2008/12/03(水) 21:31:46
985デフォルトの名無しさん:2008/12/03(水) 21:34:08
>>982
EOF は処理系依存だろ

int i = EOF;

を cpp にかけると

int i = (-1);

になるぞ
986デフォルトの名無しさん:2008/12/03(水) 21:34:49
流石変態言語
987デフォルトの名無しさん:2008/12/03(水) 21:38:48
おまえらの話てるEOFはそれぞれ別のもんだろ
988デフォルトの名無しさん:2008/12/03(水) 21:42:50
毎回のテンプレ無視すみません(xx;
今回も課題のアドバイスをいただきたいのですが…

課題内容は以下の通りです。

「関数へのポインタを用いて、コマンドライン入力に応じて計算を行うプログラムを作成せよ。
関数は加減乗除の他に0を返す関数otherを定義し、それぞれの関数にIDを割り当て、入力を簡素化すること。」

連スレになってしまいますが、自作プログラムを貼っておきます。
whileループに入らないところが解決できません…

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

float addition(int a, int b) {return (a + b);}
float subscription(int a, int b) {return (a - b);}
float multiplication(int a, int b) {return (a * b);}
float division(int a, int b) {return (a / b);}
float other(int a, int b) {return 0;}

int main(int argc, char *argv[]){
float (*pfunc)(int a, int b);
int pa, pb, i = 1;
char *funcname[1];

printf("(1) addition\n(2) subscription\n(3) multiplication\n(4) division\n上記以外 other\n\n");
printf("実行する演算の番号と2つの引数を入力して下さい : ");
989デフォルトの名無しさん:2008/12/03(水) 21:44:34
while(i < argc){
pa = atoi(argv[i]);

if(argv[i] == 1){
pfunc = addition;
funcname[1] = "addition";
}
else if(argv[i] == 2){
pfunc = subscription;
funcname[1] = "subscription";
}
else if(argv[i] == 3){
pfunc = multiplication;
funcname[1] = "multiplication";
}
else if(argv[i] == 4){
pfunc = division;
funcname[1] = "division";
}
else{
pfunc = other;
funcname[1] = "other";
}

pa = atoi(argv[i + 1]);
pb = atoi(argv[i + 2]);
printf("%s(%d, %d) = %d\n\n\n", funcname[1], pa, pb, pfunc(pa, pb));
printf("実行する演算の番号と2つの引数を入力して下さい : ");
i += 3;
}
return 0;
}
990デフォルトの名無しさん:2008/12/03(水) 21:58:21
>>983
> 0x1a を EOF として解釈するのはどうかと思う
>>971のどこにそのような処理が?
991デフォルトの名無しさん:2008/12/03(水) 21:59:00
>>988
おまw
書き込む前にテンプレ違反してること分かってんなら従いなよww
992デフォルトの名無しさん:2008/12/03(水) 21:59:22
>>980 まちがってたらごめんね
#include <stdio.h>
#include <math.h>
#define n 1000

double f(double x, int a, int b) { return x * (x - a) * (x - b); }

int main(void)
{
double answer = 0.0, xk;
int a, b, c;
int i;
printf("input a: "); scanf("%d", &a);
printf("input b: "); scanf("%d", &b);
printf("input c: "); scanf("%d", &c);

for (i = 0; i < n; i++) {
xk = (double)c * i / n;
answer += fabs(f(xk, a, b)) * ((double)c / n);
}
printf("f(x) = x(x - %d)(x - %d)\nx = %d\n", a, b, c);
printf("\nAnswer: %f\n", answer);

return 0;
}
993デフォルトの名無しさん:2008/12/03(水) 22:01:01
>>988
コマンドライン入力をしていないに3兆ジンバブエドル
994デフォルトの名無しさん:2008/12/03(水) 22:08:35
>>988
コマンドライン引数っぽさと
コマンドラインからの標準入力っぽさが両方見えるんだがどっちなん?
995デフォルトの名無しさん:2008/12/03(水) 22:13:32
>>988
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
float addition(int a, int b) {return (a + b);}
float subscription(int a, int b) {return (a - b);}
float multiplication(int a, int b) {return (a * b);}
float division(int a, int b) {return (a / b);}
float other(int a, int b) {return 0;}
float (*pfunc[])(int a, int b) = {other, addition,
subscription, multiplication,
division};
int main(){
int ope, a, b, f;
char *funcname[] = {"other", "addition", "subscription",
"multiplication", "division"};
printf("(1) addition\n(2) subscription\n(3) "
"multiplication\n(4) division\n上記以外 other\n\n");
while(1) {
printf("実行する演算の番号と2つの引数を入力して下さい : ");
f = scanf("%d %d %d", &ope, &a, &b);
if (f != 3) {
puts("入力おかしいです");
}
if (ope < 0 || 4 < ope )
ope = 0;
printf("%s(%d, %d) = %f\n\n\n", funcname[ope], a, b,
pfunc[ope](a, b));
}
return 0;
}
適当に脳内補完でお送りします
996980:2008/12/03(水) 22:14:23
>>992
これで大丈夫です。
迅速なレスありがとうございました。
997デフォルトの名無しさん:2008/12/03(水) 22:20:11
[1] 授業単元: プログラミング入門演習
[2] 問題文:生年月日から今日までの経過日数計算簡易プログラム
      誕生日と今日の日付を西暦・月・日の順にスペースで区切りながら入力。
      誕生日が今日の日付より後になっていた場合はエラーメッセージを表示する。
[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語: C
[4] 期限: 12月5日(金)
[5] その他:日数計算のとこはすでに出来ています。
      エラーメッセージ表示のとこの条件がわかりません><
      どなたかお願いします!
998デフォルトの名無しさん:2008/12/03(水) 22:23:02
>>991
反省のために青汁でも飲んでおきます。いけない子ですみません…

>>993, >>994, >>995
「問題はこんな感じ」で書いたので、多分問題が変なのだと思います。
書きたかったのは、要するにコマンドライン引数を用いよ、ということだったのですが…

実行例としては、例えば123 * 456を計算したい場合は、「3 123 456」と入力する、という感じです。

もう次スレに移るようなので、頑張って自己解決の道を模索していきます。
ありがとうございました(^^
999デフォルトの名無しさん:2008/12/03(水) 22:25:02
>>998

int main(int argc, char *argv[]){
char aNumBf[][10];

switch(atoi(argv[0])){
1000デフォルトの名無しさん:2008/12/03(水) 22:31:25
hoge.exe 3 123 456
と、入力してるの?
なんか、
hoge.exe
3 123 456
と、分けてそうに思うんだけどせんげっと
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。