C/C++の宿題を片付けます 96代目
■ このスレッドは過去ログ倉庫に格納されています
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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++の宿題を片付けます 95代目
http://pc11.2ch.net/test/read.cgi/tech/1187944110/
0304デフォルトの名無しさん
2007/09/26(水) 01:41:160305デフォルトの名無しさん
2007/09/26(水) 01:55:23【1】
(1) 38行目でFp2を閉じている。「Fp2」
(2) 起動時に指定された2つめをファイル名として与える。「argv[2]」
(3) 一つめのファイルを開くのには成功している。この時点で閉じなければならないのは「Fp1」
(4) strerrorはエラー番号を引数にしてエラーメッセージへのポインタを返す関数。「(errno)」
(5) strcmpは同じ文字列であれば0を返す。ここは同じでないときに-1を返す処理なので「0」
ただし4がそれで良いのかどうかは自信なし(汗
0306デフォルトの名無しさん
2007/09/26(水) 02:00:22期限過ぎてしもた
思ったよりもずっと難しかったし、1回全部作り直したのに見通しがよくならないし…
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4971.c
使うには標準入力から下のような文字列を与える
発注時間(整数で単位は hour) 製品種別(A,B or C))
0 A
14 C
15 A
15 B
EOFで発注を終了
./a.out -v のようにコマンドラインオプション -v をつけると詳細表示
0307デフォルトの名無しさん
2007/09/26(水) 02:03:42発注順序はソート済みとする
0308デフォルトの名無しさん
2007/09/26(水) 02:28:36【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:
0309デフォルトの名無しさん
2007/09/26(水) 03:46:09むずいな……。
指針でも書いてくれないと追い辛いっす。
0310デフォルトの名無しさん
2007/09/26(水) 03:56:58(すた☆らき)
 ̄ ̄\| ̄
