07/09/25 07:53:08
[1] 授業単元: C
[2] 問題文(含コード&リンク):
main引数に格納されたtest.txt(ファイル名)を
変更してtest.abc.txtとするコードを作成せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 9/25
[5] その他の制限: なし
引数で得たファイル名の拡張子の前に「.abc」を入れるというものなのですが
うまく作成できません。よろしくお願いいたします。
264:デフォルトの名無しさん
07/09/25 08:00:20
>>263
ファイルのリネームをしろってこと?
コピーを作れってこと?
265:デフォルトの名無しさん
07/09/25 08:22:33
>>264
ファイルのコピーを作って
リネームしろってことだと思います。
266:デフォルトの名無しさん
07/09/25 08:27:28
>>265
Cygwin?MinGW?
267:デフォルトの名無しさん
07/09/25 08:29:16
>>266
すみません書き忘れでした
cygwinです
268:デフォルトの名無しさん
07/09/25 08:33:16
>>263
複数拡張子(a.txt.bak) や拡張子無しはどうすれば?
269:デフォルトの名無しさん
07/09/25 08:35:42
>>268
とくにその辺は指定がないので
気にしなくて(ないものと考えて)
良いと思われます
270:デフォルトの名無しさん
07/09/25 08:41:06
>>263
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int c,char**v){
char com[256]="./tmp.bat ";
strcat(com,v[1]);
FILE*fp=fopen("tmp.bat","w");
fprintf(fp,"%s","cp %1 tmp\nren tmp %~n1.abc.%~x1");
fclose(fp);
system("chmod 744 tmp.bat");
system(com);
system("rm tmp.bat");
return 0;
}
271:デフォルトの名無しさん
07/09/25 09:32:18
>>263
URLリンク(kansai2channeler.hp.infoseek.co.jp)
272:デフォルトの名無しさん
07/09/25 09:35:48
>>263 ちょい訂正。拡張子は . 以下3文字まで対応、だと思う。それ以外は知らん。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
273:デフォルトの名無しさん
07/09/25 09:40:50
あと、きんもぉ~☆クソースなんで、あしからずw
274:デフォルトの名無しさん
07/09/25 10:14:27
>>263
#include <stdio.h>
#include <string.h>
#include <assert.h>
int main(int argc, char **argv)
{
char outname[256];
char *dot;
if( argc != 2 ){
printf("Usage:%s filename",argv[0]);
return 1;
}
if( (dot = strrchr(argv[1], '.')) == NULL ){
strcpy( outname, argv[1]);
strcat( outname, ".abc" );
}else{
int i;
for( i=0 ; argv[1][i] != *dot ; i++){
outname[i] = argv[1][i];
}
outname[i] = '\0';
strcat(outname, ".abc");
strcat(outname, dot);
}
if( rename( argv[1], outname ) == -1){
perror("Error");
return 1;
}
return 0;
}
275:274
07/09/25 10:20:17
assert消し忘れた
276:デフォルトの名無しさん
07/09/25 10:51:49
>>265
277:デフォルトの名無しさん
07/09/25 10:58:40
ってことだと思います
~~~~~~~~~~~~~~~~~~~~~
278:デフォルトの名無しさん
07/09/25 11:06:43
>>265
279:デフォルトの名無しさん
07/09/25 11:13:33
たくさんのレスありがとうございました
大変参考になりましたm(__)m
280:デフォルトの名無しさん
07/09/25 13:13:52
>>263
#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[]){
char *src_orig, dest_orig[FILENAME_MAX+1], *src, *dest, *ptr;
if(argc==2) src_orig=argv[1];
else src_orig="test.txt";
src=src_orig;
dest=dest_orig;
ptr=strrchr(src, '\\');
if(ptr==NULL) ptr=strrchr(src, '/');
if(ptr!=NULL) dest+=sprintf(dest, "%.*s", ptr-src+1, src), src=ptr+1;
ptr=strrchr(src, '.');
if(ptr==NULL) ptr=src+strlen(src);
sprintf(dest, "%.*s.abc%s", ptr-src, src, ptr);
printf("%s -> %s\n", src_orig, dest_orig);
if(rename(src_orig, dest_orig)!=0){
printf("Error : rename failed. %s -> %s\n", src_orig, dest_orig);
}
return 0;
}
281:デフォルトの名無しさん
07/09/25 13:21:39
1] 授業単元: C
[2] 問題文
機能の異なる加工機械が三種類M1・M2・M3(一台ずつ)があり、それぞれ加工経路の異なる三種類の製品A・B・Cの発注がランダムに来る。
発注が来てからスケジュールを行い、何日で完成するかを出すプログラムを作りなさい。
ただし、製品Aの加工順路はM1⇒M2⇒M3、加工時間はM1:5M2:10 M3:15時間
製品Bの加工順路はM2⇒M3⇒M1、加工時間はM1:10M2:15 M3:5時間
製品Cの加工順路はM3⇒M1⇒M2、加工時間はM1:15M2:5 M3:10時間
発注が来た時点で、使用したい加工機械が他の製品を加工中だった場合、その製品の加工が終了してから、
加工を開始するものとする。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
[3.3] 言語: C
[4] 期限: 9/25
[5] その他の制限: なし
よろしくお願いします。
282:デフォルトの名無しさん
07/09/25 13:25:41
>>263
#include<stdio.h>
char *addext(char *cs, int size, char *org, char *ext) {
char *p;
for (p = org; *p != '.' && *p != '\0'; p++)
continue;
strncpy(cs, org, (p - org));
strncpy(cs + (p - org), ext, strlen(ext));
strncpy(cs + (p - org) + strlen(ext), p, strlen(p));
return cs;
}
int copy(char *from, char *to) {
FILE *src = fopen(from, "r");
if (!src) return -1;
FILE *dst = fopen(to, "w");
int c, n;
for (n = 0; (c = getc(src)) != EOF; n++) {
putc(c, dst);
}
fclose(src);
fclose(dst);
return n;
}
int main(int argc, char **argv) {
int size = 256;
char dst[size], *src = argv[1];
if (1 < argc && 0 < copy(src, addext(dst, size, src, ".abc"))) {
printf("copy `%s' -> `%s'", src, dst);
}
}
283:デフォルトの名無しさん
07/09/25 13:31:05
>>281
最短日数を答えるんだよね?アルゴリズムとか書いてない?
284:デフォルトの名無しさん
07/09/25 13:32:48
>>281
1日24時間で計算し、常に稼動しているものとしておk?
入力するデータ形式はどんな感じ?
加工途中で追加の発注が割り込む可能性はある?
発注の最小時間単位は1時間?1分?1秒?
絶対遵守の納期設定はある?
285:デフォルトの名無しさん
07/09/25 13:34:22
>>263人気杉w
286:281
07/09/25 13:40:41
>283
アルゴリズムですか。。。
発注が着たら前詰めで、割り付けていくとしか書いてないんですけど。。。
例えば、製品Aの発注が来た時点で、M1が使用中で3時間後にその作業が終了するなら、
発注が来て三時間後に製品Aの加工を開始するって意味だと思うんですけど。。。
もちろん次のM2がまた使用中ならその作業が終了してから、M2での製品Aの加工を開始するって意味です。
よろしくお願いします。
287:281
07/09/25 13:48:32
>284
1日24時間で計算し、常に稼動しているものとしておk?
⇒大丈夫です。
加工途中で追加の発注が割り込む可能性はある?
⇒他の製品の発注が来ることはありますが、同じ製品の追加はないです。
早く来た発注がを最優先でお願いします。
発注の最小時間単位は1時間?1分?1秒?
⇒一時間でお願いします。
絶対遵守の納期設定はある?
⇒ありません。
288:デフォルトの名無しさん
07/09/25 13:50:01
発注のタイミングや回数はどうやって決まるの?
289:281
07/09/25 13:55:37
>288
発注のタイミングは、ランダムでお願いします。
終了条件書き忘れてました。各製品5回、発注が来たら終了でお願いします。
よろしくお願いします。
290:デフォルトの名無しさん
07/09/25 14:10:38
>>281
仮に下のような2つの発注があった場合、解はどうなる?
#発注時(単位:時) 製品種別 注文コード(便宜上勝手に決めた)
0 製品A 000A
15 製品C 015C
経過時間順に
0 000A発注 000A-M1開始
5 000A-M1終了 000A-M2開始
15 000A-M2終了 000A-M3開始 015C発注 015C-M3開始 <- 発注時間と加工開始時間が重なる時リスケジューリングが先?
000A-M3 が優先になるか 015C-M3 が優先になるのかどっち?
000A-M3 が優先の時、総時間 60時間
015C-M3 が優先の時、総時間 55時間
291:281
07/09/25 14:22:06
>290
000Aの発注が先なので、000Aを優先でお願いします。
よろしくお願いします。
292:デフォルトの名無しさん
07/09/25 14:59:28
URLリンク(up.nm78.com)
を表示するプログラムを教えて。
293:デフォルトの名無しさん
07/09/25 15:56:53
rand()%51にすれば、50までの数字が出ますけど、
例えば、ランダムで90~110の数字を出すためにはどうしたらいいですか?
誰か教えてください。
294:デフォルトの名無しさん
07/09/25 16:01:35
>>293
スレ違いだが、
90~110 -> 90 + 0~20
295:デフォルトの名無しさん
07/09/25 16:02:16
>>293
rand()%21 にすると乱数の範囲は ???~??? になります
それに ??? を足すと乱数の範囲は ???~??? になります
296:デフォルトの名無しさん
07/09/25 16:10:53
>>294
51を90~110 -> 90 + 0~20 に書き換えればいいってことですか?
297:デフォルトの名無しさん
07/09/25 16:36:38
aho
298:デフォルトの名無しさん
07/09/25 17:16:19
(rand()%21) + 90
分かったら消えろ
299:253
07/09/26 00:56:25
>>254
書き込まれているデータは例えば3次元整数ベクトルでしたら
1 2 3
4 5 6
のような数字のみであり、
1行目をベクトルa、2行目をベクトルbとしてそれを認識し内積を求め、
その結果を別のもう1つのファイルに書き込む。
と言ったイメージであると思います(問題には質問時に書いた事以上は
書かれていなかったのであくまで私の考えですが)。
ですから、おそらく問題にあるn次元の「n」は1つの行に書かれた数値の数
で決定し、データ(数値)はファイルの先頭から書かれているという条件があるので、
1行目と2行目を読み込むだけで、内積を求めるための要素は揃うという事だと思います。
申し訳ないのですが再度よろしくお願いします。
300:デフォルトの名無しさん
07/09/26 01:21:52
その解釈はねーよ。nは最初に置いてあるって書いてるんだから
3
1 2 3
4 5 6
もしくは
3 1 2 3 4 5 6
のどっちかだろ。ってわけでその話は>>257でおしまい
301:デフォルトの名無しさん
07/09/26 01:25:09
科学技術系のライブラリで、C++のやつはありますか??
fortranとかだと結構見かけるんだけれども、C++はほとんど無い気がします。勿体無いですよね??
302:デフォルトの名無しさん
07/09/26 01:35:10
スレ違い
303:デフォルトの名無しさん
07/09/26 01:39:14
[1] 授業単元:
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: (Windows)
[3.2]
[3.3] 言語: (C)
[4] 期限: 9/26
[5] その他の制限: なし
よろしくお願いします。
304:デフォルトの名無しさん
07/09/26 01:41:16
他人の書いたコードの穴埋めは、自分で書くより辛いのう。
305:デフォルトの名無しさん
07/09/26 01:55:23
>>303
【1】
(1) 38行目でFp2を閉じている。「Fp2」
(2) 起動時に指定された2つめをファイル名として与える。「argv[2]」
(3) 一つめのファイルを開くのには成功している。この時点で閉じなければならないのは「Fp1」
(4) strerrorはエラー番号を引数にしてエラーメッセージへのポインタを返す関数。「(errno)」
(5) strcmpは同じ文字列であれば0を返す。ここは同じでないときに-1を返す処理なので「0」
ただし4がそれで良いのかどうかは自信なし(汗
306:デフォルトの名無しさん
07/09/26 02:00:22
>>281
期限過ぎてしもた
思ったよりもずっと難しかったし、1回全部作り直したのに見通しがよくならないし…
URLリンク(kansai2channeler.hp.infoseek.co.jp)
使うには標準入力から下のような文字列を与える
発注時間(整数で単位は hour) 製品種別(A,B or C))
0 A
14 C
15 A
15 B
EOFで発注を終了
./a.out -v のようにコマンドラインオプション -v をつけると詳細表示
307:デフォルトの名無しさん
07/09/26 02:03:42
>>306 に追記
発注順序はソート済みとする
308:デフォルトの名無しさん
07/09/26 02:28:36
>>303
【2】
memcmpでは\0が出現しても処理が継続される。
単純に置き換えても機能しない場合がある。
(ような気がする。fgetsで取得した文字数が指定以下だった場合、残りは'\0'でパディングされるんだったか?)
79行目を次の7行に置き換える。
loop:
nrtn = memcmp(szdat1, szdat2, 1);
if(*szdat1 == '\0' || *szdat2 == '\0') goto loop_end;
szdat1++;
szdat2++;
goto loop;
loop_end:
309:デフォルトの名無しさん
07/09/26 03:46:09
>>306
むずいな……。
指針でも書いてくれないと追い辛いっす。
310:デフォルトの名無しさん
07/09/26 03:56:58
_____
(すた☆らき)
 ̄ ̄\| ̄
