トップページ⇒tech
1001コメント433KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/10/19(木) 20:39:01
あなたが解けない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

【前スレ】
C/C++の宿題を片付けます 74代目
http://pc8.2ch.net/test/read.cgi/tech/1158844912/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0159デフォルトの名無しさん2006/10/22(日) 13:42:31
>158
( ̄□ ̄;)!!

Linuxでやると
1 2
top=0
3 4
top=1
5 6
top=2
7 8
top=3
s->top=3 s-elements[s->top].x=7
test.x=7 test.y=8

こうならなきゃおかしいですよね。
0160デフォルトの名無しさん2006/10/22(日) 13:47:18
VC6のSP3前のコード生成バグと思ってたけど>>158でも再現するということは違うのかなぁ。
ちなみに自分のとこのvc,gcc,dmcでは>>159と同じ結果が出ました。
0161デフォルトの名無しさん2006/10/22(日) 14:00:03
BCCでの>>139-140の実行結果は>>159になったよ。
コンパイラの性格なんじゃない?
前置演算子に変えてみては?
0162デフォルトの名無しさん2006/10/22(日) 14:00:56
俺も、VC++ 2005 EEでオプション無し、/O2、/Za /O2、/Ox (最大限の最適化)を試したが全て159と同じになった。
またVC++ .NET 2003 Pro SP1で、/Za /O2、/Oxを試したが、やはり159のとおりになった。

なお、共にコマンドプロンプトから実行した。
01631582006/10/22(日) 14:02:24
あ、すまん。ここ読み飛ばしてたw
>>s->top=3 s-elements[s->top].x=7
>>test.x=2 test.y=2
デバッガつかってなかったんで、以下のようにmainを書き換えたところ
159と同じ結果でました。VC6の問題かも;・
結果:
1 2
top=0
3 4
top=1
5 6
top=2
7 8
top=3
s->top=3 s-elements[s->top].x=7
test.x=7 test.y=8

01641582006/10/22(日) 14:03:42
デバグプリント文(追加開始ー追加終了まで):
int main() {
struct stack suuretu;
elementtype test;
initstack(&suuretu);
while(scanf("%d %d", &test.x, &test.y)!=EOF) {
push(&suuretu, test);
printf("top=%d\n",suuretu.top);
/* ここ追加開始 */
if(suuretu.top==3)
break;
/* ここ追加終了 */
}
test=pop(&suuretu);
printf("test.x=%d test.y=%d\n", test.x, test.y);
}
0165デフォルトの名無しさん2006/10/22(日) 14:13:12
あーやっぱりそうか。

ついでに適当に探してみた。
多分、VC6 SP3で修正されたこのバグの亜種だな。
http://www.microsoft.com/japan/msdn/vstudio/downloads/sp/vs6fixes.aspx
> 6.3.5.2
> return ステートメントに ++ 演算子を使用すると、
> /Od を指定してコードをコンパイルしたときにアクセス違反となっていました。
0166デフォルトの名無しさん2006/10/22(日) 15:24:06
自分はアメリカの大学に行ってて、専攻はプログラミングじゃないんですけど
C++が必修で今学期初めてプログラミングの授業をとりました。
初心者で何もわからないのでどうか助けて下さい。
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):10人の生徒の名前、生徒番号、
4つのテストの点数を入力して、そこからテストの平均点を求め、
平均点から成績を割り出し、それらの記録を表示するプログラムを作成せよ。
成績は4つのテストの平均点が59点以下の場合=F、60−69点=D、
70−79点=C、80−89点=B、90−100点=A。

最終的な表示はこんな感じになります。
名前  生徒番号 テストの平均点  成績
-------------------------------------------
生徒1  28584 90.3 A
生徒2 359 71.6 C
 :
生徒10 1701 82.4 B