http://www.freewebs.com/premiumtv/?X3/?STV=%E3%82%89%E3%81%8D+%E3%81%99%E3%81%9F
0311デフォルトの名無しさん
2007/09/26(水) 07:22:30>>306 に以下の3つの注文を与えるだけで、バグが発覚した…orz
0 B
0 C
0 A
データの流れはコマンドラインオプション -v をつけて表示される内容が全て。
簡単に説明すると -v オプションで表示される内容の内、
加工機械が加工を開始することが出来るのは一番左の中括弧の工程のみ
但し >>306 は加工が終わるたびに全工程を前詰めにしている (batch_restruct) が、
machine_t の process_t* を連動させていないためにバグってます
0312デフォルトの名無しさん
2007/09/26(水) 08:39:29>>306 の修正版
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4973.c
0313デフォルトの名無しさん
2007/09/26(水) 12:16:23お題はなんでもいいです。
0314デフォルトの名無しさん
2007/09/26(水) 12:22:53IOCCC見てくればいいじゃん
0315よこ ◆2LEFd5iAoc
2007/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] その他の制限: 制限はないです。お願いします。
0316デフォルトの名無しさん
2007/09/26(水) 12:47:39#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;
}
0317デフォルトの名無しさん
2007/09/26(水) 12:59:34どっかで暴れてた糞コテか?
0318デフォルトの名無しさん
2007/09/26(水) 13:15:15安直だからどこかで誰かが使ったんでしょう
0319デフォルトの名無しさん
2007/09/26(水) 13:36:18[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] 期限:明日
よろしくお願いします
0320デフォルトの名無しさん
2007/09/26(水) 14:27:41#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();}
0321デフォルトの名無しさん
2007/09/26(水) 15:41:15#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;
}
0322デフォルトの名無しさん
2007/09/26(水) 16:20:58>>321
ありがとうございました
0323デフォルトの名無しさん
2007/09/26(水) 19:41:122 ポインタ
int data[10] ={10,20,30,40,50,60,70,80,-999} このようなint配列があります 配列の内容を実行結果のように表示するプログラムを作りなさい -999になれば処理を終了します
ポインタを固定して表示させる処理とポインタを変化させて表示させる処理の2つ作成しなさい
この内容がわからないので教えて下さいお願い致します
0324デフォルトの名無しさん
2007/09/26(水) 19:43:020325デフォルトの名無しさん
2007/09/26(水) 19:43:38テンプレ読んでからやりなおせ。アホ。
0326デフォルトの名無しさん
2007/09/26(水) 19:46:31お前、来なくて良いよ。アホとか書くな、アホっ
0327デフォルトの名無しさん
2007/09/26(水) 19:47:52>>1を読め。
0328デフォルトの名無しさん
2007/09/26(水) 19:49:220329デフォルトの名無しさん
2007/09/26(水) 19:50:04読まなくていいものを書き込むな。
0330デフォルトの名無しさん
2007/09/26(水) 19:50:240331デフォルトの名無しさん
2007/09/26(水) 19:50:42>>1を読め。
0332デフォルトの名無しさん
2007/09/26(水) 19:50:53日本語はもうちょっと上手く使わないとね…
0333デフォルトの名無しさん
2007/09/26(水) 19:50:550334デフォルトの名無しさん
2007/09/26(水) 19:51:410335デフォルトの名無しさん
2007/09/26(水) 19:51:430336デフォルトの名無しさん
2007/09/26(水) 19:52:070337デフォルトの名無しさん
2007/09/26(水) 19:52:260338デフォルトの名無しさん
2007/09/26(水) 19:52:57駄目な奴は何をやっても駄目
0339デフォルトの名無しさん
2007/09/26(水) 19:57:24> 気に入らない質問やその他や発言はスルーの方向で。
0340デフォルトの名無しさん
2007/09/26(水) 20:15:190341デフォルトの名無しさん
2007/09/26(水) 20:19:30俺怒らすと怖いですよ(ぉ っていうか、俺の友達なら知ってることだけどな。
お前ら知らんだろ。
0342デフォルトの名無しさん
2007/09/26(水) 20:23:190343デフォルトの名無しさん
2007/09/26(水) 20:30:30あのなぁ、お前みたいな茶化したりする騙りなんてバレバレなんだよ。
なんでそう質問者をバカにするだけで質問に答える能力が無いくせに
このスレで、でけぇ面してんだ?鬱陶しいんだよ、他の回答者からしてみてもお前は
0344デフォルトの名無しさん
2007/09/26(水) 20:30:46#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;
}
0345デフォルトの名無しさん
2007/09/26(水) 20:31:32もっと分かりやすく書けや。気に入らん奴は回答せんでええって。
俺、怒らすと怖いよ。
0346デフォルトの名無しさん
2007/09/26(水) 20:32:55ttp://pc11.2ch.net/test/read.cgi/tech/1188748806/970
0347デフォルトの名無しさん
2007/09/26(水) 20:33:070348デフォルトの名無しさん
2007/09/26(水) 20:41:59オオカミ少年乙
0349デフォルトの名無しさん
2007/09/26(水) 20:49:420350デフォルトの名無しさん
2007/09/26(水) 20:52:430351デフォルトの名無しさん
2007/09/26(水) 21:18:41[2] OS Windows VC60
[3]問題
int data[10] ={5,8,10,2,1,14,35,6,12}:
配列中の最大値と最小値を表示するプログラムをポインタを使用して作成するプログラムが解らないので教えて貰えませんか?
期限9月27木曜です
0352デフォルトの名無しさん
2007/09/26(水) 21:21:3110分くらいするとマルチポストし始めるのでしょうか?
0353デフォルトの名無しさん
2007/09/26(水) 21:40:43#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;
}
0354デフォルトの名無しさん
2007/09/26(水) 21:53:000355デフォルトの名無しさん
2007/09/26(水) 21:54:15[1] 授業単元: 教科書
[2] OS Windows
[3]問題
int data[10] ={5,8,10,2,1,14,35,6,12}:
配列中の最大値と最小値を表示するプログラムをポインタを使用して作成するプログラムが解らないので教えて貰えませんか?
【初心者歓迎】C/C++室 Ver.42【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1188748806/
0356デフォルトの名無しさん
2007/09/26(水) 21:54:31こういうプログラムはいいな。
このまま提出したら質問主が疑われそうなもの。
0357デフォルトの名無しさん
2007/09/26(水) 21:59:290359デフォルトの名無しさん
2007/09/26(水) 22:02:21minimum → 最小値
でいいんじゃね
0360デフォルトの名無しさん
2007/09/26(水) 22:05:48[2] OS Windows
[3]問題
double data[5] ={10.8,20.3,30,6.40,10.4,2.12}:
配列の全要素の合計と平気を求めるプログラムをポインタを使って作成しなさい
誰か宜しくお願いします
ちなみに初心者です
0361デフォルトの名無しさん
2007/09/26(水) 22:06:540362デフォルトの名無しさん
2007/09/26(水) 22:18:34#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;
}
0363デフォルトの名無しさん
2007/09/26(水) 22:20:45さすがにこれ以上は勘弁って感じだよ。
0364デフォルトの名無しさん
2007/09/26(水) 22:21:080365デフォルトの名無しさん
2007/09/26(水) 22:23:34FOX-toolkitの話ってどこに行けば聞けますか?
0366デフォルトの名無しさん
2007/09/26(水) 22:24:00マルチしてんじゃねえよ
0367>>281 1/4
2007/09/26(水) 22:27:07struct 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;
}
0368>>281 2/4
2007/09/26(水) 22:27:50int 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++) {
0369>>281 3/4
2007/09/26(水) 22:28:31// = 各五個完成したら終了?
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'};
0370デフォルトの名無しさん
2007/09/26(水) 22:30:140371>>281 4/4
2007/09/26(水) 22:30:56for (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);
}
// 根本的に何か勘違いしているような気もする。
0372デフォルトの名無しさん
2007/09/26(水) 22:33:060373デフォルトの名無しさん
2007/09/26(水) 22:33:25#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;
}
0374デフォルトの名無しさん
2007/09/26(水) 22:45:06添え字演算子はポインタ演算のシンタックスシュガーにすぎないんだから、
結局[]だってポインタ使ってるじゃないですか!
って反抗するのもよいって本で言ってた。
0375デフォルトの名無しさん
2007/09/26(水) 22:46:04「言ってた」って子供の絵本か!
0376デフォルトの名無しさん
2007/09/26(水) 22:50:12Short Coding というのがあるよ。
有名な例だと、
main(n){gets(&n);putchar(n%85+5);}
これをコンパイルして実行して、
1 2
とか
3 6
と入力すれば、足される。
0377デフォルトの名無しさん
2007/09/26(水) 22:59:22[2] OS Windows
[3]問題
double data[5] ={10.8,20.3,30,6.40,10.4,2.12}:
配列の全要素の合計と平気を求めるプログラムをポインタを使って作成しなさい
誰か宜しくお願いします
ちなみに初心者です
0378デフォルトの名無しさん
2007/09/26(水) 23:03:25>>373 のどこが分からないのか説明してくれ
0379デフォルトの名無しさん
2007/09/26(水) 23:15:30もう放置で…
0380デフォルトの名無しさん
2007/09/26(水) 23:19:190381デフォルトの名無しさん
2007/09/26(水) 23:20:50マルチポスト
0382デフォルトの名無しさん
2007/09/26(水) 23:24:31[2] OS Windows
[3]問題
double data[5] ={10.8,20.3,30,6.40,10.4,2.12}:
配列の全要素の戦闘力と攻撃力を求めるプログラムをポインタを使って作成しなさい
誰か宜しくお願いします
ちなみに小心者です
0383fubu ◆dFztVLlF36
2007/09/26(水) 23:26:35[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進数に変換する処理をするということはわかるのですが、
関数の自作というのがわかりません、、よろしくお願いします!!
0384デフォルトの名無しさん
2007/09/26(水) 23:26:420385デフォルトの名無しさん
2007/09/26(水) 23:31:40int my_atoi(const char *str){int n;sscanf(str,"%d",&n);return n;}
0386デフォルトの名無しさん
2007/09/26(水) 23:35:130387デフォルトの名無しさん
2007/09/26(水) 23:44:470388デフォルトの名無しさん
2007/09/26(水) 23:46:190389デフォルトの名無しさん
2007/09/26(水) 23:48:280390デフォルトの名無しさん
2007/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;
}
0391デフォルトの名無しさん
2007/09/26(水) 23:56:16[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〜から始めるのではなく
前の結果から巡回シフトを開始します。
わかるかたよろしくお願い致します。
0392デフォルトの名無しさん
2007/09/27(木) 00:00:130393デフォルトの名無しさん
2007/09/27(木) 00:05:45int 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;
}
0394デフォルトの名無しさん
2007/09/27(木) 00:07:06#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;
}
0395394
2007/09/27(木) 00:10:000396デフォルトの名無しさん
2007/09/27(木) 00:25:40[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*);
他の関数はこれで御願いします↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img
/4974.txt
0397デフォルトの名無しさん
2007/09/27(木) 00:27:44http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4974.txt
このプログラムに、例えば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] その他の制限: リストを配列にコピーするのは御法度です。
よろしくおねがいします。
0398デフォルトの名無しさん
2007/09/27(木) 01:18:40[2] OS Windows
[3]問題
double data[5] ={10.8,20.3,30,6.40,10.4,2.12}:
配列の全要素の合計と平気を求めるプログラムをポインタを使って作成しなさい
誰か宜しくお願いします
ちなみに初心者です
0399デフォルトの名無しさん
2007/09/27(木) 01:22:550400デフォルトの名無しさん
2007/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;
}
0401デフォルトの名無しさん
2007/09/27(木) 01:28:58ポインタ自身はそこまで危険じゃない
0402デフォルトの名無しさん
2007/09/27(木) 01:29:04double data[5] ={10.8,20.3,30,6.40,10.4,2.12}:
だと変だな。
最後のコロンは置き換えたが、要素数が間違っているのまでは気づかなかった。
適当に修正してくれよ。
0403デフォルトの名無しさん
2007/09/27(木) 01:32:15テンプレに沿わない質問に答える気がないならお前が答えなくて良いよ
うっとうしいんだよ
■ このスレッドは過去ログ倉庫に格納されています