URLリンク(www.freewebs.com)
311:デフォルトの名無しさん
07/09/26 07:22:30
>>309
>>306 に以下の3つの注文を与えるだけで、バグが発覚した…orz
0 B
0 C
0 A
データの流れはコマンドラインオプション -v をつけて表示される内容が全て。
簡単に説明すると -v オプションで表示される内容の内、
加工機械が加工を開始することが出来るのは一番左の中括弧の工程のみ
但し >>306 は加工が終わるたびに全工程を前詰めにしている (batch_restruct) が、
machine_t の process_t* を連動させていないためにバグってます
312:デフォルトの名無しさん
07/09/26 08:39:29
>>281
>>306 の修正版
URLリンク(kansai2channeler.hp.infoseek.co.jp)
313:デフォルトの名無しさん
07/09/26 12:16:23
なにかIOCCC風な高度のテクニックを使っているプログラムを教えてください。
お題はなんでもいいです。
314:デフォルトの名無しさん
07/09/26 12:22:53
>>313
IOCCC見てくればいいじゃん
315:よこ ◆2LEFd5iAoc
07/09/26 12:27:16
【質問テンプレ】
[1] 授業単元:システム演習
[2] 問題文(含コード&リンク):行列の乗算のプログラムを作ってみよ。大きな行列要素(1000×1000)でも実行できるように作っておくこと。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: ([2007年09月26日17:00まで]
[5] その他の制限: 制限はないです。お願いします。
316:デフォルトの名無しさん
07/09/26 12:47:39
>>315
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct tag_matrix_t{
int column, row;
double **data, *data_area;
}matrix_t;
matrix_t *matrix_alloc(int column, int row){
matrix_t *matrix;
int x, y;
matrix=malloc(sizeof(matrix_t));
matrix->column=column;
matrix->row=row;
matrix->data_area=malloc(sizeof(double)*column*row);
matrix->data=malloc(sizeof(double*)*column);
for(y=0;y<column;y++) matrix->data[y]=&matrix->data_area[y*row];
for(x=0;x<row;x++) matrix->data[0][x]=0.0;
for(y=1;y<column;y++) memcpy(matrix->data[y], matrix->data[0], sizeof(double)*row);
return matrix;
}
matrix_t *matrix_mul(matrix_t *a, matrix_t *b){
matrix_t *c;
int i, j, k, x;
if((x=a->row)!=b->column) return NULL;
c=matrix_alloc(a->column, b->row);
for(i=0;i<a->column;i++)
for(j=0;j<b->row;j++)
for(k=0;k<x;k++) c->data[i][j]+=a->data[i][k]*b->data[k][j];
return c;
}
317:デフォルトの名無しさん
07/09/26 12:59:34
>>315が見えない。
どっかで暴れてた糞コテか?
318:デフォルトの名無しさん
07/09/26 13:15:15
>>315 はトリップ #1111
安直だからどこかで誰かが使ったんでしょう
319:デフォルトの名無しさん
07/09/26 13:36:18
[1] 授業単元:基本プログラミング
[2] 問題文(含コード&リンク):30個以下の非負の数値データを入力したあとそれらのデータをそのまま出力する。次に1行あけて(改行を出力して)から今度は大きい順に出力する。
データ入力はキーボードから行い、適当な数値を数個入力したところでEOFを示すCtrl-Dを入力する。また、入力される数値データは必ず非負であると仮定してよい(つまりエラーチェックは不要)ただし30個以上の入力は受け付けないようにする。
プログラムは以下のステップで作成すること。
a:30個以下の数値入力データを配列に格納し、そのまま出力するプログラムを作成する。
b:n個の配列データを大きい順に出力するために、以下のことをn回繰り返す。
b1:配列データから最大値を持つ配列要素を探し、その添字を覚えておく。
b2:b1で覚えた添字のデータを出力し、同時にその要素に-1を代入する。
実行例
input number:1 2 3 4 6 32 34 56 21 11
1 2 3 4 6 32 34 56 21 11
56 34 32 21 11 6 4 3 2 1
[3] 環境
[3.1] OS:Windows
[3.3] 言語:C++
[4] 期限:明日
よろしくお願いします
320:デフォルトの名無しさん
07/09/26 14:27:41
>>319
#include <iostream>
const int sanju=30;class hairetsu {private: int arr[sanju];
int n; void nyuuryoku(); void shutsuryoku() const;
int b1() const; void b2(int);public: void a(); void b();};
void hairetsu::a(){ nyuuryoku(); shutsuryoku();}
void hairetsu::nyuuryoku(){ int i; for(i=0; i<sanju; ++i){
if(!(std::cin >> arr[i])) break; } n=i-1;}
void hairetsu::shutsuryoku() const { for(int i=0; i<=n; ++i){
std::cout << arr[i] << ' '; }}
void hairetsu::b(){ for(int i=0; i<=n ; ++i){ b2(b1()); }}
int hairetsu::b1() const { int i,index=0; for(i=1;i<=n;++i){
if(arr[i]>arr[index])index=i; } return index;}
void hairetsu::b2(int index){ std::cout << arr[index] << ' ';
arr[index]=-1;}int main(){ hairetsu h; h.a(); std::cout
<< std::endl; h.b();}
321:デフォルトの名無しさん
07/09/26 15:41:15
>>319
#include <iostream>
using namespace std;
int main() {
int array[30], n = 0;
while (n < 30 && cin >> array[n]) ++n;
for (int i = 0; i < n; ++i) { // a
cout << array[i] << ' ';
}
cout << endl << endl;
for (int i = 0; i < n; ++i) { // b
int k = 0; // index of maximum element
for (int j = 0; j < n; ++j) // b1
if (array[j] > array[k]) k = j;
cout << array[k] << ' '; // b2
array[k] = -1;
}
cout << endl;
}
322:デフォルトの名無しさん
07/09/26 16:20:58
>>320
>>321
ありがとうございました
323:デフォルトの名無しさん
07/09/26 19:41:12
1 授業問題
2 ポインタ
int data[10] ={10,20,30,40,50,60,70,80,-999} このようなint配列があります 配列の内容を実行結果のように表示するプログラムを作りなさい -999になれば処理を終了します
ポインタを固定して表示させる処理とポインタを変化させて表示させる処理の2つ作成しなさい
この内容がわからないので教えて下さいお願い致します
324:デフォルトの名無しさん
07/09/26 19:43:02
ちなみに999}の最後に:がつきます 宜しくお願い致します
325:デフォルトの名無しさん
07/09/26 19:43:38
>>323
テンプレ読んでからやりなおせ。アホ。
326:デフォルトの名無しさん
07/09/26 19:46:31
>>325
お前、来なくて良いよ。アホとか書くな、アホっ
327:デフォルトの名無しさん
07/09/26 19:47:52
>>323
>>1を読め。
328:デフォルトの名無しさん
07/09/26 19:49:22
>>327 お前が >>323 を読まなきゃ良いだろ
329:デフォルトの名無しさん
07/09/26 19:50:04
>>328
読まなくていいものを書き込むな。
330:デフォルトの名無しさん
07/09/26 19:50:24
>>329 オマエモナー
331:デフォルトの名無しさん
07/09/26 19:50:42
>>330
>>1を読め。
332:デフォルトの名無しさん
07/09/26 19:50:53
まあ携帯だろうからそこは大目に見ようも
日本語はもうちょっと上手く使わないとね…
333:デフォルトの名無しさん
07/09/26 19:50:55
テンプレ利用しろよ。
334:デフォルトの名無しさん
07/09/26 19:51:41
>>323のようなやつはマナーを知らんな。
335:デフォルトの名無しさん
07/09/26 19:51:43
>>331 >>330 を読むな
336:デフォルトの名無しさん
07/09/26 19:52:07
お前ら、テンプレ読まない奴はスルーしろ。
337:デフォルトの名無しさん
07/09/26 19:52:26
>>334のような奴はスルーを知らんなw
338:デフォルトの名無しさん
07/09/26 19:52:57
>>323
駄目な奴は何をやっても駄目
339:デフォルトの名無しさん
07/09/26 19:57:24
>>331 >>329 >>327 <お前らが >>1 を読め。
> 気に入らない質問やその他や発言はスルーの方向で。
340:デフォルトの名無しさん
07/09/26 20:15:19
323 ですが すいませんバージョンとかわかりません でも 一応大丈夫なんじゃないんですか?教えて貰えたら光栄ですバカでもアホでもわからないので教えてもらえれば光栄なのでお願い致しますあとWindoを使ってることはわかります宜しくお願い致します
341:デフォルトの名無しさん
07/09/26 20:19:30
323ですが、僕はアホです。っていうか涙目みたいな・・・っていうか俺ってマジやばいから。
俺怒らすと怖いですよ(ぉ っていうか、俺の友達なら知ってることだけどな。
お前ら知らんだろ。
342:デフォルトの名無しさん
07/09/26 20:23:19
ちなみに私は341ではないですなんせ・・・この点々は使ったことないです誰か教えてくださいお願いします
343:デフォルトの名無しさん
07/09/26 20:30:30
>>341
あのなぁ、お前みたいな茶化したりする騙りなんてバレバレなんだよ。
なんでそう質問者をバカにするだけで質問に答える能力が無いくせに
このスレで、でけぇ面してんだ?鬱陶しいんだよ、他の回答者からしてみてもお前は
344:デフォルトの名無しさん
07/09/26 20:30:46
>>323
#include<stdio.h>
int main(void){
int data[10]={10,20,30,40,50,60,70,80,-999};
int *ptr, i;
for(i=0,ptr=data;*(ptr+i)!=-999;i++) printf("%d\n", *(ptr+i));
for(ptr=data;*ptr!=-999;ptr++) printf("%d\n", *ptr);
return 0;
}
345:デフォルトの名無しさん
07/09/26 20:31:32
>>344
もっと分かりやすく書けや。気に入らん奴は回答せんでええって。
俺、怒らすと怖いよ。
346:デフォルトの名無しさん
07/09/26 20:32:55
>>323 マルチポストかよ!試験は実力で受けろカス!
スレリンク(tech板:970番)
347:デフォルトの名無しさん
07/09/26 20:33:07
オレはツレから「キレたら怖い奴」って良く言われる それは自覚してるけど狼の血は止められない
348:デフォルトの名無しさん
07/09/26 20:41:59
>>347
オオカミ少年乙
349:デフォルトの名無しさん
07/09/26 20:49:42
344さんありがとうございました 恩にきります また宜しくお願いいたします
350:デフォルトの名無しさん
07/09/26 20:52:43
切られたなり!
351:デフォルトの名無しさん
07/09/26 21:18:41
[1] 授業: 教科書
[2] OS Windows VC60
[3]問題
int data[10] ={5,8,10,2,1,14,35,6,12}:
配列中の最大値と最小値を表示するプログラムをポインタを使用して作成するプログラムが解らないので教えて貰えませんか?
期限9月27木曜です
352:デフォルトの名無しさん
07/09/26 21:21:31
>>351
10分くらいするとマルチポストし始めるのでしょうか?
353:デフォルトの名無しさん
07/09/26 21:40:43
>>351
#include<stdio.h>
int cmp_big(int a, int b){
return a>b;
}
int cmp_small(int a, int b){
return a<b;
}
int *search(int arr[], int arr_size, int (*cmp)(int,int)){
int i, index=0;
for(i=1;i<arr_size;i++)
if(cmp(arr[i], arr[index])>0) index=i;
return &arr[index];
}
int main(void){
int data[10]={5,8,10,2,1,14,35,6,12};
printf("maximum : %d\n", *search(data, sizeof(data)/sizeof(data[0]), cmp_big));
printf("minimum : %d\n", *search(data, sizeof(data)/sizeof(data[0]), cmp_small));
return 0;
}
354:デフォルトの名無しさん
07/09/26 21:53:00
352さんありがとうございました
355:デフォルトの名無しさん
07/09/26 21:54:15
976 名前:デフォルトの名無しさん[] 投稿日:2007/09/26(水) 21:21:46
[1] 授業単元: 教科書
[2] OS Windows
[3]問題
int data[10] ={5,8,10,2,1,14,35,6,12}:
配列中の最大値と最小値を表示するプログラムをポインタを使用して作成するプログラムが解らないので教えて貰えませんか?
【初心者歓迎】C/C++室 Ver.42【環境依存OK】
スレリンク(tech板)
356:デフォルトの名無しさん
07/09/26 21:54:31
>>353
こういうプログラムはいいな。
このまま提出したら質問主が疑われそうなもの。
357:デフォルトの名無しさん
07/09/26 21:59:29
疑われるって?
358:デフォルトの名無しさん
07/09/26 22:00:59
>>305
>>308
感謝っす!
359:デフォルトの名無しさん
07/09/26 22:02:21
maximum → 最大値
minimum → 最小値
でいいんじゃね
360:デフォルトの名無しさん
07/09/26 22:05:48
[1] 授業: 教科書
[2] OS Windows
[3]問題
double data[5] ={10.8,20.3,30,6.40,10.4,2.12}:
配列の全要素の合計と平気を求めるプログラムをポインタを使って作成しなさい
誰か宜しくお願いします
ちなみに初心者です
361:デフォルトの名無しさん
07/09/26 22:06:54
いまさらだけど、[1] 授業: 教科書。ワロタwww
362:デフォルトの名無しさん
07/09/26 22:18:34
>>360
#include<stdio.h>
double get_average(double arr[], int arr_size){
double *ptr, average=893;
int i;
ptr=arr;
for(ptr=arr,i=0;i<arr_size;i++,ptr++)
average=(average*i+*ptr)/(i+1);
return average;
}
double get_sum(double arr[], int arr_size){
double *ptr;
ptr=arr;
return *ptr+((arr_size>0)?get_sum(ptr+1, arr_size-1):0);
}
int main(void)
{
double data[]={10.8,20.3,30,6.40,10.4,2.12};
printf("sum : %f\n", get_sum(data, sizeof(data)/sizeof(data[0])));
printf("average : %f\n", get_average(data, sizeof(data)/sizeof(data[0])));
return 0;
}
363:デフォルトの名無しさん
07/09/26 22:20:45
親切なな人だね。
さすがにこれ以上は勘弁って感じだよ。
364:デフォルトの名無しさん
07/09/26 22:21:08
もぅすこし初心者的なのはありませんか?ワガママですみませんが宜しくお願いします
365:デフォルトの名無しさん
07/09/26 22:23:34
スレタイと直接関係ないんですけど
FOX-toolkitの話ってどこに行けば聞けますか?
366:デフォルトの名無しさん
07/09/26 22:24:00
>>364
マルチしてんじゃねえよ
367:>>281 1/4
07/09/26 22:27:07
struct machine {
struct product *p;
int value;
};
struct product {
struct machine *ms[4];
struct product *original;
};
struct machine *createm() {
return (struct machine *)calloc(1, sizeof(struct machine));
}
struct product *createp(struct machine *first, struct machine *second, struct machine *last) {
struct product *p = (struct product *)calloc(1, sizeof(struct product));
p->ms[0] = first;p->ms[1] = second;p->ms[2] = last;p->original = p;
return p;
}
struct product *clonep(struct product *original) {
if (!original) return 0;
struct product *p = (struct product *)calloc(1, sizeof(struct product));
*p = *original;
return p;
}
struct product *clonep_at_random(struct product **ps, int size) {
return clonep(ps[rand() % size]);
}
int n_completed(struct product *original, struct product **ps, int size) {
int i, n = 0;
for (i = 0; i < size; i++) {
if (ps[i]->original == original && !ps[i]->ms[0]) n++;
}
return n;
}
368:>>281 2/4
07/09/26 22:27:50
int n_existed(struct product *original, struct product **ps, int size) {
int i, n = 0;
for (i = 0; i < size; i++) {
if (ps[i]->original == original) n++;
}
return n;
}
struct product *waitingproduct(struct machine *m, struct product **ps, int size) {
int i;
for (i = 0; i < size; i++) {
if (ps[i]->ms[0] == m) {
return ps[i];
}
}
return 0;
}
void shift(struct machine **ms) {
ms[0] = ms[1];ms[1] = ms[2];ms[2] = ms[3];
}
int main() {
struct machine *ms[4];
ms[0] = createm();ms[1] = createm();ms[2] = createm();ms[3] = 0;
struct product *p, *ps[4];
ps[0] = createp(ms[0], ms[1], ms[2]);
ps[1] = createp(ms[1], ms[2], ms[0]);
ps[2] = createp(ms[2], ms[0], ms[1]);
ps[3] = 0;
int values[][3] = {{5, 10, 15}, {10, 15, 5}, {15, 5, 10}};
int i, n, maxsize = 64, size = 0;
struct product *products[maxsize];
for (n = 0; ; n++) {
369:>>281 3/4
07/09/26 22:28:31
// 289:各製品5回、発注が来たら終了でお願いします。
// = 各五個完成したら終了?
if (
5 <= n_completed(ps[0], products, size)
&& 5 <= n_completed(ps[1], products, size)
&& 5 <= n_completed(ps[2], products, size)
) break;
// 289:各製品5回、発注が来たら終了でお願いします。
// = 終了の条件とは別に、発注の回数も各五回?
// 287:他の製品の発注が来ることはありますが、同じ製品の追加はないです。
// = 作業中でない製品タイプの発注のみが来る?
p = clonep_at_random(ps, 4);
if (p && (
(p->original == ps[0] && 5 <= n_existed(ps[0], products, size))
|| (p->original == ps[1] && 5 <= n_existed(ps[1], products, size))
|| (p->original == ps[2] && 5 <= n_existed(ps[2], products, size))
|| (ms[0]->p && ms[0]->p->original == p->original)
|| (ms[1]->p && ms[1]->p->original == p->original)
|| (ms[2]->p && ms[2]->p->original == p->original)
)) {
free(p);p = 0;
}
// 受注
if (p && size < maxsize) products[size++] = p;
// 各機械が処理する製品を決定
for (i = 0; i < 3; i++) {
if (!ms[i]->p && (ms[i]->p = waitingproduct(ms[i], products, size))) {
ms[i]->value = values[(&ms[i] - &ms[0])][((void *)ms[i]->p->original - (void *)ps[0]) / sizeof(struct product)];
}
}
// 処理直前の状態。
char cs[] = {'A', 'B', 'C', 'Q'};
370:デフォルトの名無しさん
07/09/26 22:30:14
その長さなら>>1のうpロダを使って欲しい
371:>>281 4/4
07/09/26 22:30:56
printf("%3d",n);
for (i = 0; i < 3; i++) {
if (ms[i]->p) {
printf(" [%c:%d]", cs[((void *)ms[i]->p->original - (void *)ps[0]) / sizeof(struct product)], ms[i]->value);
} else {
printf(" []");
}
}
printf("\n");
// 処理と処理済処理
for (i = 0; i < 3; i++) {
if (ms[i]->p) {
ms[i]->value--; // 加工
if (ms[i]->value <= 0) {
shift(ms[i]->p->ms);
ms[i]->p = 0;
}
}
}
}
printf("%dh", n);
}
// 根本的に何か勘違いしているような気もする。
372:デフォルトの名無しさん
07/09/26 22:33:06
>>370 すんまそん。
373:デフォルトの名無しさん
07/09/26 22:33:25
>>364 簡単にしてみた
#include<stdio.h>
double get_average(double arr[], int arr_size){
double average=0;
int i;
for(i=0;i<arr_size;i++,arr++)
average=(average*i+*arr)/(i+1);
return average;
}
double get_sum(double arr[], int arr_size){
return *arr+((arr_size>0)?get_sum(arr+1, arr_size-1):0);
}
int main(void){
double data[]={10.8,20.3,30,6.40,10.4,2.12};
printf("sum : %f\n", get_sum(data, 6));
printf("average : %f\n", get_average(data, 6));
return 0;
}
374:デフォルトの名無しさん
07/09/26 22:45:06
>>355>>360
添え字演算子はポインタ演算のシンタックスシュガーにすぎないんだから、
結局[]だってポインタ使ってるじゃないですか!
って反抗するのもよいって本で言ってた。
375:デフォルトの名無しさん
07/09/26 22:46:04
>>374
「言ってた」って子供の絵本か!
376:デフォルトの名無しさん
07/09/26 22:50:12
>>313
Short Coding というのがあるよ。
有名な例だと、
main(n){gets(&n);putchar(n%85+5);}
これをコンパイルして実行して、
1 2
とか
3 6
と入力すれば、足される。
377:デフォルトの名無しさん
07/09/26 22:59:22
[1] 授業
[2] OS Windows
[3]問題
double data[5] ={10.8,20.3,30,6.40,10.4,2.12}:
配列の全要素の合計と平気を求めるプログラムをポインタを使って作成しなさい
誰か宜しくお願いします
ちなみに初心者です
378:デフォルトの名無しさん
07/09/26 23:03:25
>>377
>>373 のどこが分からないのか説明してくれ
379:デフォルトの名無しさん
07/09/26 23:15:30
>>378
もう放置で…
380:デフォルトの名無しさん
07/09/26 23:19:19
どなたか>>377をお願いします
381:デフォルトの名無しさん
07/09/26 23:20:50
>>380
マルチポスト
382:デフォルトの名無しさん
07/09/26 23:24:31
[1] 授業
[2] OS Windows
[3]問題
double data[5] ={10.8,20.3,30,6.40,10.4,2.12}:
配列の全要素の戦闘力と攻撃力を求めるプログラムをポインタを使って作成しなさい
誰か宜しくお願いします
ちなみに小心者です
383:fubu ◆dFztVLlF36
07/09/26 23:26:35
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
atoi関数と同様の処理をする関数を作成しなさい
[3] 環境
[3.1] OS: (Windows2000)
[3.2] コンパイラ名とバージョン: CPad forBorland C++Compiler Ver2.31
[3.3] 言語: (C/C++ どちらでも可)
[4] 期限: ([2007年09月28日10:00まで]
[5] atoiは文字列を10進数に変換する処理をするということはわかるのですが、
関数の自作というのがわかりません、、よろしくお願いします!!
384:デフォルトの名無しさん
07/09/26 23:26:42
クマー
385:デフォルトの名無しさん
07/09/26 23:31:40
>>383
int my_atoi(const char *str){int n;sscanf(str,"%d",&n);return n;}
386:デフォルトの名無しさん
07/09/26 23:35:13
int mein_atoi(const char *str){return atoi(str);}
387:デフォルトの名無しさん
07/09/26 23:44:47
int my_atoi(const char *str){return (int)strtod(str, NULL);}
388:デフォルトの名無しさん
07/09/26 23:46:19
>>386 ちょw
389:デフォルトの名無しさん
07/09/26 23:48:28
int my_atoi(const char *str){int n;istringstream i(str);i>>n;return n;}
390:デフォルトの名無しさん
07/09/26 23:53:34
空気を読まずにマトモなやつを
#include<ctype.h>
int atoi_(const char*str){
int sign = 0;
int value= 0;
while(isspace(*str))++str;
if(*str == '+')++str;
else if(*str == '-')sign = 1,++str;
for(;isdigit(*str);++str){
value *= 10;
value += *str-'0';
}
if(sign)value = -value;
return value;
}
391:デフォルトの名無しさん
07/09/26 23:56:16
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): 下に記入します
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限: 9月27日21時
[5] その他の制限:制限などは問題文にあるとおりです。
問題
char型の配列を使用し、ABCDEFGHIJKLMNというリテラルで初期化しておく。その後、
整数kを入力すると、k>0ならば文字列を右にk個巡回シフト、k<0なら左にk個巡回
シフトするプログラムを作成せよ。kはEOF入力まで繰り返し入力できるようにすること。
【実行例】どれだけシフトしますか--> 3
LMNABCDEFGHIJK
どれだけシフトしますか--> 4
HIJKLMNABCDEFG
どれだけシフトしますか--> -7
ABCDEFGHIJKLMN
どれだけシフトしますか--> 17
LMNABCDEFGHIJK
どれだけシフトしますか--> (EOF入力で終了)
ちなみに実行例を見ればわかると思いますが、シフトは毎回ABC~から始めるのではなく
前の結果から巡回シフトを開始します。
わかるかたよろしくお願い致します。
392:デフォルトの名無しさん
07/09/27 00:00:13
夏休みの宿題を今からかよって感じだな
393:デフォルトの名無しさん
07/09/27 00:05:45
int myatoi(const char *cs) {
int a = 1, b = 0;
const char *c = cs;
if (*c == '-') {
a *= -1;
c++;
}
for (; *c != '\0'; c++) {
if (*c >= '0' && *c <= '9')
b = (b * 10) + *c - '0';
else
break;
}
return a * b;
}
394:デフォルトの名無しさん
07/09/27 00:07:06
>>391
#include<string.h>
#include<iostream>
using namespace std;
int main(){
char s[]="ABCDEFGHIJKLMN";
int size = strlen(s);
char*end = s + size;
int shift;
while(cout << "どれだけシフトしますか--> ",cin>>shift){
shift %= size;
if(shift < 0)shift += size;
rotate(s,end-shift,end);
cout << s << endl;
}
cout<<endl;
}
395:394
07/09/27 00:10:00
あ、いけね。#include<algorithm>忘れてた。
396:デフォルトの名無しさん
07/09/27 00:25:40
[1] 授業単元: リスト
[2] 問題文:
問:対称に並んだ文字列を検出する関数
与えられた文字リストの中の数字(1桁)に対応する数をnとして、
その数字の前後
n文字が対称的である部分を見つけ、複製して返す関数mirror_ima
ge()を作成せよ。
ここで「対照的」とは文字リストのi(i=1,2,...)番目の要素a(i)が
数字であり、それに対応
する数をnとすれば、条件a(i-1)=a(i+1),a(i-2)=a(i+2),...a(i-n
)=a(i+n)を全て満たす事である。
対称的である部分が複数ある場合には、それらの内の最も長いもの
を返すこと。
ただし最長の部分が複数ある場合には、そのいずれかを返せばよい
。
対称的な部分がなければ空リストを返す事。
関数mirror_image()のプロトタイプ宣言は以下の通りである。
struct node *mirror_image(struct node*);
他の関数はこれで御願いします↓
URLリンク(kansai2channeler.hp.infoseek.co.jp)
/4974.txt
397:デフォルトの名無しさん
07/09/27 00:27:44
他の関数はこれで御願いします↓
URLリンク(kansai2channeler.hp.infoseek.co.jp)
このプログラムに、例えばP1P、abcde3edcxyad、ba1ax4xa1af、ab2
ba2abを与えると、
それぞれ(P1P)、(cde3edc)、(a1ax4xa1a)、(ab2ba)又は(ba2ab)が
印字される。
また、USA、P2P、short5trohなどを与えると()が印字される。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 9月27日12:00まで
[5] その他の制限: リストを配列にコピーするのは御法度です。
よろしくおねがいします。
398:デフォルトの名無しさん
07/09/27 01:18:40
[1] 授業: 教科書
[2] OS Windows
[3]問題
double data[5] ={10.8,20.3,30,6.40,10.4,2.12}:
配列の全要素の合計と平気を求めるプログラムをポインタを使って作成しなさい
誰か宜しくお願いします
ちなみに初心者です
399:デフォルトの名無しさん
07/09/27 01:22:55
次からテンプレに「テンプレすら埋めれない池沼はお帰りください」って書こうぜ
400:デフォルトの名無しさん
07/09/27 01:26:37
ポインタは危険だから気をつけろよ。
#include <stdio.h>
int main(void)
{
int i;
double data[5] ={10.8, 20.3, 30, 6.40, 10.4, 2.12}, max = 0;
char *p;
for (i = 0; i < 5; i++) {
max += data[i];
}
p = "max = %f, average = %f\n";
printf(p, max, max / 5);
return 0;
}
401:デフォルトの名無しさん
07/09/27 01:28:58
危険なのはレーザーポインタ
ポインタ自身はそこまで危険じゃない
402:デフォルトの名無しさん
07/09/27 01:29:04
問題文を読み返して思ったが
double data[5] ={10.8,20.3,30,6.40,10.4,2.12}:
だと変だな。
最後のコロンは置き換えたが、要素数が間違っているのまでは気づかなかった。
適当に修正してくれよ。
403:デフォルトの名無しさん
07/09/27 01:32:15
>>399
テンプレに沿わない質問に答える気がないならお前が答えなくて良いよ
うっとうしいんだよ
404:デフォルトの名無しさん
07/09/27 01:37:14
テンプレに沿わない質問がうっとおしい
405:デフォルトの名無しさん
07/09/27 01:41:43
>>401が>>400にマジレスしているのがかわいらしい
406:デフォルトの名無しさん
07/09/27 01:44:05
>>403
無能乙www
407:デフォルトの名無しさん
07/09/27 01:58:34
>>399が無能だろ。俺は普通に答えているわ、ボケが
408:デフォルトの名無しさん
07/09/27 02:08:18
文字列いじる程度の簡単な奴だけだろw
ちょっと難しいのになると出てこないくせに
409:デフォルトの名無しさん
07/09/27 02:10:24
テンプレに従ってなくても答えられるけど、従ってくれたほうが読みやすいことが多いね
410:デフォルトの名無しさん
07/09/27 02:24:52
408 名前:デフォルトの名無しさん 投稿日:2007/09/27(木) 02:08:18
文字列いじる程度の簡単な奴だけだろw
ちょっと難しいのになると出てこないくせに
↑なんだこいつ?きめぇ。初歩的なもの以外、答えていないと思ってんのか?
お前がテンプレに沿った質問の仕方をしていないからって、答えないよと言っているだけで
テンプレに沿っていないけど初歩的ともいえる問題に答えることすら出来ないんだろ?w
gdgd言うなら別に答えなくて良いっつってんじゃん、ここはお前が主のスレじゃねーよ
答える側は任意
411:デフォルトの名無しさん
07/09/27 02:26:46
double data[5] ={10.8,20.3,30,6.40,10.4,2.12};
int main()
{
int last_index = sizeof(data)/sizeof(data[0]);
if (last_index-5)printf("This program is abnormal\n");// 平気か調べる。
for (double *p=data,sum=0.0;p!=data[last_index];p++){
sum+=*p;
}
char output_string[1024];
sprintf(output_string,"sum=%f,avg=%f",sum,sum/(float)last_index);
puts(output_string);
return 0;
}
死ね!
412:デフォルトの名無しさん
07/09/27 02:49:45
[1] 授業: 教科書
[2] OS Windows
[3]問題
double data[5] ={10.8,30,6.40,10.4,2.12}:
配列の全要素の合計と平気を求めるプログラムをポインタを使って作成しなさい
誰か宜しくお願いします
ちなみに初心者です
413:デフォルトの名無しさん
07/09/27 03:01:06
いいかげんこのネタやめろw
414:デフォルトの名無しさん
07/09/27 03:02:22
>>396
node の定義や必要そうな include もこちらで補うのかい?
415:デフォルトの名無しさん
07/09/27 05:56:53
>>396
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
struct node {
char element;
struct node *next;
};
int check(struct node *p, struct node *mid)
{
int i, j, n = mid->element - '0';
struct node *temp;
for(i=0, temp = p; temp!=mid; i++, temp=temp->next);
if(i!=n) return 0;
for(i=0; i<n; i++, temp=temp->next) if(temp->next==NULL) return 0;
for(i=0; i<n; i++, p=p->next) {
for(temp=mid, j=0; j<n-i; j++, temp=temp->next);
if(p->element != temp->element) return 0;
}
return 1;
}
416:デフォルトの名無しさん
07/09/27 05:59:16
続き
struct node* mirror_image(struct node *list)
{
struct node *p, *buf = NULL, *temp, *ret = (struct node*)malloc(sizeof(struct node));
int max = 0;
ret->next = NULL;
for(p=list->next; p!=NULL; p=p->next) {
for(temp=p->next; temp!=NULL; temp=temp->next) {
if(isdigit(temp->element) && temp->element - '0' > max) {
if(check(p, temp)) {
buf = p;
max = temp->element - '0';
}
}
}
}
if(buf) {
int i, l = 2 * max + 1;
for(i=0, temp = ret; i<l; i++, buf = buf->next) {
temp = temp->next = (struct node*)malloc(sizeof(struct node));
temp->element = buf->element;
}
temp->next = NULL;
}
return ret;
}
417:デフォルトの名無しさん
07/09/27 07:02:54
>>396
眠いのに朝からやってやったお(^ω^)
ループ文なしでやってみたお。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
418:デフォルトの名無しさん
07/09/27 07:11:59
- '0' とか意味無かったお・・・。冗長すぎワロタ欝出し脳
419:デフォルトの名無しさん
07/09/27 11:01:25
>>365
420:デフォルトの名無しさん
07/09/27 11:09:09
>>396 1/2
char *createcs(struct node *list) {
char *cs = 0;
int i = 0;
struct node *p;
for (i = 0, p = list->next; p; i++, p = p->next) continue;
cs = (char *)malloc(sizeof(char) * (i + 1));
for (i = 0, p = list->next; p; i++, p = p->next) cs[i] = p->element;
cs[i] = '\0';
return cs;
}
421:デフォルトの名無しさん
07/09/27 11:09:41
>>396 2/2
struct node *mirror_image(struct node *list) {
char *cs = createcs(list);
struct node *mirror = 0;
int i, j, n, maxn_index = -1;
for (i = 0; i < strlen(cs); i++) {
if (!isdigit(cs[i])) continue;
n = cs[i] - '0';
if (i < n || (strlen(cs) - 1 - i) < n) continue; // 無理
if (n < cs[maxn_index] - '0') continue; // 無駄
for (j = 0; j < n; j++) { // n個チェック
if (cs[i - (j + 1)] != cs[i + (j + 1)]) break;
}
if (n == j && cs[maxn_index] - '0' < n) maxn_index = i;
}
cs[maxn_index + (cs[maxn_index] - '0') + 1] = '\0';
if (0 < maxn_index) {
mirror = initclist(&cs[maxn_index - (cs[maxn_index] - '0')]);
} else {
mirror = (struct node *)calloc(1, sizeof(struct node));
}
free(cs);
return mirror;
}
422:デフォルトの名無しさん
07/09/27 11:12:47
>リストを配列にコピーするのは御法度です
423:デフォルトの名無しさん
07/09/27 11:20:08
(ノ∀`) アチャー
424:デフォルトの名無しさん
07/09/27 11:22:00
>>396
リストの先頭が空って、なんか気持ち悪くない?
425:デフォルトの名無しさん
07/09/27 13:34:59
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク): 四則演算を関数としてもっているプログラム。
実数と整数の両方に対応し、式と結果を表示。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
[3.3] 言語:C
[4] 期限:10月1日
[5] その他の制限:scanfを使用、関数はPlus(float a,float b)。
main関数では2つの数字を入力、関数Plusを呼び出し。
考えでは↓
実数では、float c; c=a+b;
整数では、int d; d=(int)a+(int)b;
最後にprintfを使って表示します。
宜しくお願いします<(_ _)>
426:デフォルトの名無しさん
07/09/27 13:52:40
>>425
#include <stdio.h>
float Plus(float,float);
int main()
{
float a,b;
printf("1つ目=>");
scanf("%f",&a);
printf("2つ目=>");
scanf("%f",&b);
printf("float:%f\nint:%d",Plus(a,b),(int)Plus((int)a,(int)b));
return 0;
}
float Plus(float a,float b)
{
return a+b;
}
C++でもいいなら関数オーバーロードを使った方がいいと思うよ
427:デフォルトの名無しさん
07/09/27 15:00:40
[1] ファイル入出力
[2] 引数で渡された文字列をファイルに出力する関数を作り、入力した文字列をファイルに出力する。
[3] 環境
[3.1]WindowsXP
[3.2]BorlandC++
[3.3]C++
#include <stdio.h>
#include <string.h>
void sdata(char str);
void main(void)
{
char str[128];
scanf("%s",str);
}
void sdata(char str)
{
FILE *fp;
fp = fopen("Return.txt","w");
fwrite(str,sizeof(str),1,fp);
}
一応自分でこんな感じかなみたいのはあるんですが…ここからよく分からないのです。
428:425
07/09/27 16:14:56
>>426さん ありがとうございます。
四則の問題があるので、Plus()関数に
int s;
printf("1.+ 2.- 3.* 4./ =>");
scanf("%d",&s);
if(1==s){return a+b;
}else if(2==s){
return a-b;
}else if(3==s){
return a*b;
}else if(4==s){
return a/b;
}
と追加してみたら
1つ目=>4
2つ目=>2
1.+ 2.- 3.* 4./ =>4
1.+ 2.- 3.* 4./ =>3
float:8.000000
int:2
と出力されました。
1.+ 2.- 3.* 4./ =>のところを1回だけ表示するにはどうすると良いでしょうか?
429:デフォルトの名無しさん
07/09/27 16:55:26
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク):読み込んだ整数の段数を持つピラミッドを表示するプログラム
例:3
*
***
*****
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
[3.3] 言語:C
[4] 期限:10月1日
[5] その他の制限:scanf,forを使用
430:デフォルトの名無しさん
07/09/27 17:04:03
#include <stdio.h>
int main(void)
{
int i, j, n;
scanf("%d", &n);
for(i=0; i<n; i++) {
for(j=0; j<n-1-i; j++) putchar(' ');
for(j=0; j<2*i+1; j++) putchar('*');
putchar('\n');
}
return 0;
}
431:デフォルトの名無しさん
07/09/27 17:25:37
>>428
>int s;
>printf("1.+ 2.- 3.* 4./ =>");
>scanf("%d",&s);
をPlus関数からmain関数に移し、Plus関数は新たに引数としてsを受け取るようにする
432:デフォルトの名無しさん
07/09/27 17:27:04
>>429
#include<stdio.h>
int main(int c,int v){
if(c==1){
scanf("%d",&v);
main(v+1,v);
}
else{
int i;
if(c!=2)main(c-1,v);
for(i=0;i<v-c+3/2;i++)printf(" ");
for(i=0;i<2*c-3;i++)printf("*");
printf("\n");
}
return 0;
}
433:デフォルトの名無しさん
07/09/27 17:36:09
>>429
#include <stdio.h>
int padd(int n, char c) {
if (!n) return;
putchar(c);padd(n - 1, c);
}
void pyramid(int n, int m, char c) {
if (n <= m) return;
padd(n - m - 1, ' ');
padd(2 * m + 1, c);
puts("");
pyramid(n, m + 1, c);
}
int main() {
int n;
scanf("%d", &n);
pyramid(n, 0, '*');
}
434:デフォルトの名無しさん
07/09/27 17:36:19
>>428 関数名が悪い
#include <stdio.h>
#include <stdlib.h>
float calc(float,float,int);
int main()
{
int i,s;
float a,b;
char mode[]="+-*/";
printf("1つ目の数=>");scanf("%f",&a);
printf("2つ目の数=>");scanf("%f",&b);
printf("演算子\n");
for(i = 0;i < sizeof(mode)-1;i++){
printf("%d.%c\n",i+1,mode[i]);
}
printf("=>");scanf("%d",&s);
printf("%f %c %f = %f",a,mode[s-1],b,calc(a,b,s));
return 0;
}
float calc(float a,float b,int s)
{
switch(s){
case 1:return a+b;
case 2:return a-b;
case 3:return a*b;
case 4:if(b == 0){printf("0では割れない");exit(1);
}else{return a/b;}
default:printf("演算子指定が正しくない");exit(1);
}
}
435:425
07/09/27 18:23:54
>>431さん、>>434さん ありがとうございました。
436:デフォルトの名無しさん
07/09/27 20:34:23
test
437:デフォルトの名無しさん
07/09/27 23:08:36
[1] 授業単元:
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 9月28日18:00まで
[5] その他の制限: 特にないです
どちらか1つだけでも結構ですので、どうぞよろしくお願いします
438:fubu ◆dFztVLlF36
07/09/27 23:20:04
>>390
ありがとうございますつД`)
439:デフォルトの名無しさん
07/09/27 23:29:36
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):構造体(詳細は下記)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC
[3.3] 言語: (C/C++ どちらでも可)
[4] 期限: [9/30]
[5] 問題文
「本」の商品名、価格、ページ数を10冊分入力し、
10冊分の価格の昇順・降順にソートするプログラムを作成しなさい。
よろしくお願いします
440:デフォルトの名無しさん
07/09/27 23:48:59
>>439
それぞれの限界値は指定しないのか?
441:デフォルトの名無しさん
07/09/27 23:51:00
>>439
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct bk{
string n;int v,p;
void r(){cin>>n>>v>>p;}
void w(){cout<<n<<" "<<v<<" "<<p<<endl;}
bool operator<(const bk&b)const{return v<b.v;}
};
int main(){
bk b[10];
for(int i=0;i<10;i++)b[i].r();
sort(b,b+10);
for(int i=0;i<10;i++)b[i].w();
return 0;
}
442:デフォルトの名無しさん
07/09/27 23:51:31
>>437
1つ目 改行が多いって言われたのでこっちで
URLリンク(kansai2channeler.hp.infoseek.co.jp)
443:デフォルトの名無しさん
07/09/28 00:14:32
>>440
すいません…
商品名[10]、価格[4]、ページ数[3]を入れるのを失念しておりました…
ですので、
>>441
ありがとうございます!!
こちらのソースを元になんとか自分で考えてみます。
444:デフォルトの名無しさん
07/09/28 00:45:51
>>437
2つ目
URLリンク(kansai2channeler.hp.infoseek.co.jp)
445:デフォルトの名無しさん
07/09/28 01:20:44
>>437 先越されたけど2つ目 君の瞳に映った僕に乾杯
URLリンク(kansai2channeler.hp.infoseek.co.jp)
446:デフォルトの名無しさん
07/09/28 07:35:42
----【即系サイト×優良サイト=即会い即やり!】-----------------------
優良出会い系サイトと即出会えるサイトを併用して使い、即会いライフを楽しんでいます。
これが面白いほど会える☆ 会った後は・・・
俺の場合、出会い系サイト3つで女の子と週2~3で出会えてます。
これ以外にもお気にの女の子とは週1で会ってます。
今回は皆さんにも出会いを楽しんでもらいたいので、俺が使っている
登録後一日以内に出会えたサイトを紹介するブログ始めました。
皆も休日にエンジョイしてください!
↓↓↓
【即出会えるサイト紹介ブログ】
URLリンク(deaigets.blog97.fc2.com)
--------------------------------------------------------------------
447:437
07/09/28 09:35:59
>>442
>>444
>>445
本当にありがとうございます
助かりました
448:デフォルトの名無しさん
07/09/28 11:20:28
任意の長さの文字列(英字のみ)データをファイルから読み込み、辞書順に並べ替えて
最終結果のみを表示するプログラムを作成する宿題なんですが、ファイルを読み込もうと
するところでなぜか止まってしまいます。原因がよくわからないので助けてください…。
Cテキスト
URLリンク(kansai2channeler.hp.infoseek.co.jp)
読み込みファイル用テキスト(これじゃなくてもOK)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
細かい指定は、
・英字の大文字小文字に関しては凝らなくていい
・データ最大数は1000
・文字列の最大長は64
・データは改行で区切られている
449:デフォルトの名無しさん
07/09/28 11:28:03
>>448
そういうときは、色々な変数の値をprintfで吐き出すと良いよ
> scanf("%s,in_filename");
450:448
07/09/28 12:01:37
なんというくだらないミス\(^O^)/
申し訳ありませんでした……
451:デフォルトの名無しさん
07/09/28 12:50:24
ファイル読めない時のエラーメッセージもだしとけよ
452:デフォルトの名無しさん
07/09/28 15:00:32
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
/****memo.txt********/
atsusa a ts u s a
au a u
awatadashii a w a t a d a sh i i
awa a w a
/*********************/
このmemo.txt というファイルがあるとして、
このファイルを読み込み、右の「a,ts,u,s,a」という単位で
かかれてある右の列(2列目)を(atsusaを1列目、a,ts,u,s,aを2列目)
a
ts
u
s
a
と表示できるようにしなさい。
[3] 環境
[3.1] OS:LINUX
[3.3] 言語:C
[4] 期限:早いほうがいいです
[5] その他の制限:なし
453: ◆EtzJSByuaQ
07/09/28 16:43:58
【質問テンプレ】
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):圧力P一定の下、温度変化量ΔTしたとき、1molの理想気体のガス容積の変化量ΔVを算出する関数を作成しなさい
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:CPad for Borland C++Compiler
ver2.31
[3.3] 言語:C++
[4] 期限:2007年09月28日20時くらいまで
本当にわからなくて困っています。よろしくお願い致します。
454: ◆vLIz8KOkPM
07/09/28 17:29:14
[1] 授業単元: プログラミング演習
[3] 環境
[3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C
[4] 期限: 9月29日(土)午後9時まで
[5] その他の制限: ポインタ、構造体、配列、関数まで習ったので、この範囲内でお願いします。
[2] 問題文(含コード&リンク):
**発展課題**について【下に、発展課題の問題文、自分の作成したプログラムをのせます】、
各口座のデータをバイナリファイルに保存する機能(口座データが変更される度にfwriteで)
各口座のデータをバイナリファイルから読み込む機能(プログラム起動時に1 回のみfreadで)を追加せよ.実行例を下に示す。
% ./kadai13
口座データ読込み(1:ファイルから2:初期値を使用)? 1
口座番号を入力してください: 9012
暗証番号を入力してください: 0123
引出し額を入力してください: 20000
ありがとうございました.残高は518600 円です
口座データ保存(1:ファイルへ2:保存しない)? 1
口座番号を入力してください: ← 口座番号入力に戻る
発展課題の問題については>>455
それに対する自分のプログラムは>>456
455: ◆vLIz8KOkPM
07/09/28 17:29:46
****************発展課題の問題文****************
ATM(Automated Teller Machine; 現金自動預け払い機) システムを実現するプログラムを作成する.
最初に,氏名,口座番号,暗証番号,預金残高を要素とする構造体を定義し,512 人分の口座が作成可能なようにせよ.
また,初期値として次のように構造体の内容を設定せよ.
• 田中太郎の口座番号は1234 で,預金残高を1,234,560 円に設定する.
• 山田花子の口座番号は5678 で,預金残高を 987,600 円に設定する.
• 鈴木一郎の口座番号は9012 で,預金残高を 538,600 円に設定する.
• 暗証番号は口座番号に1111 を足して10000 で割った余りに設定する.
このとき引出しの機能を実現せよ。具体的には,口座番号の入力,暗証番号の入力と確認,支払額の入力,預金残高の更新をするプログラムを作成せよ.
実行例を以下に示す
% ./kadai10
口座番号を入力してください: 5000 ← 存在しない
暗証番号を入力してください: 0123
口座番号または暗証番号が間違っています.
口座番号を入力してください: 9012
暗証番号を入力してください: 5555 ← 間違っている
口座番号または暗証番号が間違っています.
口座番号を入力してください: 9012
暗証番号を入力してください: 0123
引出し額を入力してください: 1000000 ← 預金額より多い
預金額が不足しています.
口座番号を入力してください: 9012
暗証番号を入力してください: 0123
引出し額を入力してください: 20000
ありがとうございました.残高は518600 円です.
口座番号を入力してください: ← 始めに戻る
456: ◆vLIz8KOkPM
07/09/28 17:35:06
**********発展課題について自分が作成したプログラム***************
#include<stdio.h> #include<string.h> #define MAC 256
main(){
char save[MAC]; int account; int code; int draw; int i;
struct{
char name[MAC]; int account; int code; int balance;
}ATM[500];
strcpy(ATM[0].name,"田中太郎"); ATM[0].account=1234; ATM[0].code=(ATM[0].account+1111)%10000; ATM[0].balance=1234560;
strcpy(ATM[1].name,"山田花子"); ATM[1].account=5678; ATM[1].code=(ATM[1].account+1111)%10000; ATM[1].balance=987600;
strcpy(ATM[2].name,"鈴木一郎"); ATM[2].account=9012; ATM[2].code=(ATM[2].account+1111)%10000; ATM[2].balance=538600;
printf("あなたの口座番号を入力して下さい:"); fgets(save,MAC,stdin); sscanf(save,"%d",&account);
for(i=0;i<=500;i++){ if(account==ATM[i].account) break; }
if(account!=ATM[i].account){ printf("そのような口座は存在しません.\n"); }
else{ printf("暗証番号を入力して下さい:"); fgets(save,MAC,stdin); sscanf(save,"%d",&code);
for(i=0;i<=500;i++){ if(code==ATM[i].code) break; }
if(code==ATM[i].code){ printf("%s 様ですね.\n",ATM[i].name); printf("引出し金額を入力して下さい:"); fgets(save,MAC,stdin); sscanf(save,"%d",&draw);
if(draw<0){ printf("ERROR!!\n"); }
else if(draw>ATM[i].balance){ printf("金額が不足しています.\n"); }
else if(draw<=ATM[i].balance){ printf("預金残高は %d 円です.\n",ATM[i].balance-draw); }}
else if(code!=ATM[i].code){ printf("認証に失敗しました.\n"); }}
return(0);
}
457: ◆vLIz8KOkPM
07/09/28 17:40:24
長文で申し訳ないですが、是非ともよろしくお願いします。m(_ _)m
458:デフォルトの名無しさん
07/09/28 18:00:37
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):文字列AB、CD、EF、GHがある。キーボードから文字を入力しこの文字列があればそれを取り出す。
全部取り出したら終了する。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン: BCC5.5
[3.3] 言語:C
[4] 期限: 2007/10/1
[5] その他の制限:実行例
現在:AB、CD、EF、GH
文字を入力してください:AB
ABはありました。
現在:CD、EF、GH
文字を入力してください:TR
TRはありません。
現在:CD、EF、GH
文字を入力してください:
・
・
・
現在:GH
文字を入力してください:GH
GHはありました。
これで終了します。
459:デフォルトの名無しさん
07/09/28 18:46:37
#include <stdio.h>
#include <string.h>
int main(void){
char *a[]={"AB","CD","EF","GH"},b[9],c[]="現在:%s",d[]="、%s",*e;int i;
while(1){
e=c;
for(i=0;i<sizeof(a)/sizeof(a[0]);++i){
if(a[i]){
printf(e,a[i]);
e=d;
}
}
if(e==c) break;
printf("\n文字を入力してください:");
scanf(" %8[^\n]",b);
for(i=0;i<sizeof(a)/sizeof(a[0]);++i){
if(a[i] && !strcmp(a[i],b)){
printf("%sはありました。\n",b);
a[i]=0;
goto found;
}
}
printf("%sはありません。\n",b);
found:;
}
puts("これで終了します。 ");
return 0;
}
460:デフォルトの名無しさん
07/09/28 19:02:44
gotoかよw
461:デフォルトの名無しさん
07/09/28 21:50:48
[1]授業単元:プログラミング演習
[2]問題文:ポインタをつかって①変数aのアドレスを獲得する。②変数bのアドレスを変数aのアドレスの4バイト後方におきたい。③変数aのアドレスの4バイト後方に(a+90)の値を代入する。④②、③の結果をprintf文で出力。
[3]環境
[3.1]Windows、Visual stdio Japan2005
(注)エラーが出ると思いますが、結果は出ます。
お願いします。
462:デフォルトの名無しさん
07/09/28 21:58:40
変数の型は?
463:デフォルトの名無しさん
07/09/28 22:12:58
一気に宿題されすぎでおれの宿題が答えられてないな。。。
おれも片付けに参加しようかね。
464:デフォルトの名無しさん
07/09/28 22:16:59
どれ?
465:デフォルトの名無しさん
07/09/28 22:48:52
>>459 >>460
URLリンク(blogs.wankuma.com)
URLリンク(blogs.wankuma.com)
466:デフォルトの名無しさん
07/09/28 23:10:13
>>452
どの程度自由度があるかわかんね.
"memo.txt"というファイル名に対して,a ts u saを表示するだけでいいの?
それとも,そのコメント風の部分も評価しなきゃいけないの?
467:デフォルトの名無しさん
07/09/28 23:28:39
goto文使うとプログラム読みにくくなるしループとか抜け出すならbreakとかあるからな。
俺も極力使うなって言われたけど中にはそっちの方が分かりやすいって人もいるんじゃない?
468:デフォルトの名無しさん
07/09/28 23:35:31
>467
この例だと分かりにくいぞw
判定ループは関数化して、戻り値で ありました/ありません 表示だろ、普通。
469:デフォルトの名無しさん
07/09/28 23:58:10
条件判定部にsizeof(a)/sizeof(a[0])なんて書いてるのみると、
深い考えがあってgoto使ってるようには見えないけどな
470:デフォルトの名無しさん
07/09/29 00:05:25
goto無しで作ってみるか?
471:デフォルトの名無しさん
07/09/29 00:18:17
>>470
横槍で良く分かってないけど、コレで良いか?
for(i=0;i<sizeof(a)/sizeof(a[0]);++i){
if(a[i] && !strcmp(a[i],b)){
printf("%sはありました。\n",b);
a[i]=0;
break;
}
}
if(i==sizeof(a)/sizeof(a[0])) printf("%sはありません。\n",b);
472:デフォルトの名無しさん
07/09/29 00:22:35
それだと、最後のifがムダだって言いたいんだろ
473:デフォルトの名無しさん
07/09/29 00:37:36
じゃあこうか?
char *format;
・・・
format = "%sはありません。\n";
for(i=0;i<sizeof(a)/sizeof(a[0]);++i){
if(a[i] && !strcmp(a[i],b)){
a[i]=0;
format = "%sはありました。\n";
break;
}
}
printf(format,b);
474:452
07/09/29 00:39:29
/****memo.txt********/
atsusa a ts u s a
au a u
awatadashii a w a t a d a shi i
awa a w a
/*********************/
ちょっといろいろ考えてたんだけど。
このファイルを読み込み、右の「a,ts,u,s,a」という単位で
かかれてある右の列(2列目)を(atsusaを1列目、a,ts,u,s,aを2列目)
a
ts
u
s
a
という風な形で、ファイル"output1.txt"と出力するようにしなさい。
ってのがいいかな。
”atsusa a ts u s a”のスペースがくるたびに改行して配列にいれて、その1つ目を無視して2つ目から
配列にいれて出力すればいんだけどどう書けばいいのかわからなくて。
475:デフォルトの名無しさん
07/09/29 00:48:16
フラグ使って一つ目のスペースがくるまで飛ばせば?
476:デフォルトの名無しさん
07/09/29 01:01:46
>>461
型はintの整数です。
477:デフォルトの名無しさん
07/09/29 01:05:30
変数bのアドレスは宣言時に決まるから、aのアドレスを得てからその4バイト後ろをbのアドレスにするってのは無理
478:デフォルトの名無しさん
07/09/29 01:17:52
>>474
ファイルのフォーマットが今ひとつ分かんないので、チョー手抜き。
1行は254文字以下、行末にスペースが無い、単語間のスペースが1つという条件。
#include <stdio.h>
#include <string.h>
int main()
{
FILE *ifp, *ofp;
char line[256];
char *pos;
if((ifp = fopen("memo.txt", "r")) == NULL) { return 1; }
if((ofp = fopen("output1.txt", "w")) == NULL){ fclose(ifp); return 1; }
while(fgets(line, 256, ifp) != NULL){
if((pos = strchr(line, ' ')) != NULL){
for(pos++;*pos != '\0';pos++){
if(*pos == ' '){ fprintf(ofp, "\n"); }
else{ fprintf(ofp, "%c", *pos); }
}
}
}
fclose(ifp); fclose(ofp);
return 0;
}
479:デフォルトの名無しさん
07/09/29 03:43:34
[1] 授業単元:C言語基礎
[2] 問題文(含コード&リンク):
ファイルにN×Nの整数行列が2つ書き込まれている。この2つの行列積を求め、
解を違うファイルに書き込みなさい。
ただし、2つのN×N整数行列のデータは
3
1 2 3
5 6 7
1 2 3
3 2 1
3 4 5
6 7 8
のように書き込まれているとする。
(先頭の値で次元Nを指定している。)
[3] 環境
[3.1] OS: (Linux)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C言語)
[4] 期限: 07年9月30日まで
[5] その他の制限:入力ファイル、出力ファイルはともに任意のファイル名を
指定できるようにする。
「257」の方のプログラムが見た感じ似ていたので、挑戦してみたのですが
やはり無理でした…
480:459
07/09/29 04:58:00
何か夜中にいろいろやりとりあったみたいやね。
とりあえず>>458はgotoまずかったらテキトーに直しといて。
1番いいのは>>468だけど、>>471か>>473に置き換えてもいいんじゃないかな。
講師がソースろくすっぽ見ないってんなら関係ないけど。
481:デフォルトの名無しさん
07/09/29 05:17:34
>>476
型が int なら
int a, b;
int b, a;
のいずれか(環境依存)で a の4バイト後ろに b が配置されるけど題意の様に
『a のアドレスを得てから』は無理だな
出題者は &b = (&a)++; が可能だとでも思ってるのかな
482:デフォルトの名無しさん
07/09/29 05:39:05
>>474
strtok() 使えば簡単じゃね?禁止されてるなら
char buf[100]; // に "atsusa a ts u s a\n" が入ってると考えてね
char *top, *ptr;
top = strchr( buf, ' ' );
if( top ) {
top++;
while( 1 ) {
ptr = strchr( top, ' ' );
if( ptr ) *ptr = '\n';
else break;
}
printf( "%s", top );
}
で出力できると思うけど、区切りの ' ' が複数連続すると余計な改行が発生するから30点くらい?
483:デフォルトの名無しさん
07/09/29 07:11:26
>>479
>>316 に追加で
int main(void){
FILE *fp_in, *fp_out;
int N=0, column, row;
matrix_t *a, *b, *c;
fp_in=fopen("ファイル", "r");
if(fp_in==NULL) return 1;
fp_out=fopen("違うファイル", "w");
if(fp_out==NULL){
fclose(fp_in);
return 1;
}
fscanf(fp_in, "%d", &N);
a=matrix_alloc(N, N);
b=matrix_alloc(N, N);
for(column=0;column<N;column++)
for(row=0;row<N;row++) fscanf(fp_in, "%lf", &a->data[column][row]);
for(column=0;column<N;column++)
for(row=0;row<N;row++) fscanf(fp_in, "%lf", &b->data[column][row]);
c=matrix_mul(a, b);
for(column=0;column<N;column++){
for(row=0;row<N;row++) fprintf(fp_out, " %.0f", c->data[column][row]);
fprintf(fp_out, "\n");
}
fclose(fp_in);
fclose(fp_out);
return 0;
}
484:デフォルトの名無しさん
07/09/29 07:39:15
>>474
#include<stdio.h>
int main(void)
{
char buf[1000];
FILE *fp=stdin;
int is_top=1;
while(1)
{
if(fscanf(fp, "%[^ \t\n]", buf)==1){
if(!is_top) printf("%s\n", buf);
is_top=0;
}
else if(fscanf(fp, "%[ \t]", buf)==1)
{
}
else if(fscanf(fp, "%1[\n]", buf)==1)
{
is_top=1;
}
else
{
break;
}
}
return 0;
}
485:デフォルトの名無しさん
07/09/29 11:44:39
>>454->456をお願いしますm(__)m
486:デフォルトの名無しさん
07/09/29 11:47:41
>>453
double dv(double p,double dt){return 8.314/p*dt;}
487:デフォルトの名無しさん
07/09/29 12:05:27
>>485
456の動きが455の表示の例と違うんだけど、それは無視して良いんかな?
488:479
07/09/29 12:19:43
>>483
matrix_t *a, *b, *c; 部分でエラーが出てしまいます。
あと、ファイル指定は>>257の方のような、キーボードから行える形にしてもらいたいのですが・・・
よろしくお願いします。
489:デフォルトの名無しさん
07/09/29 12:31:35
>>488
>>483 をよく読んでから
>>257 の必要な部分をコピペでおk
あと、変数名はどちらか合わせないといけない
490:479
07/09/29 14:50:00
>>489
すみません。そのプログラムを作成してもらえないでしょうか?
力不足でプログラムを応用して完成することが無理なんです・・・
491:デフォルトの名無しさん
07/09/29 14:51:56
それをやらなければ身につかんだろうが
492:デフォルトの名無しさん
07/09/29 14:52:51
[1] 授業単元:
[2] 問題文(含コード&リンク): 下記
[3] 環境
[3.1] OS: (Windows)
[3.2]
[3.3] 言語: (C)
[4]9/29
かなりの初心者でさっぱりです。ヨロシク願いします。
以下のプログラムは、入力された10個の数値を引き算し、その結果を表示するプログラムです。
9~11行目を別の関数(関数名はFuncDev)とし、修正しなさい。
ただし、グローバル変数は使わないこと。また、FuncDev内のローカル変数名は任意とする。
FuncDev関数は以下の定義とする。
int FuncDEv(void)
FuncDev関数の戻り値は、画面入力されたint型データとする。
#include<stdio.h>
void main(void);
void main(void)
{
int n1,n2;
int nt;
nt=0;
for(n1=0;n1<10;n1++){
printf("0-9の数値を入力:");
scanf("%d,&n2");
nt-=n2;
}
printf("結果%dです"nt);
}
493:デフォルトの名無しさん
07/09/29 15:03:33
#include<stdio.h>
int FuncDev(void)
{
int n2;
printf("0-9の数値を入力:");
scanf("%d", &n2);
return n2;
}
void main(void)
{
int n1,n2;
int nt;
nt=0;
for(n1=0;n1<10;n1++){
n2= FuncDev();
nt-=n2;
}
printf("結果%dです", nt);
}
494: ◆vLIz8KOkPM
07/09/29 16:11:51
>487
456のプログラムで大丈夫です。よろしくお願いしますm(__)m
495:474
07/09/29 17:37:56
>478、484
ありがとうございました。
ちょっと作り替えて表示できました。
表示できたこの
a
ts
u
s
a
a
u
a
w
...
とできたのですが、これを
a a a
ts u w
u a
s t
a a
d
a
と言う風にchar型の二次元配列に格納したいんですけど。
このあとに列単位で違う関数に送りたいんですけど可能ですかね。
496:デフォルトの名無しさん
07/09/29 17:40:46
>>494
URLリンク(kansai2channeler.hp.infoseek.co.jp)
497:デフォルトの名無しさん
07/09/29 17:45:48
>>461
>エラーが出ると思いますが、結果は出ます。
こういうこと?
#include <stdio.h>
int main(){
int a , *b;
printf("a?>");
scanf("%d" , &a);
b = &a + 1;
printf("Address:a=>%d , b=>%d\n" , &a , b);
*b = a + 90;
printf("Value:a=>%d , b=>%d" , a , *b);
return 0;
}
まあ、bのアドレスがaの4バイト先にあるわけじゃないけど、出題者はこういうことを言いたいんじゃね?
エラー出ないけどw
498:デフォルトの名無しさん
07/09/29 19:23:14
>>495
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]){
FILE *fp;
int row = 0, col = 0, max_col = 0, i, j;
char buf[128], *p, str[128][128][3] = {0};
if(argc < 2 || (fp = fopen(argv[1], "r")) == NULL) return 0;
while(fgets(buf, sizeof(buf), fp) != NULL){
p = strtok(buf, " \n");
while((p = strtok(NULL, " \n")) != NULL) strcpy(str[row][col++], p);
row++, col = 0;
}
fclose(fp);
for(i = 0; i < row; i++){
for(j = 0; str[i][j][0] != '\0'; j++) ;
if(j > max_col) max_col = j;
}
for(j = 0; j < max_col; j++){
for(i = 0; i < row; i++)
if(str[i][j][0] != '\0') printf("%2s ", str[i][j]);
else printf("%*c", 3, 32);
printf("\n");
}
return 0;
}
499: ◆vLIz8KOkPM
07/09/30 01:55:24
>>496
お返事遅れてすみません…
お陰様で助かりました。大変ありがとうございましたm(__)m
500:452
07/09/30 02:29:03
>>495
作ってくれたのはありがたいんですけど、少々考え直しまして。
めんどくさいけど大量にファイルを出力してから、それを入力したほうが
作ってあるプログラムにあわせやすいので。
そこでちょっとまた疑問がでまして。
a
ts
u
s
a
a
w
a
a
u
というファイル(例えばalpa_file.txt)があるとして、この何もかかれていない
行にきたら、それまでの文字をファイル出力して、また次の行にいき、すすんでいって、何もかかれてない行にきたら
また違うファイルに出力みたいにしたいんですけど。
501:デフォルトの名無しさん
07/09/30 02:46:25
URLリンク(kansai2channeler.hp.infoseek.co.jp)
長くなったのでロダの方へ上げました
どうか皆様の知恵をお願いします
502:デフォルトの名無しさん
07/09/30 07:16:59
>>501
>>1嫁。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
<略>
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
ということでお前はもう質問禁止な方向に。
503:デフォルトの名無しさん
07/09/30 07:34:39
>>502
>>1嫁。
> 気に入らない質問やその他や発言はスルーの方向で。
ということでお前はもう回答禁止な方向に。
504:デフォルトの名無しさん
07/09/30 08:46:53
無限ループの予感。
505:デフォルトの名無しさん
07/09/30 14:39:56
>>503
>>1嫁。
> 気に入らない質問やその他や発言はスルーの方向で。
ということでお前はもう回答禁止な方向に。
>>504
こうですかわかりません><
506:デフォルトの名無しさん
07/09/30 15:41:30
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):口頭で説明されたので問題文はありません。
入力した2文字のアルファベット4組(たとえば ae、bd、ac、ab)を
アルファベット順(上の例だったら ab、ac、ae、bd)に表示せよ
また数字でも同じことをせよ(3、4、2、1→1、2、3、4)
あとリスト構造を使えとか言ってました
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン:学校のはよくわからんです
[3.3] 言語:C
[4] 期限: 2007年10月3日まで
[5] その他の制限:とくにないです
よろしくおねがいします
507:デフォルトの名無しさん
07/09/30 15:50:16
>>506
「リスト構造を使え」というのは、その問題に関しては何か不自然。
もういちど問題を確認することをお勧めする。
508:デフォルトの名無しさん
07/09/30 16:01:02
リストのソートだろ?普通じゃね?
509:デフォルトの名無しさん
07/09/30 16:11:52
>>508
要素数がたった4つに固定されていたら、
リストを使う意味は全く無いと思うけど。
俺は、要素数4つというのは単に説明の例で、
本当はもっと多いか不明のどちらかだと予想してる。
510:デフォルトの名無しさん
07/09/30 17:03:59
>>509
すみません、聞いてみたら4つで固定とは言ってなかったとです。
511:デフォルトの名無しさん
07/09/30 17:55:31
C言語で、二重ループを用いた20行以上のプログラムと二重ループと配列を使った20以上のプログラムをレポートで出されたのですが、何か知っていたら教えてください。
始まりの部分は、
#include<stdio.h>
int main(void)
{
でお願いします
携帯からですいません
512:デフォルトの名無しさん
07/09/30 18:04:41
>>511
知るか(笑)
513:デフォルトの名無しさん
07/09/30 18:45:52
どんだけ漠然としてるんだwwww
514:デフォルトの名無しさん
07/09/30 18:45:59
>>506, >>510
入力はキーボードから。EOF (CTRL-D など)で入力終了。
エラーチェックは特にしていない。挿入ソート。
二文字文字列バージョン:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
整数値バージョン:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
515:デフォルトの名無しさん
07/09/30 18:54:29
>>501
P^-1 は手で計算してよろしい?それとも
プログラム上で計算しないとダメ?
あと #include <stdio.h> だけど C++ でいいの?
516:デフォルトの名無しさん
07/09/30 19:43:45
>>514
面白いな
517:デフォルトの名無しさん
07/09/30 20:32:33
>>501
#include<stdio.h>
int main(void){
int i, j, n, num[9+1];
while(1)
{
printf("行数(1-9):");
scanf("%d", &n);
if(1<=n && n<=9) break;
printf("\nエラー\n");
}
num[0]=num[1]=1;
for(i=0;i<n;i++)
{
num[i+1]=0;
for(j=i;j>=0;j--) num[j+1]+=num[j];
for(j=0;j<=i+1;j++) printf(" %d", num[j]);
printf("\n");
}
return 0;
}
518:デフォルトの名無しさん
07/09/30 20:38:28
言語間違えた orz
#include<iostream>
int main(void){
int i, j, n, num[10];
while(1){
std::cout << "行数(1-9):";
std::cin >> n;
if(1<=n && n<=9) break;
std::cout << std::endl << "エラー" << std::endl;
}
num[0]=num[1]=1;
for(i=0;i<n;i++){
num[i+1]=0;
for(j=i;j>=0;j--) num[j+1]+=num[j];
for(j=0;j<=i+1;j++) std::cout << num[j] << " ";
std::cout << std::endl;
}
return 0;
}
519:デフォルトの名無しさん
07/09/30 21:42:56
>>500
日本語でおk
少し長い文章を書くと内容がめちゃくちゃになるようなので
何をしたいのか最初から箇条書きで書き直し
520:デフォルトの名無しさん
07/09/30 21:48:50
>>515
自分で計算してOKです
そして言語ですが、確認したらCでもC++でも可能との事
問題文のソース例はCの場合でした
521:デフォルトの名無しさん
07/09/30 21:49:34
>>511
>>517
522:デフォルトの名無しさん
07/09/30 21:57:28
サンクス!
523:500
07/09/30 22:01:09
以下のファイル(file1.txt)があるとします。
このファイルをfgetsで読み込んで、文字が書かれてない行にきたら
それまで読み込んだ文字を違うファイル(output_file1.txt)に出力します。
出力したらまた元のファイルの読み込みを始めます。そして文字が書かれてない行に
きたら、また違う別のファイル(output_file2.txt)に出力します。
読み込むファイルfile1.txtが
a
ts
u
s
a
a
w
a
a
u
とすると
出力するファイルoutput_file1.txtに
a
ts
u
s
a
また次の出力するファイルoutput_file2.txtに
w
a
と出力できるようにしたいということです。すみません説明できなくて
524:500
07/09/30 22:02:17
>また次の出力するファイルoutput_file2.txtに
>w
>a
でなくて
a
w
a
です
525:デフォルトの名無しさん
07/09/30 22:25:40
fout=0として書き込む前にチェックするのが普通だろうが、まあいいや。
#include <stdio.h>
int main(void){
char buff[256];int i=1;
FILE *fin=fopen("file1.txt","r"),*fout=fopen("output_file1.txt","w");
while(fgets(buff,sizeof(buff)/sizeof(buff[0]),fin)){
if(buff[0]=='\n'){
fclose(fout);
sprintf(buff,"output_file%d.txt",++i);
fout=fopen(buff,"w");
}else{
fputs(buff,fout);
}
}
fclose(fout);fclose(fin);
return 0;
}
526:デフォルトの名無しさん
07/09/30 22:29:03
>>523-524
重要なのは
どんな入力に対して
どんな出力が必要か
を明記する事であって、ころころ変わるあなたの考える処理方法ではない
仮に、読み上げソフトか何かに与えて、同時発音させるのが目的ならば
あなたの考えはあと何回も変わるだろうし…
もう少し、何の為に何をどうしたいのかを整理して出直してきて下さい
[user]$ awk -f a.awk < memo.txt
#!/bin/awk -f
BEGIN{count=1}
!/^$/ && NF>1{
filename=sprintf("output_file%d.txt", count);
for(i=2;i<=NF;i++) print $i>> filename
count=count+1;
}
527:デフォルトの名無しさん
07/09/30 23:02:45
未回答&&期限内の問題ってある?
528:デフォルトの名無しさん
07/09/30 23:06:49
>>527 Hello Worldを表示せよ
529:500
07/09/30 23:14:39
525
ありがとさん
530:デフォルトの名無しさん
07/09/30 23:16:12
[1] 授業単元: C言語基礎
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C言語
[4] 期限:10月1日午前1時まで
[5] その他の制限:C言語を習い始めてまだ3ヶ月程度です
よろしくおねがいします
531:デフォルトの名無しさん
07/09/30 23:23:48
>>530
課題1
#include <stdio.h>
int main( void )
{
int year;
int check;
scanf( "%d", &year );
if ( year % 400 == 0 ) {
check = 1;
}
else if ( year % 100 == 0 ) {
check = 0;
}
else if ( year % 4 == 0 ) {
check = 1;
}
else {
check = 0;
}
if ( check == 0 ) {
printf( "閏年ではありません" );
}
else {
printf( "閏年です" );
}
return 0;
}
532:デフォルトの名無しさん
07/09/30 23:33:35
>>530
課題2(むりやりswitch使った悪い例)
#include <stdio.h>
int main( void ){
const char * const tv_name[] = {
"HBC", "NHK総合",
"STV", "NHK教育",
"TVH", "UHB",
"HTB",
};
int channel;
scanf( "%d", &channel );
switch ( channel ) {
case 1: channel = 0; break;
case 3: channel = 1; break;
case 5: channel = 2; break;
case 12: channel = 3; break;
case 17: channel = 4; break;
case 27: channel = 5; break;
case 35: channel = 6; break;
default: channel = -1; break;
}
if ( channel != -1 ) {
printf ( "%s", tv_name[ channel ] );
}
return 0;
}
533:デフォルトの名無しさん
07/09/30 23:35:40
遅れたorz
#include <stdio.h>
int main(void){
int input;
char *channel=NULL;
scanf("%d",&input);
switch (input){
case 1:channel="HBC";break;
case 5:channel="STV";break;
case 12:channel="NHK教育";break;
case 17:channel="TVH";break;
case 27:channel="UHB";break;
case 35:channel="HTB";break;
default:channel="砂嵐";break;
}
printf("%s\n",channel);
return 0;
}
534:デフォルトの名無しさん
07/09/30 23:39:37
#include <stdio.h>
int main(void)
{
int a;
printf("西暦を入力してください。");
scanf("%d",&a);
if((a % 4 == 0 && a % 100 != 0) || a % 400 == 0)
printf("%d年は閏年です。\n ",a);
else
printf("%d年は閏年じゃありません。\n",a);
return(0);
}
535: ◆AsDEGV.0To
07/10/01 00:02:45
[1] 授業単元:コンピュータとプログラミング
[2] 問題文(含コード&リンク):
年月日(YYYY MM DD)と10個の整数値をキーボードから入力し、それにの値を
バイナリファイルに保存するプログラムを作成すること。それぞれの値の形は、
年(short),月(short),日(short),入力した整数値(int)とすること。
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C言語
[4] 期限:2007年10月01日01:10まで
[5] その他の制限:ポインタ・ファイル入出力迄はやっています。
宜しくお願いします。
536:デフォルトの名無しさん
07/10/01 00:14:46
バイナリで保存しなきゃだめなの?