[3] 環境
 [3.1] OS: (Windows
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C++
[4] 期限: 明日
[5] その他の制限: struct type array を使用する事
01671392006/10/22(日) 15:29:07
やはりVC6のバグが原因だったようです。

>165
おかげさまでサービスパックをインストールしたら直りました。
ですが、構造体変数の宣言をmain内でしようとするとgccでは出ないエラーが出るので、もう好きになれません。
0168デフォルトの名無しさん2006/10/22(日) 15:34:21
自分で途中までやってみたんですけど、もう全然わかりません。
一応自分がどれくらいのレベルか分かってもらうために
途中まで書いたのを載っけときますので、よろしくお願いします。
#include<iostream>
#include<iomanip>
using namespace std;

const_int NUM_STUDENT=10;

void getStudentInfo(char name[25],int &points);
char calculateGrade(int points);
void displayResult(char name[25],char grade);

struct Student

{
char stuName[25];
char grade;
int idNum;
int *testScore;
float average;
};
0169デフォルトの名無しさん2006/10/22(日) 15:36:21
続き:
int main()

{
char stuName[25],grade;
int earnedPoints=0;

getStudentInfo(stuName,earnedPoints);
grade=calculateGrade(earnedPoints);
displayResult(stuName,grade);

return 0;
}

void getStudentInfo(char name[25],int &points)

{
int test1, test2, test3, test4;
int scores [NUM_STUDENT];
int idNum;
float average;
0170デフォルトの名無しさん2006/10/22(日) 15:37:44
続き2:
{
cout<<"Enter name of the student:";
cin.getline(name,25);
cout<<"Enter the first test score:";
cin>>test1;
cout<<"Enter the second test score:";
cin>>test2;
cout<<"Enter the third test score:";
cin>>test3;
cout<<"Enter the fourth test score:";
cin>>test4;

points=test1+test2+test3+test4;
}
}

char calculateGrade(int points)

{

char letterGrades;
int average=(points/4);
0171デフォルトの名無しさん2006/10/22(日) 15:38:17
続き3:
if (average>=90)
letterGrade='A';
else if (average>=80)
letterGrade='B';
else if (average>=70)
letterGrade='C';
else if (average>=60)
letterGrade='D';
else
letterGrade='F';
return letterGrade;
}

void displayResult(char name[25],char grade)

{
cout<<endl<<endl;
cout<<"Student Name"<<" "<<name<<endl;
cout<<setw(45)<<setfill('-')<<"-"<<setfill('-')<<endl;
cout<<setw(14)<<"GRADE"<<" "<<grade<<endl<<endl;

}
0172デフォルトの名無しさん2006/10/22(日) 16:00:12
[1] プログラミング
[2] 50円切手が 5 枚, 80円切手が 4 枚, 120円切手が 3 枚あるとき, キーボードから金額 t を入力し, 金額の合計がちょうど t 円になるような切手の枚数の組合せを求めるプログラムを作成せよ.

次のような出力が得られることを確認せよ (表示形式は各自工夫せよ).
o 310円 → 50円×3枚+80円×2枚+120円×0枚
o 390円 → 50円×3枚+80円×0枚+120円×2枚, 50円×3枚+80円×3枚+120円×0枚
[3] 環境
 [3.1] winXP sp2
 [3.2] cygwin
 [3.3] C
[4] 2006年10月23日23時59分
[5] 途中までやったんで埋める形でお願いします
途中までやったぶんは次書きます
01731292006/10/22(日) 16:00:33
>>135様

実際に動かしてみたところ、様々な行列表示にはなるのですが、
>>129で設定したdat形式のように、

4 8
1 3 5 7 9 0 2 4
6 8 1 3 5 7 9 0
2 4 6 8 1 3 5 7

と、そのまま表示させるには、>>135のプログラムをどのようにすれば、
表示させることができるのでしょうか?
教えて君で本当に申し訳ありません。
01741722006/10/22(日) 16:01:44
#include<stdio.h>

int main (void)
{
int x,y,z,t;

printf("金額tを入力してください>>");
scanf("%d",t);
for(x=0;x<=5;x++)
{
for(y=0;y<=4;y++)
{
for(z=0;z<=3;z++)
{
printf(" );
}
}
}
return 0;
}

よろしくお願いします
0175デフォルトの名無しさん2006/10/22(日) 16:05:56
>>174
scanf("%d", &t); な

if(t == 50*x+80*y+120*z)
01761722006/10/22(日) 16:15:41
#include<stdio.h>

int main (void)
{
int x,y,z,t;

printf("金額tを入力してください>>");
scanf("%d",&t);
for(x=0;x<=5;x++)
{
for(y=0;y<=4;y++)
{
for(z=0;z<=3;z++)
{
if(t == 50*x+80*y+120*z)
{
printf("50円×%d枚+80円×%d枚+120円×%d枚"\n",x,y,z);
}
}
}
}
return 0;
}

これであってますか?
0177デフォルトの名無しさん2006/10/22(日) 16:20:53
とりあえず>>168をベースに適当に書いた。
#include<iostream>
#include<iomanip>
#include<numeric>
using namespace std;
const int NUM_STUDENT = 10;
const int NUM_TEST = 4;
const char*number_string[NUM_TEST]={"first","second","third","fourth"};
struct Student
{
  char name[25];
  int id,testScore[NUM_TEST];
  int total(){return accumulate(testScore,testScore+4,0);}
  static float average(int total){return total / 4.0f;}
  static char grade(int total){return "FFFFFFDCBAA"[total / 4 / 10];}
  void input(){
    cout << "Enter name of the student:";
    cin.getline (name, 25);
    cout << "Enter id of the student:";
    cin >> id;
/*
0178デフォルトの名無しさん2006/10/22(日) 16:21:47
残り
*/
    for(int i=0;i<4;++i){
      cout << "Enter the "<<number_string[i]<<" test score:";cin >> testScore[i];
    }
    cin.ignore(std::numeric_limits<int>::max(),'\n');
  }
  void output(){
    int total = this->total();
    cout << setw(8) << name  << setw(8) << id
         << setw(16) << average(total)  << setw(8) << grade(total) << endl;
  }
};
int main ()
{
  Student a[NUM_STUDENT];
  for(int i=0;i<NUM_STUDENT;++i)a[i].input();
  cout << "名前  生徒番号 テストの平均点  成績" << endl;
  cout << "----------------------------------------" << endl;
  for(int i=0;i<NUM_STUDENT;++i)a[i].output();
  return 0;
}

0179デフォルトの名無しさん2006/10/22(日) 16:23:12
>>176
まあ、やりたいこととしては合ってるんだが…それくらい自分でテストしようよ

ちなみにそのままだとコンパイル通らないぞ
01801722006/10/22(日) 16:25:48
>>179
"が多かったですね。
自分でテストできるの忘れてました。ありがとうございました。
0181デフォルトの名無しさん2006/10/22(日) 16:34:36
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
完全に昇順ソートされているデータうち、配列の添字の範囲L中のn組の2個のデータがわざと交換されているとする(L>2n)。
この場合,データが昇順である性質が一部失われる。L=10, n<=1のとき,すなわち,配列の添字の範囲10以内では,1もしくは2個の
データの値の昇順が保証されない場合に,二分探索をどのように改良すれば,正しい探索が行えるだろうか?そのプログラムを実現せよ。

補足
用いるデータは,全部で100個。データの作成は手作業で構わない。
データを全部ソートし直すのはまずいが,二分探索をしながら辺りを調べその結果,一部何らかのデータ操作を行うことは禁止していない。


100個のデータを昇順に並び替えるプログラム載せてみます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2804.txt

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: borland
 [3.3] 言語: C
[4] 期限: 10/23
[5] その他の制限: どんな改良をしたか書いていただければ幸いです。

どうか、よろしくお願いします。
0182デフォルトの名無しさん2006/10/22(日) 16:52:53
おまえらprintfデバッグをやるときにどんな文字列を表示させてる?俺はいつもunkoって表示させてる。
0183デフォルトの名無しさん2006/10/22(日) 17:01:14
ひさびさに面白そうな問題が。
>>181
>L=10, n<=1のとき,すなわち,配列の添字の範囲10以内では,1もしくは2個の
>データの値の昇順が保証されない場合に,
この条件をもうちょっと厳密に頼む。
0184デフォルトの名無しさん2006/10/22(日) 17:09:25
>>182
そこで使っている変数の値を表示させることが多い。
その必要がなければ、関数名や"enter"/"leave"とか。
0185デフォルトの名無しさん2006/10/22(日) 17:27:05
前スレ683をC言語でやってくださる方いませんか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2764.txt
0186デフォルトの名無しさん2006/10/22(日) 17:27:56
>>182
ほぼ >>74 と同じファイル名と行番号+関数名
0187デフォルトの名無しさん2006/10/22(日) 17:33:49
>>185
前スレ684以降にあるじゃん?
0188デフォルトの名無しさん2006/10/22(日) 18:32:09
>>181
実装は面倒なのでアイデアだけ.n ≦ 1 ならこれで動くはず.

・二分探索を行う.ただし端点の要素は三つくらいの要素の
 中間値でも取って昇順条件を外れた要素を踏まないようにする.
・二分探索で範囲を絞りきったときの状態は
 1. 目的の値が見つかった → 終了.
 2. 昇順条件には従うが目的の値は見つからない → 存在しない.
 3. 昇順条件に反する値が見つかった → その値をキーにして再度二分探索.


一般の L, n については考えてないけど,O(n log L) くらいがある気はする.
0189デフォルトの名無しさん2006/10/22(日) 19:01:24
>>188
>一般の L, n については考えてないけど,O(n log L) くらいがある気はする.
なんでLの増加関数?
Lが小さいほど頻繁な交換が許されるので
より時間が掛かるようになるんじゃないか?
0190デフォルトの名無しさん2006/10/22(日) 19:47:58
>>189
L はリストの長さだから,全く交換が許されないとしても O(log L) はかかる.

L が小さいときは全然単調じゃなくなって線型探索したほうが早くなる(かもしれない)
けど,O 表記は漸近的に大きいときの挙動をあらわすので関係ない.
0191デフォルトの名無しさん2006/10/22(日) 20:07:27
>>190
>L はリストの長さだから
俺は違うように読んだ。正確な事は読み取れないけど、例えば
「任意の長さLの部分列について、n組が交換されている」
とか。これだとそんな列は存在し得ないので正しい解釈じゃないけど。
それに、>>180ではL=10でデータ数は100個と言っている。
0192デフォルトの名無しさん2006/10/22(日) 20:25:47
>>191
なるほど,再読すると 191 のように読めた.俺の誤読っぽい.

やっぱり細かいところがわからんので 181 は再説明求む.
0193デフォルトの名無しさん2006/10/22(日) 21:03:11
全然関係ないんだけど,や.の句読点になってるのは
何のソフト使ってるのか教えてくれないか?
翻訳ソフトだとしたら高機能っぽいので興味がある。
0194デフォルトの名無しさん2006/10/22(日) 21:07:46
>>193
翻訳?
MSIMEで「、」「。」の変換候補に出てくるけど?
0195デフォルトの名無しさん2006/10/22(日) 21:08:53
>>193
皮肉だと思うがマジレス。
理系の人は日常的に使う。論文などでもそれが普通。
MS-IMEでも設定で句読点変えれる。

俺は文系だけどな!
0196デフォルトの名無しさん2006/10/22(日) 21:21:38
[1] C言語プログラミング
[2] 問題文(含コード&リンク):
ファイルからの入力・構造体
ファイル「kyotocity.txt」には、京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されている。
これらの情報を格納する構造体 struct division を宣言しなさい。
struct division {
 char name[20];
 int population;
 double area;
}
struct division型の配列 kyoto[11]を用意し、ファイルからデータを読んで、配列に入力しなさい。
入力した構造体の配列を調べて、以下の情報を出力しなさい。
人口が最大の区と最小の区の、名前と人口。
面積が最大の区と最小の区の、名前と面積。
人口密度が最大の区と最小の区の、名前と人口密度。
↓txtファイル中身のデータ↓
Kita 124306 94.92
Kamigyo 83082 7.11
Sakyo 168133 246.88
Nakagyo 100145 7.38
Higashiyama 41659 7.46
Yamashina 136769 28.78
Shimogyo 74897 6.82
Minami 97877 15.78
Ukyo 201819 291.95
Nishikyo 155973 59.20
Fushimi 284812 61.62
[3.1] OS: windws xp pro [3.2] visual studio 2003 [3.3] 言語: C
[4] 期限: 11月までに、なるべく早くお願いします
[5] その他の制限: 反復構造、ソート、探索、ポインタ、ファイル、構造体
0197デフォルトの名無しさん2006/10/22(日) 21:26:22
>>196です。

196の問題の解く部分は
人口が最大の区と最小の区の、名前と人口。
まででも構いません。

面積が最大の区と最小の区の、名前と面積。と
人口密度が最大の区と最小の区の、名前と人口密度。
は、前者の問題を応用して自分でやります

よろしくお願いします
0198デフォルトの名無しさん2006/10/22(日) 21:41:05
>>193
MS-IMEを始めとして、多くの日本語IMEは句読点に何を使うか、,と。.の組み合わせを設定できる。
たとえば,.を使用するように選んだ場合、キーボードの、。を叩くと変換するまでもなく直接,.が入力される。

スレ違いすまん。
0199デフォルトの名無しさん2006/10/22(日) 21:44:20
いや、IMEで設定するのは数字のあとに.や,にするにしておけばいいことじゃん
日本語のあとじゃないだろ。
0200デフォルトの名無しさん2006/10/22(日) 21:48:28
>>199
見当違いの予感
0201デフォルトの名無しさん2006/10/22(日) 21:49:22
わざわざ,や.に設定する意味が分からない。
0202デフォルトの名無しさん2006/10/22(日) 21:52:38
>>201 >>195
0203デフォルトの名無しさん2006/10/22(日) 21:53:01
>>201
別に、や。である必要もない。
それぞれの分野での習慣。
0204デフォルトの名無しさん2006/10/22(日) 21:54:17
、や。は文として必要。
数字の後の,や.以外での必要性が分からない。
02051812006/10/22(日) 21:59:30
>>188
具体案ありがとうございます。

>>183,>>192
100個の範囲の中から、10個見たとき昇順でない要素があると言ってましたが、
問題文その物のようです。
これ以上細かなことは聞いてないんです・・・
0206デフォルトの名無しさん2006/10/22(日) 22:05:51
1...100のうち任意に取り出した、連続した10個ってことなんだろうか
0207デフォルトの名無しさん2006/10/22(日) 23:41:00
[1] 授業単元:コンピューター実習
[2] 問題文
    文字列に文字列を挿入する関数 str_ins を作成する。
str_ins( 挿入先の文字列 , 挿入する位置 , 挿入文字列)
-------------------雛形--------------------------
#include <stdio.h>
int str_ins(char str[], int p, char pat[])
{


}
int main(void)
{
char a[128];
strcpy(a, "abcdef");
str_ins(a, 3, "xyz");
puts(a);
}
-------------実行結果-----------------
[yokoyama@pratpc02 Temp]$ ./a.out
abcxyzdef
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 10月24日
[5] その他の制限:特になし

よろしくお願いします
0208デフォルトの名無しさん2006/10/22(日) 23:55:23
>>207
#include <string.h>
int str_ins(char str[], int p, char pat[]) 
{ 
  size_t len = strlen(pat);
  memmove(str+p+len,str+p,strlen(str+p)+1);
  memcpy(str+p,pat,len);
} 
0209デフォルトの名無しさん2006/10/22(日) 23:59:50
>>208
そりゃ文字列操作じゃなくてメモリ操作だろ
pの例外とか考えにゃならん
けど良く頑張った
0210デフォルトの名無しさん2006/10/23(月) 00:01:27
>>208
memmoveの引数、一番目と二番目が逆じゃね。
0211デフォルトの名無しさん2006/10/23(月) 00:01:41
>>209
pの例外?
0212デフォルトの名無しさん2006/10/23(月) 00:04:06
>>211
str_ins(a,-1,b);
とか出来るけど、おかしいよね
0213デフォルトの名無しさん2006/10/23(月) 00:04:56
>>211
strの範囲外をpが指してる時とかじゃね?
まぁ俺は変なデータを渡す奴が悪い、そんなの知らん。という主義だけど。
02141812006/10/23(月) 00:06:54
>>206
取り出すのではなく、1〜100までの中の任意の連続した10個の中に
昇順ではない並びがある時といった感じだったと思います。
昇順ではない箇所はいくつかというのは指定されていなかったと思うので、
拡大すれば1〜100のなかで1箇所だけ順序が違うけど2分探索しろ ということだと思います。
0215デフォルトの名無しさん2006/10/23(月) 00:11:51
[1] プログラミング
[2] 2 数 n と m を入力すると, 下のように '@' を n x m 個並べたパターン (画像) を出力するプログラムを作成せよ. 制御部は for 文の 2 重ループを用いよ.
[3]
 [3.1] winXP sp2
 [3.2] cygwin
 [3.3] C
[4] 23時59分
[5] n=5 m=8でこんなん
@@@@@@@@
@@@@@@@@
@@@@@@@@
@@@@@@@@
@@@@@@@@
よろしくお願いします
0216デフォルトの名無しさん2006/10/23(月) 00:11:56
>>212
>>213
負の値はさすがにアレだけど、

> str_ins( 挿入先の文字列 , 挿入する位置 , 挿入文字列)

↑に従うと文字サイズ渡せないから、エラーチェックなんてどうでもいい課題なんじゃないかね?
0217デフォルトの名無しさん2006/10/23(月) 00:14:56
文字サイズ?
0218デフォルトの名無しさん2006/10/23(月) 00:15:02
>>216
まぁ人それぞれの解釈になるわな

というわけで俺は愚問でFAした
0219デフォルトの名無しさん2006/10/23(月) 00:16:06
>>217
バッファサイズでしたorz
0220デフォルトの名無しさん2006/10/23(月) 00:17:20
>>215
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char**argv){
    if(argc==3){
        int n=atoi(argv[1]);
        int m=atoi(argv[2]);
        int i,j;
        for(i=0;i<n;putchar('\n'),++i)
        for(j=0;j<m;++j)
            putchar('@');
    }
}
0221デフォルトの名無しさん2006/10/23(月) 00:23:00
2数が2進数に見えた
もう寝よう…
0222 ◆3zNBOPkseQ 2006/10/23(月) 00:31:46
入力した一字を判別したプログラムをif制御で作りたいのですが、下のどこが違いますか?
#include <stdio.h>
int main (void)
{
int mozi;

printf("文字を一字入力してください。");

scanf("%s",&mozi);

if(mozi>='A' && mozi<='Z')printf("英大文字です");
else if(mozi>='a' && mozi<='z')
printf("英小文字です");
else if(mozi>=0 && mozi<=9)
printf("数字です");
else
printf("英字でも数字でもありません");

return 0;
}
0223デフォルトの名無しさん2006/10/23(月) 00:33:51
scanf("%c",&mozi); 
0224デフォルトの名無しさん2006/10/23(月) 00:34:07
めんどうだから

int main(){
char c;
scanf("%c",&c);

とかじゃなかった?
0225デフォルトの名無しさん2006/10/23(月) 00:34:31
char mozi;
0226 ◆3zNBOPkseQ 2006/10/23(月) 01:03:47
>>225
文字列でなくて一字でもcharの方がいいのですか
サンクスコ
02272152006/10/23(月) 01:11:59
すいません、#include<stdlibh>とかはまだ使ってないです。
>>174と同じくらいの感じで出来ないでしょうか。
0228デフォルトの名無しさん2006/10/23(月) 01:44:31
>>227
#include <stdio.h>
int main()
{
int m, n, i, j;
printf("m> "); scanf("%d", &m);
printf("n> "); scanf("%d", &n);
for (; m > 0; putchar(\n), m--) {
for (i = 0; i < n; i++)
putchar("@");
}
}
0229デフォルトの名無しさん2006/10/23(月) 01:47:45
putchar(\n) => putchar('\n')
putchar(@) => putchar('@')
に修正
0230デフォルトの名無しさん2006/10/23(月) 02:31:20
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2806.txt

[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):50音順にソートするプログラムをつくれ。 (隣接交換)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語:C


コンパイラ通らない原因がわからないです。
お願いします。
0231デフォルトの名無しさん2006/10/23(月) 02:34:44
>>230です。
エラー文訂正します

/*
以下エラー文です。

c:\MyC>gcc foo.c
foo.c: In function `main':    ←foo.c: In function `sort': が正しいです。すみません><
foo.c:42: incompatible types in assignment
foo.c:43: incompatible types in assignment
foo.c:44: incompatible types in assignment
*/
0232デフォルトの名無しさん2006/10/23(月) 02:37:51
strcpy使えよ
02332152006/10/23(月) 02:38:39
228
ありがとうございました
0234デフォルトの名無しさん2006/10/23(月) 02:49:37
>>232
ありがとうw
0235デフォルトの名無しさん2006/10/23(月) 02:56:19
最近はポインタ使っちゃいけないと学校で教えてるのか…?
0236デフォルトの名無しさん2006/10/23(月) 03:45:53
馬鹿学生が多くて理解できないから
最初からポインタを教えないらしい。
0237デフォルトの名無しさん2006/10/23(月) 03:53:38
教える側がポインタを理解してないらしい
0238デフォルトの名無しさん2006/10/23(月) 05:39:32
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
あるフォルダ(sample)の中にある画像(.jpg,.jpeg)の更新日時(作成日時?)を取得し
yyyy-mmの様にフォルダを作成し各々のフォルダに振り分けるプログラムを作成せよ。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 水曜日まで
[5] その他の制限:

よろしくお願いします。
0239デフォルトの名無しさん2006/10/23(月) 05:53:42
ファイルの日付だよな?
Unixシステムコールか、Win32APIのどっちで取ってくるのか
0240デフォルトの名無しさん2006/10/23(月) 06:00:13
>>239
質問者じゃねーけど、OSがWinXPなんだから、APIでいいんじゃね?w
0241デフォルトの名無しさん2006/10/23(月) 06:03:55
いあコンパイラはgccとか書いてあるしさ
学校のPCじゃLinuxだけど、うちだとWinしかないとかありうるかなーと

まぁやる気はないんだが
02422382006/10/23(月) 06:50:30
>>239
言葉が足りなくてすみません。
Win32APIでお願いします。
JavaでLinuxは触っていますがCではXPにCygwin+gccがメインです。
0243デフォルトの名無しさん2006/10/23(月) 06:58:37
それじゃAPIじゃダメだろ。
0244デフォルトの名無しさん2006/10/23(月) 07:15:39
FindFirstFile()とFindNextFile()で作るしかなかろう。
02452382006/10/23(月) 07:36:30
自分はCがあまり得意で無い為にこちらで聴く事にしたんです。
Win32APIだと作る事ができないんですか?

漠然と課題内容の物作って来いと言う課題だったので…。
0246デフォルトの名無しさん2006/10/23(月) 08:00:30
>>245

http://www.google.com/search?num=50&hl=ja&q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB+%E6%9B%B4%E6%96%B0%E6%97%A5%E6%99%82+%E5%8F%96%E5%BE%97&lr=lang_ja

http://www.google.com/search?num=50&hl=ja&q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB+%E5%88%97%E6%8C%99&lr=lang_ja

あとはフォルダの作成とかファイルの移動とか
0247デフォルトの名無しさん2006/10/23(月) 08:01:49
>>246
わざわざありがとうございます。
自分でやってみて詰まったらまた着ますのでよろしくお願いします。
0248デフォルトの名無しさん2006/10/23(月) 08:09:03
>>196
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2807.c
0249デフォルトの名無しさん2006/10/23(月) 08:12:37
逐次でやりゃあオケじゃん
0250デフォルトの名無しさん2006/10/23(月) 09:29:04
>>238
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2808.c
gcc(mingw)でコンパイル・リンク・動作確認してある

環境依存・コンパイラ依存してるのでコンパイラが変わると書き換えなきゃいけないが…
02512382006/10/23(月) 10:34:13
>>250様
出先からなので携帯から失礼します。
本当にありがとうございます。
参考を見ても全くどうすれば良いか分からずに半ば諦めモードでした。
凄く助かりました本当にありがとうございました。
0252デフォルトの名無しさん2006/10/23(月) 11:13:42
>>181
ターゲット m は検索結果の場所 n を元に n-L < m < n+L の範囲にあるので
その範囲を線形サーチすると見つかる(はず)
int search(int search_value, int *data, int data_num){
intcenter, search_start, search_end;
inti;

search_start=0;
search_end=data_num-1;
while(search_end-search_start>=0){
center=(search_end-search_start)/2+search_start;
if(data[center]==search_value)
return center;
if(data[center]>search_value){
search_end=center-1;
}
else{
search_start=center+1;
}
}

search_start-=L;
search_end+=L;
if(search_start<0)
search_start=0;
if(search_end>=data_num)
search_end=data_num-1;
for(i=search_start;i<=search_end;i++)
if(data[i]==search_value)
return i;
return -1;
}
0253デフォルトの名無しさん2006/10/23(月) 11:19:50
制限時間内で未解決の問題ってもうないの?
「オレの質問答えが出てない」っていう質問者さん、是非もう一度書きこんで下さい。
0254デフォルトの名無しさん2006/10/23(月) 12:17:34
[1] 授業単元:C演習
[2] 問題文(含コード&リンク):
コマンド行から複数の数値を受け取りその平均値を出力するプログラムを作成し、プログラムリストと実行結果を示せ。
ヒント:受け取った文字列をdouble型に変換するには関数double atof(const char *nPtr)を使うこの関数を使うにはstdlib.hのインクルードが必要である

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char str[] = "1.41421356";
double x;
x = atof(str);
}
[3] 環境
 [3.1] OS: (Linux)
 [3.2] コンパイラ名とバージョン: (gcc 3.4)
 [3.3] 言語: (C)
[4] 期限: ([金曜まで])
[5] その他の制限:


ヒントみたいなのがあるけどよくわかりません、おねがいします
0255デフォルトの名無しさん2006/10/23(月) 13:06:37
[1] 授業単元: オペレーティングシステム
[2] 問題文(含コード&リンク): 無限に走り続けるプログラムtest.cを作り、実行可能なプログラムにtestという名前をつけ、これをバックグラウンドで走らせ、そのプロセスを殺すこと。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日まで
[5] その他の制限: 特になし
0256デフォルトの名無しさん2006/10/23(月) 13:11:59
>>255
while(1);
0257デフォルトの名無しさん2006/10/23(月) 13:28:44
>>254
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
int i=0,n;
double *x;
double a=0,m=1,h=0;
if(argc<2) {
fprintf(stderr,"error : no input");
exit(1);
}
n=argc-1;
x=(double *)malloc(sizeof(double)*n);
while(i<n)
x[i++]=atof(argv[i+1]);
for(i=0;i<n;i++) {
a+=x[i];
m*=x[i];
h+=1/x[i];
}
a/=n;
m=pow(m,1/(double)n);
h=n/h;
printf("Arithmetical average = %lf\n",a);
printf("Multiply mean = %lf\n",m);
printf("Hamonic mean = %lf\n",h);
free(x);
return 0;
}
0258デフォルトの名無しさん2006/10/23(月) 15:42:57
>>257
なるほど。算術平均とは言われてないもんな。
■ このスレッドは過去ログ倉庫に格納されています